Ich muss über eine lokale JavaScript-basierte Anwendung (Titanium Desktop) auf die Magento-API zugreifen und mich fragen, wie dies am besten funktioniert.
Was ich bisher herausgefunden habe:
- Der einzige Authentifizierungsmechanismus ist OAuth, daher muss der Benutzer seine Anmeldeinformationen vor Ort eingeben
- Es gibt eine JavaScript-Clientbibliothek: https://code.google.com/p/oauth/source/browse/#svn%2Fcode%2Fjavascript
- Für native Apps als OAuth-Clients wird der OAuth 2 User Agent Flow empfohlen.
- Die Weiterleitungs-URL muss auf eine lokale Seite verweisen, von der das Token extrahiert oder kopiert und eingefügt werden muss
Fragen:
- Ist es möglich, den Authentifizierungsmechanismus gegen eine HMAC-basierte Authentifizierung mit Anwendungsschlüssel und Geheimnis auszutauschen? Gibt es überhaupt bewährte Lösungen?
- Wenn nicht, ist der OAuth User Agent Flow mit Magento möglich? Die Dokumentation erwähnt es nicht.
- Ist es möglich, die Benutzeranmeldeinformationen mit AJAX zu übermitteln (Cross-Origin-Policy ist hier kein Problem), um den größten Teil des Autorisierungsprozesses vor dem Benutzer zu verbergen? Das Zugriffstoken könnte dann möglicherweise direkt aus der Antwort extrahiert werden.
javascript
oauth
api
Fabian Schmengler
quelle
quelle
Antworten:
Wie im Kommentar erwähnt, ist die SOAP-API der richtige Weg.
Lösung 1:
Suds hat bei mir mit geringfügigen Änderungen (Verwendung von
Titanium.Network.HTTPClient
stattXMLHttpRequest
) funktioniert, aber es ist nicht viel mehr als das Erstellen eines SOAP-Umschlags für den Anruf und das Zurückgeben der gesamten XML-Antwort.Proof-of-Concept-Implementierung mit jQuery Deferred für die Verkettung von Anforderungen:
Anwendungsbeispiel:
Lösung 2:
Es stellte sich heraus, dass das Schreiben eines eigenen API-Adapters sehr einfach sein kann. Am Beispiel von
dieser Core-Hack(toter Link) Ich konnte ein sauberes Modul für einen JSON-RPC-Adapter basierend auf schreibenZend_Json_Server
. Es verwendet dieselbe Authentifizierung und ACL wie die SOAP- und XML-RPC-APIs.Um den Einstiegspunkt zu verwenden
/api/jsonrpc
, muss derapi
Route der neue Controller hinzugefügt werden :Mein JS-Client sieht jetzt so aus (wieder mit JQuery.Deferred, aber keine zusätzlichen Bibliotheken von Drittanbietern für die API):
Beachten Sie, dass alle Methoden nach der Anmeldung weitergeleitet werden
call
. Dermethod
Parameter ist so etwas wiesales_order.list
derargs
Parameter ein Array oder Objekt mit den Methodenargumenten.Anwendungsbeispiel:
quelle
config.xml
(wenn Sie dieapi
Route nicht verwenden möchten , können Sie stattdessen auch eine benutzerdefinierte Route verwenden und diese wie in jedem anderen Magento-Modul definieren