Je vais mordre depuis que je l'ai fait récemment, c'était un service d'API REST cependant, mais quelque chose de similaire pour une demande SOAP est sûrement possible. Donc, au lieu de détails, en particulier juste un aperçu du processus que j'ai suivi:
1) CRÉER UN MODÈLE DE RESSOURCES
Tout d'abord, vous voudrez créer un nouveau modèle de ressource Magento, il existe de nombreux exemples pour:
Voici un exemple du tableau que je crée lors de l'installation de mes modules (évidemment, adaptez-le à vos besoins / exigences).
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;
Remarque: J'ai également débattu du stockage du XML de demande et de réponse dans un format gzip pour conserver l'espace db, et XML se comprime bien. Cependant, la grille adminhtml de Magento aurait besoin d'un moteur de rendu personnalisé, donc j'ai gardé le XML stocké tel quel pour l'instant.
2) DEMANDE DE CURL DE REPOS GÉNÉRIQUE VIA PHP
J'utilise généralement une seule classe, par exemple: Rest.php avec quelque chose de similaire pour les appels d'API rapides et indolores via CURL dans mon module. Je pense que les options lib / Varien et Zendframework peuvent également être prises en compte, mais j'ai eu beaucoup de succès avec ce petit extrait facile à lire:
J'utilise également une autre bibliothèque distincte appelée Array2XML pour créer mes POSTdemandes à utiliser avec ce simple extrait de demande 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()){
Voici un exemple d'utilisation de ma classe Rest.php: (NOTE: $restUrl, $apiKeysont entraînés de configuration).
Enveloppez ensuite votre modèle de ressource nouvellement créé autour des Rest.phpappels pour collecter des données avant et après un retour de l'API tierce.
Au lieu de simplement renvoyer l'objet cURL, j'utilise SimpleXMLElement ($ response) pour convertir la réponse des API en XML.
Un try/ catchavec un $logModel->save();et un Mage::logException($e);dans le Rest.php peut mieux aider à déboguer tout problème avec l'intégration. Étant donné que les exceptions fatales seront toujours partiellement enregistrées dans votre modèle de ressource, mais apparaissent également dansvar/log/excpetions.log
4) ADMIN HTML GRID
Créez maintenant simplement une nouvelle grille adminhtml Magento personnalisée dans votre table contenant les données du journal.
Mon clic sur les éléments de ligne de la grille va dans le détail pour la demande unique avec les données XML de réponse et de demande, car l'affichage de ce grand nombre de données sur la grille peut être problématique.
REMARQUES
Ajoutez toujours une option Système -> Configuration pour activer / désactiver la journalisation car avec un grand nombre de requêtes passant par la communication API, la table peut devenir assez lourde et affecter les performances. Je désactiverai normalement la journalisation une fois que l'intégration aura fonctionné correctement pendant un certain temps.
Idéalement, vous pouvez tirer parti de Mage_Log et simplement ajouter votre table personnalisée à sa liste de tables à élaguer à intervalles pour la garder mince, mais je ne suis pas sûr de la procédure appropriée pour des champs de date / heure spécifiques, par exemple.
Vous pouvez également envisager d'utiliser des attributs personnalisés pour stocker vos données relationnelles entre Magento et l'API tierce.
Espérons que cela aide dans une direction générale à éliminer les piqûres des intégrations tierces. Comme toutes les exigences ne sont jamais les mêmes. Cela dit, cependant, un mécanisme de journalisation API généralisé peut être bénéfique.
Réponses:
Je vais mordre depuis que je l'ai fait récemment, c'était un service d'API REST cependant, mais quelque chose de similaire pour une demande SOAP est sûrement possible. Donc, au lieu de détails, en particulier juste un aperçu du processus que j'ai suivi:
1) CRÉER UN MODÈLE DE RESSOURCES
Tout d'abord, vous voudrez créer un nouveau modèle de ressource Magento, il existe de nombreux exemples pour:
Voici un exemple du tableau que je crée lors de l'installation de mes modules (évidemment, adaptez-le à vos besoins / exigences).
Remarque: J'ai également débattu du stockage du XML de demande et de réponse dans un format gzip pour conserver l'espace db, et XML se comprime bien. Cependant, la grille adminhtml de Magento aurait besoin d'un moteur de rendu personnalisé, donc j'ai gardé le XML stocké tel quel pour l'instant.
2) DEMANDE DE CURL DE REPOS GÉNÉRIQUE VIA PHP
J'utilise généralement une seule classe, par exemple: Rest.php avec quelque chose de similaire pour les appels d'API rapides et indolores via CURL dans mon module. Je pense que les options lib / Varien et Zendframework peuvent également être prises en compte, mais j'ai eu beaucoup de succès avec ce petit extrait facile à lire:
Source: http://singletonio.blogspot.com/2009/07/simple-php-rest-client-using-curl.html
J'utilise également une autre bibliothèque distincte appelée Array2XML pour créer mes
POST
demandes à utiliser avec ce simple extrait de demande REST.Voici un exemple d'utilisation de ma classe Rest.php: (NOTE:
$restUrl
,$apiKey
sont entraînés de configuration).3) AJOUTER LA CONNEXION AUX DEMANDES / RÉPONSES
Enveloppez ensuite votre modèle de ressource nouvellement créé autour des
Rest.php
appels pour collecter des données avant et après un retour de l'API tierce.Quelque chose comme ça avant
curl_exec
:...
Et après le
curl_exec
:Au lieu de simplement renvoyer l'objet cURL, j'utilise SimpleXMLElement ($ response) pour convertir la réponse des API en XML.
Un
try
/catch
avec un$logModel->save();
et unMage::logException($e);
dans le Rest.php peut mieux aider à déboguer tout problème avec l'intégration. Étant donné que les exceptions fatales seront toujours partiellement enregistrées dans votre modèle de ressource, mais apparaissent également dansvar/log/excpetions.log
4) ADMIN HTML GRID
Créez maintenant simplement une nouvelle grille adminhtml Magento personnalisée dans votre table contenant les données du journal.
Mon clic sur les éléments de ligne de la grille va dans le détail pour la demande unique avec les données XML de réponse et de demande, car l'affichage de ce grand nombre de données sur la grille peut être problématique.
REMARQUES
Ajoutez toujours une option Système -> Configuration pour activer / désactiver la journalisation car avec un grand nombre de requêtes passant par la communication API, la table peut devenir assez lourde et affecter les performances. Je désactiverai normalement la journalisation une fois que l'intégration aura fonctionné correctement pendant un certain temps.
Idéalement, vous pouvez tirer parti de Mage_Log et simplement ajouter votre table personnalisée à sa liste de tables à élaguer à intervalles pour la garder mince, mais je ne suis pas sûr de la procédure appropriée pour des champs de date / heure spécifiques, par exemple.
Vous pouvez également envisager d'utiliser des attributs personnalisés pour stocker vos données relationnelles entre Magento et l'API tierce.
Espérons que cela aide dans une direction générale à éliminer les piqûres des intégrations tierces. Comme toutes les exigences ne sont jamais les mêmes. Cela dit, cependant, un mécanisme de journalisation API généralisé peut être bénéfique.
la source