Мне нужно получить доступ к Magento API из локального приложения на основе JavaScript (Titanium Desktop) и подумать, как лучше всего это сделать.
Что я узнал до сих пор:
- Единственный механизм аутентификации - OAuth, поэтому пользователь должен ввести свои учетные данные на сайте.
- Существует клиентская библиотека JavaScript: https://code.google.com/p/oauth/source/browse/#svn%2Fcode%2Fjavascript
- Для собственных приложений в качестве клиентов OAuth рекомендуется поток пользовательских агентов OAuth 2 .
- URL перенаправления должен указывать на локальную страницу, откуда токен должен быть извлечен или скопирован и вставлен
Вопросов:
- Можно ли заменить механизм аутентификации на что-то вроде аутентификации на основе HMAC с ключом приложения и секретом? Есть ли даже проверенные решения?
- Если нет, возможен ли поток агента пользователя OAuth с Magento? В документации это не упоминается.
- Можно ли отправить учетные данные пользователя с помощью AJAX (Cross-Origin-Policy здесь не проблема), чтобы скрыть большую часть процесса авторизации от пользователя? Токен доступа может быть затем извлечен непосредственно из ответа.
javascript
oauth
api
Фабиан Шменглер
источник
источник
Ответы:
Как упоминалось в комментарии, SOAP API - это путь.
Решение 1:
Suds работал для меня с небольшой модификацией (использование
Titanium.Network.HTTPClient
вместоXMLHttpRequest
), но это не намного больше, чем создание SOAP-конверта для вызова и возврат всего XML-ответа.Реализация концепции, используя jQuery Deferred для цепочки запросов:
Пример использования:
Решение 2:
Оказалось, что написание собственного API-адаптера может быть очень простым. С примером
это ядро взломать(неработающая ссылка) Мне удалось написать чистый модуль для адаптера JSON-RPC на основеZend_Json_Server
. Он использует ту же аутентификацию и ACL, что и API-интерфейсы SOAP и XML-RPC.Чтобы использовать точку входа
/api/jsonrpc
, новый контроллер должен быть добавлен кapi
маршруту:Мой JS-клиент теперь выглядит следующим образом (снова с JQuery.Deferred, но без дополнительных сторонних библиотек для API):
Обратите внимание, что все методы после входа в систему проходят через
call
.method
Параметр является то , какsales_order.list
, вargs
параметре массив или объект с аргументами метода.Пример использования:
источник
config.xml
(если вы не хотите использоватьapi
маршрут, вы также можете использовать собственный маршрут вместо него, определите его, как в любом другом модуле Magento