Problem z WebAPI Allegro.

1

Witam serdecznie,

Rozpoczynam pracę z WebAPI Allegro wykorzystując Delphi7.
Prześledziłam wskazówki dostępne w internecie, ale nadal mam problem z połączeniem. Będę bardzo wdzięczna za każdą uwagę.

Oto co udało mi się zrobić:

  • UZYSKANIE KLUCZA WEBAPI
  • IMPORTOWANIE PLIKU WSDL (NOWY/OTHER/WebService/WSDL IMPORTER)
  • EDYCJA UPLOADER.PAS (wywołanie procedury w 2 częściach - usunięcie błędu długości)
  • DOŁĄCZENIE UPLOADER.PAS DO PROJEKTU (uploader.pas w uses)
  • ZMIANY W PLIKU SOAP (kwestia myślników i podkreśleń):

W pliku borland/src/soap/OPToSoapDomConv.pas, w linii 971 (w zależności od wersji) jest:

if MD.Params[J].Name = ExtractLocalName(Node.NodeName) then

powinno być:

if StringReplace(MD.Params[J].Name,'_', '', [rfReplaceAll]) = StringReplace(ExtractLocalName(Node.NodeName), '-', '', [rfReplaceAll]) then

  • BRAK ZMIANY W PLIKU SOAP (nie podmieniłam, nie mam tego w źródle):

w tym samym pliku, w okolicach linii 2300 odnaleźć należy:

if SameText(InternalName, PropList[I].Name) then

i zamienić na:

if StringReplace(InternalName, , , [rfReplaceAll]) = StringReplace(PropList[I].Name, '_', '', [rfReplaceAll]) then

  • INSTALOWANIE KOMPONENTU DCPCRYPT2 I UPDATE DO SZYFROWANIA SHA256
  • WYKORZYSTANIE IdEncoderMIME1 DO SZYFROWANIA BASE64
  • DODANIE KOMPONENTU HTTPRIO1 NA FORMĘ

WSDLLocation => https://webapi.allegro.pl/uploader.php?wsdl
Port => AllegroWebApiPort
Service => AllegroWebApiService

I dotąd było gładko. A teraz kwiatki:


  1. "interface not supported" dla:
procedure TForm3.Button1Click(Sender: TObject);
var
IDusera : integer;
begin
IDusera := (HTTPRIO1 as allegrowebapiporttype).doGetUserID(1,'','lo','ha') ;
showmessage (inttostr(IDUsera));
end;

  1. "IOHandler value is not valid" dla:
procedure TForm3.Button2Click(Sender: TObject);
begin
// wysyłane są zmienne globalne

doLoginEncRequest := TStringStream.Create('');
doLoginEncResponse := TStringStream.Create('');
doLoginEncRequest.WriteString('user-login='+user_login+'&user-password='+hasloszyfr+'&country-code='+inttostr(country_code)+'&webapi-key='+webapi_key+'&local-version='+local_version);

Memo4.Text:=doLoginEncRequest.DataString; //wyświetla
IdHTTP1.Request.contenttype:='application/x-www-form-urlencoded';
IdHTTP1.Post('https://webapi.allegro.pl/uploader.php?wsdl', doLoginEncRequest, doLoginEncResponse);

Memo3.Text:=doLoginEncResponse.DataString; //nic nie wyświetla

doLoginEncRequest.Free;
doLoginEncResponse.Free;

Z góry dziękuję każdemu, kto pomoże mi ruszyć z miejsca.
Pozdrawiam

1

Witam, Najpóźniej w poniedziałek zamieszczę gotowy kod do łączenia z allegro (mam go na drugim komputerze). Pamiętam że spędziłem dużo czasu bo miałem AV. Na pewno trzeba się łączyć wykorzystując procedurę z pliku wsdl. do tworzenia HTTPRio !!! Inaczej jest lipa.

2

Szanowny Kolego, gdybyś tylko wiedział ile mi te słowa przyniosły radości w chwilach ciemnej kodowej frustracji:)) Czekam z niecierpliwością i uśmiechem wdzięczności na ustach. :)) Dziękuję za odzew.

1

Poniżej przedstawiam jak należy łączyć się z allegro po przez webapi.

Var
  Port : AllegroWebApiPortType;
  OdpInfo : WideString;
  OdpVersion: Int64;
  OdpTime : Int64;
  OdpSession : WideString;
  OdpOffset : Int64;

Procedure TWebApi.Create;
begin
   Port := GetAllegroWebApiPortType(True,'',nil);
end;

Function TWebApi.LoginEnc(User,Password,Key : WideString): Boolean;
begin
  Result := False;
  Password := Base64EncodeStr(GetStringHash(Password));
  Try
   Port.doQuerySysStatus(1,1,Key,OdpInfo,OdpVersion);
   Try
     Port.doLoginEnc(User,Password,1,Key,OdpVersion,OdpSession,OdpOffset,OdpTime);
     Result := True;
   Except
    On E: ERemotableException do
      vErrorMsg := GetMessageError(E);
   End;
  Except
    On E: ERemotableException do
      vErrorMsg := GetMessageError(E);
  End;
end;

Pamiętaj aby na końcu zwalniać Port, najważniejsze co ci jest potrzebne to te 3 procedury:

Port := GetAllegroWebApiPortType(True,'',nil);
Port.doQuerySysStatus(1,1,Key,OdpInfo,OdpVersion);
Port.doLoginEnc(User,Password,1,Key,OdpVersion,OdpSession,OdpOffset,OdpTime);
0

Wielkie dzięki. Niestety u mnie nic się nie ruszyło.

Wywołanie funkcji nadal zwraca mi błąd: "Interface not supported". Nie działa nawet prosty doQuerySysStatus, doQueryAllSysStatus, doLogin. Musiałam coś spasztecić w innym miejscu. W jakiej wersji Delphiego testowałeś kod? Może z samym wsdl jest coś nie tak?

A połączenie w php zajęło mi raptem 15 min. Już się zastanawiam, czy programowo nie tworzyć pliku php, wysyłać go na dysk, wykonywać i kasować. Tylko martwię się kwestiami bezpieczeństwa. No i zostaje zabawa pobierania danych z pliku.

Masz pomysł jak to ugryźć?

0

Jest, jest :))))))))) Wysyła i odbiera:)))

Oto co pomogło: Zaczęłam szukać w wsdl, bo tam jest przecież "interface". Od niechcenia ponownie zaimportowałam plik. Wygenerowany pas był inny. I zaczęło śmigać:)))

Twoja Rafale funkcja sprawdza się świetnie:) Dziękuję raz jeszcze i pozdrawiam:)

0

Koleżanko sprawdzałem przed chwilą i wszystko działa. Wykonaj następujące czynności:

  1. Usuń wszystkie pliki OPToSoapDomConv.dcu - powinny być 2
  2. Wykonaj zmiany w pliku OPToSoapDomConv.pas
  3. Delphi -> Tools -> E -> Library path -> dodaj C:\Program Files (x86)\Borland\Delphi7\Source\Soap <- ścieżka musisz sprawdzić u siebie jaka
  4. Skompiluj wszystkie moduły i musi działać.
0

Teraz nawet moja prosta procedura:

 
procedure TForm3.Button1Click(Sender: TObject);
var
IDusera : integer;
begin
IDusera := (HTTPRIO1 as allegrowebapiporttype).doGetUserID(1,'','lo','ha') ;
showmessage (inttostr(IDUsera));
end;

bez jakichkolwiek poprawek zwraca ładnie wartości.

No to wiem, co dziś będę robić:)

0

Zatem tak zrobię. Dużo jest trudności w wykorzystaniu dalszych funkcji? Już się boję zwracania kategorii:)

0

Sporo pracy już za mną:)

Zdążyłam już skorzystać z wielu procedur (np. doGetCatsDataCount) i funkcji (np. doMyBilling), wyciągam dane ze zmiennych różnego typu, w tym ze struktury(np. doGetMyData) i tablic dynamicznych (np. doGetCatsDataLimit).

Jak do tej pory nie musiałam tworzyć swoich klas. Klasy są w WSDL. Wszystko działa sprawnie.

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