Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Paypal über die REST API Exception (https://www.delphipraxis.net/193234-paypal-ueber-die-rest-api-exception.html)

Mavarik 8. Jul 2017 18:23

Paypal über die REST API Exception
 
Hallo Zusammen!

Ich versuche gerade von der Paypal Sandbox ein Token zu erhalten.

Ich mache überall das gleiche:

REST-Debugger (Leerer Result)

Delphi 10.0 / Delphi 10.1 Exception Empty Certifikatsliste
Delphi 10.2 "INTERNAL_SERVICE_ERROR"

Das einzige wo es funktioniert ist: PostMan (wie von Paypal vorgeschlagen)

Hier kommt JSON und das Token zurück...

Hat jemand ne Idee?

Edit: Wenn ich einen eigenen Server (Ohne SSL) als Ziel angebe, sieht es für mich so aus, als würden alle Clients genau das gleiche senden...

Delphi-Quellcode:
procedure TForm238.Button1Click(Sender: TObject);

  function NoCRLF(Const S: String) : String;
    begin
      Result := StringReplace(S,#13#10,'',[rfreplaceall]);
    end;

var
  Content  : TStringList;
  Response : IHttpResponse;
  Basic    : String;
begin
  Content := TStringList.Create;
  try
    Content.Add('grant_type=client_credentials');

    Basic := NoCRLF(TNetEncoding.Base64.Encode('<UserID>:<Secret>'));

    Req.CustomHeaders['Accept']         := 'application/json';
    Req.CustomHeaders['Accept-Language'] := 'en_US';
    Req.CustomHeaders['Content-Type']   := 'application/x-www-form-urlencoded';
    Req.CustomHeaders['Authorization']  := 'Basic '+Basic;

    Memo1.Lines.Clear;

    Response := Req.Post('https://api.sandbox.paypal.com/v1/oauth2/token',Content);
    Memo1.Lines.Add('Content-Length : '+Response.ContentLength.ToString);
    Memo1.Lines.Add(Response.StatusCode.ToString+' '+Response.StatusText);
    Memo1.Lines.Add(Response.ContentAsString())
  finally
    Content.Free;
  end;
end;
Mavarik

TiGü 10. Jul 2017 08:34

AW: Paypal über die REST API Exception
 
Ohne eine konkrete Lösung für dich zu haben, aber hast du auch andere REST-Debugger/-Tester ausprobiert außer Postman?
Ich hatte vor Kurzem auch ein Problem mit einer REST-Schnittstelle und konnte das Problem nur erkennen, weil ich in Fiddler den händisch eingegebenen Request mit dem von meiner Delphi-Anwendung verglichen habe und dadurch sehen konnte, das ich die URL nicht codieren darf.

http://www.delphipraxis.net/1363588-post15.html

Vielleicht einfach mal den Aufbau des Requests von Postman und von dir vergleichen?
Irgendwo muss es ja einen Unterschied geben.

Mavarik 10. Jul 2017 13:34

AW: Paypal über die REST API Exception
 
Zitat:

Zitat von TiGü (Beitrag 1376331)
Ohne eine konkrete Lösung für dich zu haben, aber hast du auch andere REST-Debugger/-Tester ausprobiert außer Postman?
Ich hatte vor Kurzem auch ein Problem mit einer REST-Schnittstelle und konnte das Problem nur erkennen, weil ich in Fiddler den händisch eingegebenen Request mit dem von meiner Delphi-Anwendung verglichen habe und dadurch sehen konnte, das ich die URL nicht codieren darf.
Vielleicht einfach mal den Aufbau des Requests von Postman und von dir vergleichen?
Irgendwo muss es ja einen Unterschied geben.

SSL?!? bzw. https nicht ganz so einfach, oder?

Wie ich geschrieben habe... der Request auf einen eigenen Server ohne https sieht alles gleich aus...

TiGü 10. Jul 2017 14:05

AW: Paypal über die REST API Exception
 
Explizit den TRESTRequestParameterOption.poDoNotEncode aus- bzw. einschalten?!

mjustin 10. Jul 2017 14:08

AW: Paypal über die REST API Exception
 
Zitat:

Zitat von Mavarik (Beitrag 1376392)
SSL?!? bzw. https nicht ganz so einfach, oder?

Fiddler und HTTPS/TLS geht: Fiddler ist gegenüber dem Client ein HTTPS Server mit eigenem Zertifikat, kann die Nachricht daher im Klartext lesen und loggen.

Mavarik 11. Jul 2017 07:57

AW: Paypal über die REST API Exception
 
Zitat:

Zitat von TiGü (Beitrag 1376393)
Explizit den TRESTRequestParameterOption.poDoNotEncode aus- bzw. einschalten?!

Ich nutze keine REST Komponente sondern nativ HTTP(s)

Mavarik 11. Jul 2017 08:35

AW: Paypal über die REST API Exception
 
Zitat:

Zitat von mjustin (Beitrag 1376394)
Zitat:

Zitat von Mavarik (Beitrag 1376392)
SSL?!? bzw. https nicht ganz so einfach, oder?

Fiddler und HTTPS/TLS geht: Fiddler ist gegenüber dem Client ein HTTPS Server mit eigenem Zertifikat, kann die Nachricht daher im Klartext lesen und loggen.

Gruselig... Man in the middle... Klappt aber...

Auch hiermit sehe ich keine Unterschiede...

DeddyH 9. Nov 2020 14:31

AW: Paypal über die REST API Exception
 
Ich greife den alten Thread noch einmal auf, da ich vor demselben Problem stehe. Postman/Talend API-Tester funktioniert, in Delphi mit Indy Error 400. Ich habe mir jetzt extra Sydney samt PayPal Enterprise Connector installiert: Anmeldung schient zu funktionieren, der Token bleibt leer. Da der Fehler 400 ist und nicht 401, vermute ich, dass PayPal irgendetwas an meinem Body zu bemängeln hat (Content-Type application/x-www-url-encoded, Inhalt grant_type=client_credentials). Ich habe es schon mit Stringliste und UTF8-kodiertem StringStream versucht, immer dasselbe. Muss ich meinen Delphi-Webserver in die Tonne treten und alles noch einmal in NestJS schreiben, oder hat jemand noch eine zündende Idee?

Bbommel 9. Nov 2020 18:41

AW: Paypal über die REST API Exception
 
Ich habe es jetzt mal auf die schnelle mit REST-Komponenten zusammengeklickt und bekomme so ein Token:

Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
begin
  PaypalAuthReq.ClearBody;
  PaypalAuthReq.Body.Add('grant_type=client_credentials',ctTEXT_PLAIN);
  PaypalAuthReq.Execute;
  if PayPalAuthResponse.StatusCode<300 then
    MemoResult.Lines.Text:='Erfolg.'
  else
    MemoResult.Lines.Add('Fehlercode: '+PayPalAuthResponse.StatusCode.ToString);
  MemoResult.Lines.Add(PayPalAuthResponse.Content);
end;
Wichtiger Unterschied zur Paypal-Anleitung: ich war mal so frei und habe als Content-Type "text/plain" genommen anstelle dieses www-form-urlencoded-Gedöns. Das scheint dann zu funktionieren.

Vielleicht reicht dir der Schnipsel ja schon, sonst kann ich das Demoprojekt auch gerne anfügen.

DeddyH 10. Nov 2020 06:15

AW: Paypal über die REST API Exception
 
Lutsch mich rund und nenn mich Bärbel, das funktioniert (zumindest unter Sydney) :thumb:. Herzlichen Dank, jetzt komme ich endlich weiter.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:07 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz