Necesito acceder a la API de Magento desde una aplicación local basada en JavaScript (Titanium Desktop) y me pregunto cuál es la mejor manera de hacerlo.
Lo que descubrí hasta ahora:
- El único mecanismo de autenticación es OAuth, por lo que el usuario debe ingresar sus credenciales en el sitio
- Hay una biblioteca cliente de JavaScript: https://code.google.com/p/oauth/source/browse/#svn%2Fcode%2Fjavascript
- Para aplicaciones nativas como clientes OAuth, se recomienda el flujo de agente de usuario OAuth 2 .
- La URL de redireccionamiento debe apuntar a una página local desde donde se debe extraer el token o copiarlo y pegarlo
Preguntas:
- ¿Es factible intercambiar el mecanismo de autenticación por algo como la autenticación basada en HMAC con clave de aplicación y secreto? ¿Hay incluso soluciones probadas?
- Si no, ¿es posible el flujo de agente de usuario de OAuth con Magento? La documentación no lo menciona.
- ¿Es posible enviar las credenciales de usuario con AJAX (Cross-Origin-Policy no es un problema aquí) para ocultar la mayor parte del proceso de autorización del usuario? El token de acceso podría entonces extraerse directamente de la respuesta.
javascript
oauth
api
Fabian Schmengler
fuente
fuente
Respuestas:
Como se menciona en el comentario, la API SOAP es el camino a seguir.
Solución 1:
Suds funcionó para mí con una ligera modificación (Uso de en
Titanium.Network.HTTPClient
lugar deXMLHttpRequest
), pero no hace mucho más que crear un sobre SOAP para la llamada y devolver toda la respuesta XML.Implementación de prueba de concepto, utilizando jQuery diferido para el encadenamiento de solicitudes:
Ejemplo de uso:
Solución 2:
Resultó que escribir un adaptador de API propio puede ser realmente fácil. Con el ejemplo de
este truco(enlace muerto) Pude escribir un módulo limpio para un adaptador JSON-RPC basado enZend_Json_Server
. Utiliza la misma autenticación y ACL que las API SOAP y XML-RPC.Para usar el punto de entrada
/api/jsonrpc
, el nuevo controlador debe agregarse a laapi
ruta:Mi cliente JS ahora se ve así (de nuevo con JQuery. Diferido, pero no hay bibliotecas de terceros adicionales para la API):
Tenga en cuenta que todos los métodos después del inicio de sesión se enrutan
call
. Elmethod
parámetro es algo así comosales_order.list
, elargs
parámetro una matriz u objeto con los argumentos del método.Ejemplo de uso:
fuente
config.xml
(si no desea usar laapi
ruta, también puede usar una ruta personalizada, definirla como lo haría en cualquier otro módulo de Magento