![]() |
REST-Zugriff auf Magento 2 (OAuth)
Hallo zusammen,
ich versuche nun schon seit einiger Zeit mit Delphi XE6 eine Schnittstelle für Magento 2.1 zu entwickeln. In Versionen bis Magento 1.9 wurde dies per SOAP realisiert, mit der Umstellung der API seit Magento 2 erscheint mir dies allerdings nicht mehr die beste Lösung zu sein. Nun zu meinem Problem. Ich habe in Magento eine Integration erstellt, mit allen Rechten versehen und aktiviert. Hier erhalte ich: Konsumentenschlüssel, Konsumentengeheimnis, Zugriffstoken und Zugriffstoken-Geheimnis. Nun habe ich einen RESTClient, RESTRequest, RESTResponse und einen OAuth1Authenticator. Dem Authenticator weise ich die zwei Tokens und Secrets zu. Außerdem passe ich im Client die Properties für Accept, AcceptCharset und AcceptEncoding an. Sofern ich nun ein GET-Request auf ![]() Die IP 192.168.200.108 ist in unserem lokalen Netzwerk eine Standardinstallation von Magento in einer VM. Will ich mir allerdings eine gefilterte Auftragsmenge per ![]() Mit der REST-Client-Erweiterung für den Firefox erhalte ich allerdings meine gefilterte Auftragsmenge. Verschlüsselungsalgorhitmus im Authenticator ist HMAC_SHA1. Ich habe auch bereits per Wireshark die beiden Requests (FF-Restclient und Delphi) verglichen. Diese sehen recht identisch aus. Delphi URL-codiert die Klammern, was die REST-Client-Erweiterung nicht macht. Wenn ich dem RESTClient in Delphi allerdings sage, dass die URL bereits codiert ist, erhalte ich als Rückgabe ein HTML mit 400 Bad Request. Ich habe nun momentan echt keine Ahnung mehr, wo ich noch ansetzen könnte. Hat von Euch vielleicht jemand noch eine Idee?
Code:
OAuth1Authenticator1.ConsumerKey := sCONSUMER_KEY;
OAuth1Authenticator1.ConsumerSecrect := sCONSUMER_SECRET; OAuth1Authenticator1.AccessToken := sACCESS_TOKEN; OAuth1Authenticator1.AccessTokenSecret := sACCESS_TOKEN_SECRET; RestClient2.AcceptEncoding := 'gzip, deflate'; RESTRequest2.AcceptEncoding := 'gzip, deflate'; RestClient2.Accept := '*/*'; RESTRequest2.Accept := '*/*'; RESTClient2.AcceptCharset := 'UTF-8'; RESTRequest2.AcceptCharset := 'UTF-8'; RESTClient2.BaseURL := 'http://192.168.200.108/'; RESTRequest2.Params.Clear; RESTRequest2.Resource := 'index.php/rest/V1/orders?searchCriteria[filter_groups][0][filters][0][field]=created_at&searchCriteria[filter_groups][0][filters][0][value]=2016-07-01 00:00:00&searchCriteria[filter_groups][0][filters][0][condition_type]=gt'; RESTRequest2.Method := rmGET; RESTRequest2.Params.Clear; RESTRequest2.Params.AddItem; RESTRequest2.Params[0].name := 'private_content_version'; RESTRequest2.Params[0].Value := 'c6f9e0919d7028c78ee63e79593ef689'; RESTRequest2.Params[0].ContentType := ctTEXT_PLAIN; RESTRequest2.Params[0].Kind := pkCOOKIE; RESTRequest2.Params[0].Options := RESTRequest2.Params[0].Options + [poDoNotEncode]; RESTRequest2.Params.AddItem; RESTRequest2.Params[1].name := 'mage-messages'; RESTRequest2.Params[1].Value := '%5B%5D'; RESTRequest2.Params[1].ContentType := ctTEXT_PLAIN; RESTRequest2.Params[1].Kind := pkCOOKIE; RESTRequest2.Params[1].Options := RESTRequest2.Params[1].Options + [poDoNotEncode]; RESTRequest2.Params.AddItem; RESTRequest2.Params[2].name := 'Accept-Language'; RESTRequest2.Params[2].Value := 'null'; RESTRequest2.Params[2].ContentType := ctTEXT_PLAIN; RESTRequest2.Params[2].Kind := pkHTTPHEADER; RESTRequest2.Params[2].Options := RESTRequest2.Params[2].Options + [poDoNotEncode]; RESTRequest2.Params.AddItem; RESTRequest2.Params[3].name := 'DNT'; RESTRequest2.Params[3].Value := '1'; RESTRequest2.Params[3].ContentType := ctTEXT_PLAIN; RESTRequest2.Params[3].Kind := pkHTTPHEADER; RESTRequest2.Params[3].Options := RESTRequest2.Params[3].Options + [poDoNotEncode]; RESTRequest2.Params.AddItem; RESTRequest2.Params[4].name := 'Connection'; RESTRequest2.Params[4].Value := 'keep-alive'; RESTRequest2.Params[4].ContentType := ctTEXT_PLAIN; RESTRequest2.Params[4].Kind := pkHTTPHEADER; RESTRequest2.Params[4].Options := RESTRequest2.Params[4].Options + [poDoNotEncode]; RESTRequest2.Execute; Memo1.Lines.Add(RESTResponse2.Content); |
AW: REST-Zugriff auf Magento 2 (OAuth)
Zitat:
|
AW: REST-Zugriff auf Magento 2 (OAuth)
Hier mal die beiden Auszüge aus Wireshark.
Delphi:
Code:
Firefox:
GET /index.php/rest/V1/orders?searchCriteria%5Bfilter_groups%5D%5B0%5D%5Bfilters%5D%5B0%5D%5Bfield%5D=created_at&searchCriteria%5Bfilter_groups%5D%5B0%5D%5Bfilters%5D%5B0%5D%5Bvalue%5D=2016-07-01%2000:00:00&searchCriteria%5Bfilter_groups%5D%5B0%5D%5Bfilters%5D%5B0%5D%5Bcondition_type%5D=gt HTTP/1.1
Accept-Language: null DNT: 1 Connection: keep-alive Authorization: OAuth oauth_consumer_key="5cbx1us6n7tpn5iv0a33p6iyq0otupsp", oauth_nonce="D4F1CF6F5DBB4F833D6CE644D3C20D95", oauth_signature="iXk6yBvuasDKnbdcxfATSQRJ%2BEg%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1496824715", oauth_token="nvoankn2g8jraga3k22ax9eyf55lqk9e", oauth_version="1.0" Host: 192.168.200.108 Accept: */* Accept-Charset: UTF-8 Accept-Encoding: gzip, deflate, identity User-Agent: Embarcadero RESTClient/1.0 Cookie: mage-messages=%5B%5D; private_content_version=c6f9e0919d7028c78ee63e79593ef689
Code:
Bei Delphi hab ich im Accept-Encoding immer 'identity' drin, welches ich aber irgendwie nicht raus bekomme.
GET /index.php/rest/V1/orders?searchCriteria[filter_groups][0][filters][0][field]=created_at&searchCriteria[filter_groups][0][filters][0][value]=2016-07-01%2000:00:00&searchCriteria[filter_groups][0][filters][0][condition_type]=gt HTTP/1.1
Host: 192.168.200.108 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0 Accept: */* Accept-Language: null Accept-Encoding: gzip, deflate Authorization: OAuth oauth_version="1.0", oauth_signature_method="HMAC-SHA1", oauth_nonce="5xayplNhc6EVeoM", oauth_timestamp="1496824768", oauth_consumer_key="5cbx1us6n7tpn5iv0a33p6iyq0otupsp", oauth_token="nvoankn2g8jraga3k22ax9eyf55lqk9e", oauth_signature="Vl8tCEx%2F3abTjQFcxSfWcpzQ%2FHE%3D" Cookie: private_content_version=c6f9e0919d7028c78ee63e79593ef689; mage-messages=%5B%5D DNT: 1 Connection: keep-alive Wenn ich bei der RESTRequest die Eigenschaft 'URLAlreadyEncoded' auf 'true' setze, wird die URL nicht codiert und sieht aus wie bei Firefox. Allerdings bekomme ich dann, wie oben beschrieben, ein HTML mit '400 Bad Request' zurück. Oder übersehe ich einen Unterschied? Edit: Habe auch mal das 'Accept-Charset', was bei Delphi im Request war, entfernt. Hilft aber leider auch nicht. |
AW: REST-Zugriff auf Magento 2 (OAuth)
Habe das selbe Problem, gibt es mittlerweile eine Lösung?
Code:
Unter Linux mit "nc -v -l -p 80" ausgelesen:
OAuth1Authenticator1.ResetToDefaults;
OAuth1Authenticator1.AccessToken := 'c0dw1h3g9lo8p6brbe4wkgb4bif73vw2'; OAuth1Authenticator1.AccessTokenSecret := 'pyauiwjvayyqncwh92ywovij3xvwpwds'; OAuth1Authenticator1.ConsumerKey := 'src5215m9flp31o8rab3oy8vg5g7wgfq'; OAuth1Authenticator1.ConsumerSecret := '8r43qbog5eig2hn9v0tk40gha0n4mm4l'; RESTClient2.ResetToDefaults; RESTRequest2.ResetToDefaults; RESTClient2.Authenticator := OAuth1Authenticator1; RESTClient2.BaseURL := 'http://192.168.115.119/magento_version2'; RESTRequest2.Resource := '/rest/V1/orders'; RESTRequest2.AddParameter('searchCriteria[filter_groups][0][filters][0][field]','entity_id'); RESTRequest2.AddParameter('searchCriteria[filter_groups][0][filters][0][value]','1'); RESTRequest2.Client := RESTClient2; RESTRequest2.Response := RESTResponse2; RESTRequest2.Method := TRESTRequestMethod.rmGET; RestRequest2.AutoCreateParams := true; RESTRequest2.URLAlreadyEncoded := true; RESTRequest2.Execute;
Code:
GET /magento_version2/rest/V1/orders?searchCriteria%5Bfilter_groups%5D%5B0%5D%5Bfilters%5D%5B0%5D%5Bfield%5D=entity_id&searchCriteria%5Bfilter_groups%5D%5B0%5D%5Bfilters%5D%5B0%5D%5Bvalue%5D=1 HTTP/1.1
Connection: Keep-Alive Accept: application/json, text/plain; q=0.9, text/html;q=0.8, Accept-Charset: UTF-8, *;q=0.8 Authorization: OAuth oauth_consumer_key="src5215m9flp31o8rab3oy8vg5g7wgfq", oauth_nonce="d10e95d70ce9857c70e92687a50f7548", oauth_signature_method="HMAC-SHA1", oauth_signature="Avu45JSovrvQhQMv9MgiL%2Bf%2BccI%3D", oauth_timestamp="1514564618", oauth_token="c0dw1h3g9lo8p6brbe4wkgb4bif73vw2", oauth_version="1.0" User-Agent: Embarcadero RESTClient/1.0 Host: 192.168.115.119 Folgende URL funktioniert: "http://192.168.115.119/magento_version2/rest/V1/orders/1" Das Kodieren der Sonderzeichen lässt sich meines Wissens nach nicht abschalten, habe es bis zur WinHTTP-Klasse debuggt. Wenn jemand ein funktionierendes Beispiel hätte wäre das super. |
AW: REST-Zugriff auf Magento 2 (OAuth)
Hallo,
OAuth1Authenticator1.AccessToken := 'c0dw1h3g9lo8p6brbe4wkgb4bif73vw2'; OAuth1Authenticator1.AccessTokenSecret := 'pyauiwjvayyqncwh92ywovij3xvwpwds'; OAuth1Authenticator1.ConsumerKey := 'src5215m9flp31o8rab3oy8vg5g7wgfq'; OAuth1Authenticator1.ConsumerSecret := '8r43qbog5eig2hn9v0tk40gha0n4mm4l'; stehen die z. B. ConsumerKey im magento backend? Finde dort nichts. Tipp? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:45 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-2025 by Thomas Breitkreuz