Muszę uzyskać dostęp do interfejsu API Magento z lokalnej aplikacji JavaScript (Titanium Desktop) i zastanawiać się, jaki jest najlepszy sposób.
Co do tej pory się dowiedziałem:
- Jedynym mechanizmem uwierzytelniania jest OAuth, więc użytkownik musi wprowadzić swoje poświadczenia na stronie
- Istnieje biblioteka klienta JavaScript: https://code.google.com/p/oauth/source/browse/#svn%2Fcode%2Fjavascript
- W przypadku aplikacji natywnych jako klientów OAuth zalecany jest przepływ agenta użytkownika OAuth 2 .
- Adres URL przekierowania musi wskazywać na stronę lokalną, z której token musi zostać wyodrębniony lub skopiowany i wklejony
Pytania:
- Czy można wymienić mechanizm uwierzytelniania na uwierzytelnianie oparte na HMAC z kluczem aplikacji i kluczem tajnym? Czy są nawet sprawdzone rozwiązania?
- Jeśli nie, to czy Magento umożliwia przepływ użytkownika agenta OAuth? Dokumentacja nie wspomina o tym.
- Czy możliwe jest przesłanie poświadczeń użytkownika za pomocą AJAX (zasada krzyżowania pochodzenia nie jest tutaj problemem), aby ukryć większość procesu autoryzacji przed użytkownikiem? Token dostępu można wtedy ewentualnie pobrać bezpośrednio z odpowiedzi.
javascript
oauth
api
Fabian Schmengler
źródło
źródło
Odpowiedzi:
Jak wspomniano w komentarzu, SOAP API jest właściwą drogą.
Rozwiązanie 1:
Suds zadziałał dla mnie z niewielką modyfikacją (użycie
Titanium.Network.HTTPClient
zamiastXMLHttpRequest
), ale to niewiele więcej niż utworzenie koperty SOAP dla wywołania i zwrócenie całej odpowiedzi XML.Implementacja Proof-of-Concept przy użyciu jQuery Deferred do łączenia żądań:
Przykład użycia:
Rozwiązanie 2:
Okazało się, że napisanie własnego adaptera API może być naprawdę łatwe. Na przykładzie
ten hack rdzenia(martwy link) Byłem w stanie napisać czysty moduł dla adaptera JSON-RPC na podstawieZend_Json_Server
. Wykorzystuje to samo uwierzytelnianie i listę ACL, co interfejsy API SOAP i XML-RPC.Aby użyć punktu wejścia
/api/jsonrpc
, doapi
trasy należy dodać nowy kontroler :Mój klient JS wygląda teraz tak (ponownie z JQuery.Deferred, ale bez dodatkowych bibliotek zewnętrznych dla interfejsu API):
Pamiętaj, że wszystkie metody po zalogowaniu są kierowane
call
.method
Parametr jest czymśsales_order.list
, zargs
parametrem tablicy lub obiektu z argumentów metod.Przykład użycia:
źródło
config.xml
(jeśli nie chcesz używaćapi
trasy, możesz również użyć trasy niestandardowej, zdefiniuj ją tak, jak w każdym innym module Magento