![]() |
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. |
AW: REST Zugriff mit OAuth1
|
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. ![]() Ich steh' echt auf dem Schlauch :wall: |
AW: REST Zugriff mit OAuth1
Zitat:
Code:
Ich nehme stark an, dass es irgendwo ein Programm zur Berechnung des consumerSecret Werts gibt.
$consumerKey = 'yourconsumerkey';
$consumerSecret = 'yourconsumersecret'; Ach, da steht es doch auf der verlinkten Seite: Zitat:
|
AW: REST Zugriff mit OAuth1
|
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:
Dies klappt leidlich. Die Rückgabe in RESTResponse ist vorhanden
{...}
RESTClient.BaseURL := OAuth1Magento.RequestTokenEndpoint; RESTRequest.Method := TRESTRequestMethod.rmPOST; RESTRequest.Execute; {...} "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:
Ein Fenster mit Admin-Anmeldung erscheint - Nach korrekter Eingabe der Zugangsdaten kommt die Frage, ob man die App authentifizieren möchte.
LURL := OAuth1Magento.AuthenticationEndpoint;
LURL := LURL + '?oauth_token=' + OAuth1Magento.RequestToken; wv := Tfrm_OAuthWebForm.Create(self); try wv.ShowModalWithURL(LURL); finally wv.Release; end; ... 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. :( |
AW: REST Zugriff mit OAuth1
Zitat:
Im Source muss - mehr oder weniger direkt - die Bedingung für die erfolgreiche Anmeldung und das Schliessen des Tfrm_OAuthWebForm enthalten sein. |
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. |
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: |
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:
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.
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz