Je dois accéder à l'API Magento à partir d'une application locale basée sur JavaScript (Titanium Desktop) et je me demande quelle est la meilleure façon de le faire.
Ce que j'ai découvert jusqu'à présent:
- Le seul mécanisme d'authentification est OAuth, donc l'utilisateur doit entrer ses informations d'identification sur le site
- Il existe une bibliothèque client JavaScript: https://code.google.com/p/oauth/source/browse/#svn%2Fcode%2Fjavascript
- Pour les applications natives en tant que clients OAuth, le flux d'agent utilisateur OAuth 2 est recommandé.
- L'URL de redirection doit pointer vers une page locale d'où le jeton doit être extrait ou copié et collé
Des questions:
- Est-il possible d'échanger le mécanisme d'authentification vers quelque chose comme l'authentification basée sur HMAC avec la clé d'application et le secret? Existe-t-il même des solutions éprouvées?
- Sinon, le flux d'agent utilisateur OAuth est-il possible avec Magento? La documentation ne le mentionne pas.
- Est-il possible de soumettre les informations d'identification de l'utilisateur avec AJAX (Cross-Origin-Policy n'est pas un problème ici) pour masquer la plupart du processus d'autorisation à l'utilisateur? Le jeton d'accès pourrait alors éventuellement être extrait directement de la réponse.
javascript
oauth
api
Fabian Schmengler
la source
la source
Réponses:
Comme mentionné dans le commentaire, l'API SOAP est la voie à suivre.
Solution 1:
Suds a fonctionné pour moi avec une légère modification (utilisation de
Titanium.Network.HTTPClient
au lieu deXMLHttpRequest
), mais cela ne fait pas beaucoup plus que de créer une enveloppe SOAP pour l'appel et de renvoyer la réponse XML entière.Implémentation de la preuve de concept, utilisant jQuery Deferred pour le chaînage des demandes:
Exemple d'utilisation:
Solution 2:
Il s'est avéré que l'écriture d'un propre adaptateur API peut être très facile. Avec l'exemple de
ce core-hack(lien mort) J'ai pu écrire un module propre pour un adaptateur JSON-RPC basé surZend_Json_Server
. Il utilise la même authentification et ACL que les API SOAP et XML-RPC.Pour utiliser le point d'entrée
/api/jsonrpc
, le nouveau contrôleur doit être ajouté à l'api
itinéraire:Mon client JS ressemble maintenant à ceci (encore une fois avec JQuery.Deferred, mais pas de bibliothèques tierces supplémentaires pour l'API):
Notez que toutes les méthodes après la connexion sont acheminées
call
. Lemethod
paramètre est quelque chose commesales_order.list
, leargs
paramètre un tableau ou un objet avec les arguments de la méthode.Exemple d'utilisation:
la source
config.xml
(si vous ne voulez pas utiliser l'api
itinéraire, vous pouvez également utiliser un itinéraire personnalisé à la place, définissez-le comme vous le feriez dans n'importe quel autre module Magento