Eu vou morder uma vez que fiz isso recentemente, no entanto, era um serviço da API REST, mas algo semelhante para uma solicitação SOAP é certamente possível. Então, em vez de detalhes, particularmente apenas uma visão geral do processo que tomei:
1) CRIAR UM MODELO DE RECURSOS
Primeiro, você desejará criar um novo modelo de recursos Magento; existem muitos exemplos por aí:
Aqui está um exemplo da tabela que estou criando durante a instalação dos meus módulos (obviamente, adapte-a para atender às suas necessidades / requisitos).
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;
Nota: Também debati em armazenar o XML de solicitação e resposta em um formato gzip para economizar espaço de banco de dados, e o XML compacta bem. No entanto, o adminhtml Grid do Magento precisaria de um renderizador personalizado, por isso mantive o XML armazenado como está por enquanto.
2) PEDIDO GENÉRICO DE CURVA DE DESCANSO ATRAVÉS DO PHP
Normalmente, uso uma classe, por exemplo: Rest.php com algo semelhante para chamadas de API rápidas e sem problemas via CURL no meu módulo. Acredito que as opções lib / Varien e Zendframework também possam ser consideradas, no entanto, tive grande sucesso com este pequeno trecho fácil de ler:
Eu também uso outra biblioteca separada chamada Array2XML para criar minhas POSTsolicitações para serem usadas com esse trecho de solicitação REST simples.
*@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()){
Aqui está um exemplo de uso da minha classe Rest.php: (NOTA: $restUrl, $apiKeysão expulsos de configuração).
Em seguida, agrupe seu modelo de recursos recém-criado em torno de Rest.phpchamadas para coletar dados antes e depois de um retorno da API de terceiros.
Em vez de retornar o objeto cURL, uso SimpleXMLElement ($ response) para converter a resposta das APIs em XML.
A try/ catchcom um $logModel->save();e uma Mage::logException($e);no Rest.php melhor pode ajudar a depurar quaisquer problemas com a integração. Como exceções fatais ainda serão parcialmente registradas no seu modelo de recursos, mas também aparecerão emvar/log/excpetions.log
4) GRADE HTML ADMIN
Agora, basta criar uma nova grade personalizada do Magento adminhtml para sua tabela, mantendo os dados do log.
O clique dos itens de linha Meu Grid entra em detalhes para a solicitação única com os dados XML de Resposta e Solicitação, pois exibir esse grande número de dados na Grade pode ser problemático.
NOTAS
Sempre adicione uma opção Sistema -> Configuração para ativar / desativar o logon, pois, com um grande número de solicitações na comunicação da API, a tabela pode se tornar bastante pesada e afetar o desempenho. Normalmente desabilitarei o log depois que a integração estiver funcionando adequadamente por algum tempo.
Idealmente, você poderia aproveitar o Mage_Log e simplesmente adicionar sua tabela personalizada à sua lista de tabelas a serem removidas em intervalos para mantê-la reduzida, no entanto, não tenho certeza do procedimento adequado para campos específicos de data / hora.
Você também pode considerar o uso de atributos personalizados para armazenar seus dados relacionais entre o Magento e a API de terceiros.
Esperemos que isso ajude em uma direção geral de tirar o aguilhão das integrações de terceiros. Como nem todos os requisitos são sempre os mesmos. Com isso dito, um mecanismo de registro de API generalizado pode ser benéfico.
Respostas:
Eu vou morder uma vez que fiz isso recentemente, no entanto, era um serviço da API REST, mas algo semelhante para uma solicitação SOAP é certamente possível. Então, em vez de detalhes, particularmente apenas uma visão geral do processo que tomei:
1) CRIAR UM MODELO DE RECURSOS
Primeiro, você desejará criar um novo modelo de recursos Magento; existem muitos exemplos por aí:
Aqui está um exemplo da tabela que estou criando durante a instalação dos meus módulos (obviamente, adapte-a para atender às suas necessidades / requisitos).
Nota: Também debati em armazenar o XML de solicitação e resposta em um formato gzip para economizar espaço de banco de dados, e o XML compacta bem. No entanto, o adminhtml Grid do Magento precisaria de um renderizador personalizado, por isso mantive o XML armazenado como está por enquanto.
2) PEDIDO GENÉRICO DE CURVA DE DESCANSO ATRAVÉS DO PHP
Normalmente, uso uma classe, por exemplo: Rest.php com algo semelhante para chamadas de API rápidas e sem problemas via CURL no meu módulo. Acredito que as opções lib / Varien e Zendframework também possam ser consideradas, no entanto, tive grande sucesso com este pequeno trecho fácil de ler:
Fonte: http://singletonio.blogspot.com/2009/07/simple-php-rest-client-using-curl.html
Eu também uso outra biblioteca separada chamada Array2XML para criar minhas
POST
solicitações para serem usadas com esse trecho de solicitação REST simples.Aqui está um exemplo de uso da minha classe Rest.php: (NOTA:
$restUrl
,$apiKey
são expulsos de configuração).3) ADICIONAR LOGGING A PEDIDOS / RESPOSTAS
Em seguida, agrupe seu modelo de recursos recém-criado em torno de
Rest.php
chamadas para coletar dados antes e depois de um retorno da API de terceiros.Algo assim antes
curl_exec
:...
E depois do
curl_exec
:Em vez de retornar o objeto cURL, uso SimpleXMLElement ($ response) para converter a resposta das APIs em XML.
A
try
/catch
com um$logModel->save();
e umaMage::logException($e);
no Rest.php melhor pode ajudar a depurar quaisquer problemas com a integração. Como exceções fatais ainda serão parcialmente registradas no seu modelo de recursos, mas também aparecerão emvar/log/excpetions.log
4) GRADE HTML ADMIN
Agora, basta criar uma nova grade personalizada do Magento adminhtml para sua tabela, mantendo os dados do log.
O clique dos itens de linha Meu Grid entra em detalhes para a solicitação única com os dados XML de Resposta e Solicitação, pois exibir esse grande número de dados na Grade pode ser problemático.
NOTAS
Sempre adicione uma opção Sistema -> Configuração para ativar / desativar o logon, pois, com um grande número de solicitações na comunicação da API, a tabela pode se tornar bastante pesada e afetar o desempenho. Normalmente desabilitarei o log depois que a integração estiver funcionando adequadamente por algum tempo.
Idealmente, você poderia aproveitar o Mage_Log e simplesmente adicionar sua tabela personalizada à sua lista de tabelas a serem removidas em intervalos para mantê-la reduzida, no entanto, não tenho certeza do procedimento adequado para campos específicos de data / hora.
Você também pode considerar o uso de atributos personalizados para armazenar seus dados relacionais entre o Magento e a API de terceiros.
Esperemos que isso ajude em uma direção geral de tirar o aguilhão das integrações de terceiros. Como nem todos os requisitos são sempre os mesmos. Com isso dito, um mecanismo de registro de API generalizado pode ser benéfico.
fonte