Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi REST Zugriff mit OAuth1 (https://www.delphipraxis.net/182129-rest-zugriff-mit-oauth1.html)

Guido R. 2. Okt 2014 13:17

REST Zugriff mit OAuth1
 
Hallo !

Ich soll derzeit eine Schnittstelle zum Magento-Webshop unter Delphi (XE5) schreiben.
Die Schnittstelle der Wahl ist hier REST. Ich habe jedoch Schwierigkeiten, mit Hilfe von tRestClient, tOAuth1Authenticator, tRestRequest und tRestResponse die OAuth1-Authentifizierung von magento umzusetzen. Die Werte habe ich wie in der magento REST-Dokumentation gesetzt, einen "OAuth-Verbraucher" habe ich angelegt, jedoch komme ich im besten Fall bis zur Eingabe von Benutzername und Passwort im OAuthWebForm (das ich eigentlich gar nicht haben will) und dann ist Sense
:kotz:

Das Beispiel von emba ist nicht wirklich hilfreich, von der "Hilfe" ganz zu schweigen :
" Embarcadero Technologies verfügt zurzeit über keine zusätzlichen Informationen. Bitte unterstützen Sie uns bei der Dokumentation dieses Themas, indem Sie Ihre Kommentare auf der Diskussionsseite eingeben. "

Hat jemand ein paar Tipps dazu, oder ein Tutorial ?

Gruß

Guido R.

mkinzler 2. Okt 2014 13:47

AW: REST Zugriff mit OAuth1
 
http://www.nickhodges.com/post/write...elphi-xe7.aspx

Guido R. 2. Okt 2014 15:51

AW: REST Zugriff mit OAuth1
 
Danke für den Link, aber das bringt mich leider nicht wirklich weiter.
Hodges lässt Access Token und Access Token Secret von Twitter erstellen.
Das geht in magento anscheinend nicht. Zumindest kann man die "Autorisierten OAuth-Zeichen" (babelfish lässt grüßen) nur aktivieren, widerrufen oder löschen.

http://www.magentocommerce.com/api/r...ntication.html

Ich steh' echt auf dem Schlauch :wall:

mjustin 2. Okt 2014 16:07

AW: REST Zugriff mit OAuth1
 
Zitat:

Zitat von Guido R. (Beitrag 1274656)
Hodges lässt Access Token und Access Token Secret von Twitter erstellen.
Das geht in magento anscheinend nicht.

Im Beispiel-PHP Skript auf der Magento Dokuseite sind diese Variablen enthalten:

Code:
$consumerKey = 'yourconsumerkey';
$consumerSecret = 'yourconsumersecret';
Ich nehme stark an, dass es irgendwo ein Programm zur Berechnung des consumerSecret Werts gibt.

Ach, da steht es doch auf der verlinkten Seite:

Zitat:

Before starting to make API requests, you need to register the application. After the registration, you will receive the Consumer Key that will identify you in Magento. Also, you will receive a Consumer Secret. This secret will be used when requesting for a Request Token.

You can register your application by selecting System > Web Services > REST - OAuth Consumers and clicking Add New in the Admin Panel.

mkinzler 2. Okt 2014 16:12

AW: REST Zugriff mit OAuth1
 
Müsste über die Adminconsole gehen

http://www.magentocommerce.com/api/r...ganApplication

Guido R. 2. Okt 2014 17:02

AW: REST Zugriff mit OAuth1
 
Das habe ich auch bereits.
Unter System->Webdienste->REST - OAuth-Verbraucher habe ich eine App angelegt. Magento liefert Key und Secret dazu. Diese gebe ich in ConsumerKey und ConsumerSecret ein.

BTW : Meine bisherigen Versuche halten sich nahe an embas RESTDemo (Twitter)

Als nächstes müsste man sich RequestToken und RequestSecret über den RequestTokenEndpunkt "http://www.meinwebshop.de/oauth/initiate" holen.
Delphi-Quellcode:
{...}
  RESTClient.BaseURL := OAuth1Magento.RequestTokenEndpoint;
  RESTRequest.Method := TRESTRequestMethod.rmPOST;
  RESTRequest.Execute;
{...}
Dies klappt leidlich. Die Rückgabe in RESTResponse ist vorhanden
"oauth_token=d489f53dc0eb93337086e8df6892fb81&oaut h_token_secret=5e7da1d07766ced653d2cf6a0a63d639&oa uth_callback_confirmed=true"
RESTResponse.GetSimpleValue gibt jedoch keine Werte zurück, da der ContentType weder "CONTENTTYPE_TEXT_HTML" noch "CONTENTTYPE_APPLICATION_JSON" ist.

Also pflücke ich den String selbst auseinander und trage die Werte in RequestToken und RequestSecret ein.

Als nächstes bräuchten wir die Authentifizierung der App
Delphi-Quellcode:
  LURL := OAuth1Magento.AuthenticationEndpoint;
  LURL := LURL + '?oauth_token=' + OAuth1Magento.RequestToken;

  wv := Tfrm_OAuthWebForm.Create(self);
  try
    wv.ShowModalWithURL(LURL);
  finally
    wv.Release;
  end;
Ein Fenster mit Admin-Anmeldung erscheint - Nach korrekter Eingabe der Zugangsdaten kommt die Frage, ob man die App authentifizieren möchte.

... und ab da steh ich auf dem Schlauch. - Das Fenster sollte eigentlich von alleine schließen und die App unter Magento -> System -> Webdienste -> REST Meine Apps erscheinen.

Beides passiert nicht.
:(

mjustin 2. Okt 2014 17:40

AW: REST Zugriff mit OAuth1
 
Zitat:

Zitat von Guido R. (Beitrag 1274669)


Als nächstes bräuchten wir die Authentifizierung der App
Delphi-Quellcode:
  LURL := OAuth1Magento.AuthenticationEndpoint;
  LURL := LURL + '?oauth_token=' + OAuth1Magento.RequestToken;

  wv := Tfrm_OAuthWebForm.Create(self);
  try
    wv.ShowModalWithURL(LURL);
  finally
    wv.Release;
  end;
Ein Fenster mit Admin-Anmeldung erscheint - Nach korrekter Eingabe der Zugangsdaten kommt die Frage, ob man die App authentifizieren möchte.

... und ab da steh ich auf dem Schlauch. - Das Fenster sollte eigentlich von alleine schließen und die App unter Magento -> System -> Webdienste -> REST Meine Apps erscheinen.

Beides passiert nicht.
:(

Ist der Quelltext für Tfrm_OAuthWebForm in Delphi enthalten, so dass man hier hinein debuggen könnte?

Im Source muss - mehr oder weniger direkt - die Bedingung für die erfolgreiche Anmeldung und das Schliessen des Tfrm_OAuthWebForm enthalten sein.

Daniel 2. Okt 2014 21:20

AW: REST Zugriff mit OAuth1
 
Bei OAuth1 gibt es (zu) viele Versionen bzw. Varianten.
Ich vermute, dass Dein PHP-System die Rückgabeparameter anders nennt als z.B. Twitter.
Schnappe Dir mal den REST-Debugger (liegt Delphi bei) und gucke mal, was da vom Server zurück kommt.

Guido R. 8. Okt 2014 13:46

AW: REST Zugriff mit OAuth1
 
Die Tfrm_OAuthWebForm ist in REST.Authenticator.OAuth.WebForm.Win vorhanden und man kann sie debuggen.
Ich habe den Eindruck, dass in dem RESTDemo von emba überhaupt keine Routine zum Schließen dieses Fensters hinterlegt ist.
Zumindest nicht für Twitter/OAuth1 - Bei den OAuth2-Beispielen schon. Dort werden die Funktionen für OnBeforeRedirect und/oder OnAfterRedirect und/oder OnTitleChanged direkt nach der Erzeugung des OAuthWebForm gesetzt.

Mit dem RestDebugger komme ich auch nicht wirklich weiter...
Wenn ich den OAuth-Assistant verwende, die vorgegebenen Endpoints und Client-Data eingebe, erhalte ich bei Klick auf "Step #1: Get Request-Token" die Meldung "Cannot proceed without Request-Token"...:glaskugel:

Guido R. 16. Okt 2014 17:02

AW: REST Zugriff mit OAuth1
 
so...

Bin jetzt einen kleinen Schritt weiter.
Hab's nun geschafft, RequestToken und VerifierPIN zu erhalten, aber beim Abruf des AccessTokens bekomme ich eine Fehlermeldung.

Delphi-Quellcode:
procedure TForm1.GetAccessToken(Sender: TObject);
var S:String;
begin
 RESTRequest.ResetToDefaults;
 RESTClient.ResetToDefaults;
 RESTResponse.ResetToDefaults;

 RestClient.Authenticator := OAuth1Auth;

 RESTClient.BaseURL := OAuth1Auth.AccessTokenEndpoint;
 RESTRequest.Method := TRESTRequestMethod.rmPost;
 RESTRequest.Params.AddItem('oauth_verifier', OAuth1Auth.VerifierPIN, TRESTRequestParameterKind.pkGETorPOST, [TRESTRequestParameterOption.poDoNotEncode]);
 RESTRequest.Execute;

 {HIER kommt die Fehlermeldung}

 Memo1.Lines.Add(RestResponse.Content);

 if {RESTResponse.}GetSimpleValue('oauth_token', S)
  then OAuth1Auth.AccessToken := S;
 if {RESTResponse.}GetSimpleValue('oauth_token_secret', S)
  then OAuth1Auth.AccessTokenSecret := S;

 AccessKeyEdit.Text   := OAuth1Auth.AccessToken;
 AccessSecretEdit.Text := OAuth1Auth.AccessTokenSecret;
end;
Ich erhalte ein Bad Request : "oauth_problem=parameter_absent&oauth_parameters_a bsent=oauth_verifier", obwohl alle bis dato gesetzten Keys, Secrets und PINs im OAuth1Authenticator vorhanden sind (auch der VerifierPIN). Auch ob ich "RESTRequest.Params.AddItem(...);" verwende oder nicht, macht keinen Unterschied.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:23 Uhr.
Seite 1 von 2  1 2      

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