Komunikacja z InPost - błąd "Autentication failed" w metodzie GetLabel

0

Witam
Próbuję od kilku dni "dobrać" się do API firmy kurierskiej InPost.
W PHP poszło gładko - wszystko śmiga jak powinno, niestety próby dokonywane z Delphi cały czas nieudane :(
Mam zrobioną już integrację API (z Delphi) z firmą kurierską Siódemka więc powiedzmy że podstawy posiadam.

Szukałam pomocy u źródła czyli w dziale IT InPosta oraz w firmie realizującej tą usłągę dla InPosta ([email protected]) niestety IT Inposta posiadają tylko przykłady w .NET a [email protected] nie mają Delphi a sam kod źródłowy nic im nie mówi

Testowy WSDL InPosta jest po adresem
http://api.inpost.opennet.pl/api.asmx?WSDL
Login testowy: demo
Hasło: demo

W załączniku jest dokumentacja API InPosta oraz prosta aplikacja którą zrobiłam.

Aplikacja wywołuje dwie metody
GetTracking i GetLabel
GetLabel zwraca błąd 401-Athentication failed
a GetTracking 1110-Package number cannot be null/empty

zastanawiające jest to że w GetTracking autoryzacja najwidoczniej jest poprawna a w GetLabel choć podaje te same dane nie przechodzi

Czy ktoś z Was widzi jakieś błędy?

0

@kamilak23 ja dość niedawno robiłem integrację systemu w Delphi7 z FedEX i Pharmalink. W obu przypadkach musiałem olać delphiowy WSDL i użyć WinAPI. Poniżej mój kod który zadziałał bez problemu:

uses ComObj;
procedure TForm1.Button1Click(Sender: TObject);
var
  mhttp: OleVariant;
  URL: String;
  lParams: TStringList;
begin
  lParams := TStringList.Create;
  lParams.LoadFromFile('C:\fedexrequest.xml');
  URL := 'https://poland.fedex.com:443/fdsWs/IklServicePort';
  mhttp := CreateOleObject('MSXML2.XMLHTTP');
  mhttp.Open('POST', URL, False);  // False=synchronously
  //mhttp.setRequestHeader('User-Agent', APP_WS_USER_AGENT); // opcjonalnie
  mhttp.setRequestHeader('Content-Type', 'text/xml; charset=utf-8');
  mhttp.send(lParams.Text);
  if mhttp.Status = 202 then
    ShowMessage('ACCEPTED OK!')
  else
    Showmessage(mhttp.StatusText+ mhttp.responseText);
end;

To oczywiście jest demo i zadziałało na ich testowym XML ale po przeróbkach i integracji z bazą działa to w kilku różnych hurtowniach farmaceutycznych od chyba marca tego roku i nikt nie ma zastrzeżeń ;)

0

ok przetestuje
czy mógłbyś jeszcze podać zawartość pliku C:\fedexrequest.xml

1

zrobiłam sama prosty pliczek xml z zapytaniem do Inposta lParams.LoadFromFile('C:\inpostrequest.xml');
i .... zadziałało bez problemu :)

O KRÓLU @woolfik jesteś wielki!!!

To jeszcze jak byś mógł mi podrzucić przykładzik jak Ty obrabiasz odpowiedz z serwera - skoro przetestowałeś to nie będę wyważać już wyważonych drzwi.

0

Tzn tak: Jak wrócę do domu to poszukam kodu odbierającego paczkę danych z FedEX (to też jest XML lub PDF zakodowany w Base64 - w zależności czy generujesz zwrotnie etykiety itp.) i przekazanie tej paczki do innej procedury PL/SQL. Niestety samej procedury PL/SQL podesłać Ci nie mogę bo nie pozwala mi na to umowa ale w niej jest praktycznie odczyt XML i odpowiednie operacje na bazie. Jak chcesz to w Delphi zrobić to kod, który Ci wyślę możesz przerobić w ten sposób, że zapiszesz sobie odpowiedź do pliku, a następnie używając najprostszej metody na świecie czyli XML Data Binding i tego pliku przygotować sobie klasę do parsowania odpowiedzi ;)

0

ok to jak znajdziesz to będę wdzięczna
Pozdrawiam

1

@kamilak23 Do poprzedniej metody musisz dorobić coś takiego:

  mhttp.send(lParams.Text);  //lParams to TStringList z XML
  lParams.Text := mhttp.responseText;
  if mhttp.StatusText = 'OK'  then
  begin
      lParams.Text; //tutaj masz caly zwrotny XML który przekazuję jako parametr do procedury PL/SQL
      //robisz z tym już co chcesz ;)
  end;
2

Z ciekawości i aby utrzeć nosa hejterom typu @Radekk postawiłem sprawdzić kod @kamilak23 (w jakość kodu nie wnikam) pod Delphi X8 czyli przedostatnia wersja Delphi oczywiście na nowo zaimportowałem WSDL, bezboleśnie dało się go przerobić pod nową wersję Delphi (właściwie prawie żadnych przeróbek tylko metoda GetTracking ma inne parametry - tylko 2 pierwsze co jest ZGODNE Z DOKUMENTACJĄ) i jak myślicie co się okazało? Oczywiście tak jak przypuszczałem wszystko działa! Wychodzi na to że jednak to nie Delphi ogólnie jest przestarzałą technologią a Delphi 7 a że jest to wydane za czasów debiutu Windows XP 13-sto letnie środowisko wiec wcale się nie dziwię że nie chciało działać... ciekawe jak by to działało genialnych rozwiązaniach jakie udostępniał Microsoft w 2002r. pod .NET 1.0.

EDIT:
Ktoś już skasował post @Radekk ale ja swój zostawię aby ktoś kto szuka rozwiązania wiedział że w nowych Delphi nie ma z tym problemu.

0

Na wersji Delphi Xe7 też bez problemu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1