Preciso acessar a API Magento a partir de um aplicativo local baseado em JavaScript (Titanium Desktop) e me perguntar qual é a melhor maneira de fazer isso.
O que eu descobri até agora:
- O único mecanismo de autenticação é o OAuth, portanto, o usuário precisa inserir suas credenciais no site
- Existe uma biblioteca cliente JavaScript: https://code.google.com/p/oauth/source/browse/#svn%2Fcode%2Fjavascript
- Para aplicativos nativos como clientes OAuth, o Fluxo do agente do usuário OAuth 2 é recomendado.
- O URL de redirecionamento deve apontar para uma página local de onde o token deve ser extraído ou copiado e colado
Questões:
- É possível trocar o mecanismo de autenticação por algo como autenticação baseada em HMAC com chave e segredo do aplicativo? Existem soluções comprovadas?
- Caso contrário, o Fluxo do agente do usuário OAuth é possível com o Magento? A documentação não menciona.
- É possível enviar as credenciais do usuário com AJAX (política de origem cruzada não é um problema aqui) para ocultar a maior parte do processo de autorização do usuário? O token de acesso pode então ser extraído diretamente da resposta.
javascript
oauth
api
Fabian Schmengler
fonte
fonte
Respostas:
Conforme mencionado no comentário, a API SOAP é o caminho a percorrer.
Solução 1:
O Suds trabalhou para mim com pequenas modificações (uso em
Titanium.Network.HTTPClient
vez deXMLHttpRequest
), mas não é muito mais do que criar um envelope SOAP para a chamada e retornar toda a resposta XML.Implementação de prova de conceito, usando o jQuery adiado para encadeamento de solicitações:
Exemplo de uso:
Solução 2:
Aconteceu que escrever um próprio adaptador de API pode ser realmente fácil. Com o exemplo de
esse core-hack(link morto) Consegui escrever um módulo limpo para um adaptador JSON-RPC baseado emZend_Json_Server
. Ele usa a mesma autenticação e ACL que as APIs SOAP e XML-RPC.Para usar o ponto de entrada
/api/jsonrpc
, o novo controlador deve ser adicionado àapi
rota:Meu cliente JS agora se parece com isso (novamente com JQuery.Deferred, mas sem bibliotecas de terceiros adicionais para a API):
Observe que todos os métodos após o login são roteados
call
. Omethod
parâmetro é algo comosales_order.list
, oargs
parâmetro uma matriz ou objeto com os argumentos do método.Exemplo de uso:
fonte
config.xml
(se não quiser usar aapi
rota, também poderá usar uma rota personalizada, defini-la como faria em qualquer outro módulo Magento