Я укушу, так как я только недавно сделал это, однако это была служба REST API, но что-то подобное для SOAP-запроса, безусловно, возможно. Таким образом, вместо деталей, в частности, просто обзор процесса, который я взял:
1) СОЗДАТЬ МОДЕЛЬ РЕСУРСА
Сначала вы захотите создать новую модель ресурсов Magento, для этого есть множество примеров:
Вот пример таблицы, которую я создаю во время установки моих модулей (очевидно, адаптируйте ее под свои нужды / требования).
CREATE TABLE IF NOT EXISTS mynamespace_mymodulename_logs (`id`int(11)unsigned NOT NULL AUTO_INCREMENT,`timestamp` datetime NOT NULL,`requestUrl` varchar(255) DEFAULT NULL,`method` varchar(10) DEFAULT NULL,`returnHttpCode` varchar(10) DEFAULT NULL,`returnError` TEXT NOT NULL,`requestXML` TEXT NOT NULL,`responseXML` TEXT NOT NULL,
PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Примечание: я также обсуждал вопрос о сохранении XML-кода запроса и ответа в формате gzip для экономии места в БД, и XML хорошо сжимается. Однако в админке Grid Magento потребовался пользовательский рендерер, поэтому я сохранил XML как есть.
2) ОБЩИЕ ЗАПРОСЫ ОТ ОТДЫХА ОТ PHP
Например, я обычно использую один отдельный класс: Rest.php с чем-то похожим для быстрых и безболезненных вызовов API через CURL в моем модуле. Я полагаю, что варианты lib / Varien и Zendframework также могут быть чем-то, что нужно учитывать, однако я добился большого успеха с этим небольшим легко читаемым фрагментом:
Я также использую другую отдельную библиотеку под названием Array2XML для построения моих POSTзапросов, которые будут использоваться с этим простым фрагментом REST-запроса.
*@param type $method*@param type $data*@param type $url*@param type $header*@param type $topNode*@returnboolean|xml*/publicfunctionRESTRequest($method, $url, $header, $data = array(), $topNode = array()){
Вот пример использования моего класса Rest.php: (Примечание: $restUrl, $apiKeyприводятся в движение от конфигурации).
Вместо того, чтобы просто возвращать объект cURL, я использую SimpleXMLElement ($ response) для преобразования ответа API в XML.
A try/ catchwith $logModel->save();и a Mage::logException($e);в Rest.php могут лучше помочь отладить любые проблемы с интеграцией. Поскольку фатальные исключения все еще будут частично зарегистрированы в вашей модели ресурсов, но также появятся вvar/log/excpetions.log
4) СДЕЛАЙТЕ СЕТЬ HTML
Теперь просто создайте новую таблицу Magento adminhtml Grid для вашей таблицы, содержащей данные журнала.
Мой щелчок по позициям в моей таблице подробно описывает один запрос с данными XML ответа и запроса, так как отображение такого большого количества данных в таблице может быть проблематичным.
НОТЫ
Всегда добавляйте опцию Система -> Конфигурация, чтобы включить или выключить регистрацию, так как при большом количестве запросов, проходящих через связь API, таблица может стать довольно тяжелой и повлиять на производительность. Обычно я отключаю ведение журнала после того, как интеграция будет работать должным образом некоторое время.
В идеале вы могли бы использовать Mage_Log и просто добавить свою пользовательскую таблицу в список таблиц, которые следует сокращать через определенные промежутки времени, чтобы сохранить ее стройность, однако я не уверен в правильности соответствующей процедуры, например, для определенных полей даты / времени.
Вы также можете рассмотреть возможность использования пользовательских атрибутов для хранения ваших реляционных данных между Magento и Сторонним API.
Надеюсь, это поможет в общем направлении избавиться от сторонних интеграций. Поскольку не все требования всегда одинаковы. С учетом сказанного, однако, может быть полезен обобщенный механизм регистрации API.
Ответы:
Я укушу, так как я только недавно сделал это, однако это была служба REST API, но что-то подобное для SOAP-запроса, безусловно, возможно. Таким образом, вместо деталей, в частности, просто обзор процесса, который я взял:
1) СОЗДАТЬ МОДЕЛЬ РЕСУРСА
Сначала вы захотите создать новую модель ресурсов Magento, для этого есть множество примеров:
Вот пример таблицы, которую я создаю во время установки моих модулей (очевидно, адаптируйте ее под свои нужды / требования).
Примечание: я также обсуждал вопрос о сохранении XML-кода запроса и ответа в формате gzip для экономии места в БД, и XML хорошо сжимается. Однако в админке Grid Magento потребовался пользовательский рендерер, поэтому я сохранил XML как есть.
2) ОБЩИЕ ЗАПРОСЫ ОТ ОТДЫХА ОТ PHP
Например, я обычно использую один отдельный класс: Rest.php с чем-то похожим для быстрых и безболезненных вызовов API через CURL в моем модуле. Я полагаю, что варианты lib / Varien и Zendframework также могут быть чем-то, что нужно учитывать, однако я добился большого успеха с этим небольшим легко читаемым фрагментом:
Источник: http://singletonio.blogspot.com/2009/07/simple-php-rest-client-using-curl.html
Я также использую другую отдельную библиотеку под названием Array2XML для построения моих
POST
запросов, которые будут использоваться с этим простым фрагментом REST-запроса.Вот пример использования моего класса Rest.php: (Примечание:
$restUrl
,$apiKey
приводятся в движение от конфигурации).3) ДОБАВИТЬ ВХОД В ЗАПРОСЫ / ОТВЕТЫ
Затем оберните свою вновь созданную модель ресурсов вокруг
Rest.php
вызовов для сбора данных до и после возврата из стороннего API.Примерно так раньше
curl_exec
:...
И после
curl_exec
того, как :Вместо того, чтобы просто возвращать объект cURL, я использую SimpleXMLElement ($ response) для преобразования ответа API в XML.
A
try
/catch
with$logModel->save();
и aMage::logException($e);
в Rest.php могут лучше помочь отладить любые проблемы с интеграцией. Поскольку фатальные исключения все еще будут частично зарегистрированы в вашей модели ресурсов, но также появятся вvar/log/excpetions.log
4) СДЕЛАЙТЕ СЕТЬ HTML
Теперь просто создайте новую таблицу Magento adminhtml Grid для вашей таблицы, содержащей данные журнала.
Мой щелчок по позициям в моей таблице подробно описывает один запрос с данными XML ответа и запроса, так как отображение такого большого количества данных в таблице может быть проблематичным.
НОТЫ
Всегда добавляйте опцию Система -> Конфигурация, чтобы включить или выключить регистрацию, так как при большом количестве запросов, проходящих через связь API, таблица может стать довольно тяжелой и повлиять на производительность. Обычно я отключаю ведение журнала после того, как интеграция будет работать должным образом некоторое время.
В идеале вы могли бы использовать Mage_Log и просто добавить свою пользовательскую таблицу в список таблиц, которые следует сокращать через определенные промежутки времени, чтобы сохранить ее стройность, однако я не уверен в правильности соответствующей процедуры, например, для определенных полей даты / времени.
Вы также можете рассмотреть возможность использования пользовательских атрибутов для хранения ваших реляционных данных между Magento и Сторонним API.
Надеюсь, это поможет в общем направлении избавиться от сторонних интеграций. Поскольку не все требования всегда одинаковы. С учетом сказанного, однако, может быть полезен обобщенный механизм регистрации API.
источник