2011-07-14 10 views
8

Estoy buscando un ejemplo de funcionamiento de un módulo habilitado para Magento API. ¿Cómo puedo definirlo, escribir el código para él y llamarlo?Ejemplo de API de Magento

+2

Tal como se utiliza aquí, "API" no está claro. ¿JABÓN? RPC? ¿Llamadas nativas Magento PHP? Sea más específico y alguien ayudará. –

+0

Solo se necesita XML para definir un módulo conectado a la API. –

Respuesta

29

Una configuración de trabajo (en app/código/local/ModuleName/etc/escribí minas en api.xml.):

<?xml version="1.0" encoding="UTF-8"?> 
<config> 
    <modules> 
     <ModuleName> 
      <version>0.1.0</version> 
     </ModuleName> 
    </modules> 
    <api> 
     <resources> 
      <customer translate="title" module="xyz"> 
       <model>ModuleName_Model_Api</model> 
       <title>Customer Resource</title> 
       <acl>customer</acl> 
       <methods> 
        <info translate="title" module="xyz"> 
         <title>Retrieve customer data</title> 
         <acl>customer/info</acl> 
         <method>info</method> 
        </info> 
       </methods> 
       <faults module="xyz">     
       </faults> 
      </customer> 
     </resources> 
     <acl> 
      <resources> 
       <customer translate="title" module="xyz"> 
        <title>Customers</title> 
        <info translate="title" module="xyz"> 
         <title>Get Info Test</title> 
        </info> 
       </customer> 
       <all> 
       </all> 
      </resources> 
     </acl> 
    </api> 
</config> 

El código PHP (en app/código// ModuleName/Modelo locales /Api.php):

class ModuleName_Model_Api extends Mage_Api_Model_Resource_Abstract 
{ 
    function info() 
    { 
     return 'xxx'; 
    } 
} 

el código PHP para realmente llamar a la interfaz SOAP:

$mageUrl = 'http:/local.magecomm/api/?wsdl'; 
$mageUser = 'soaptest'; 
$mageApiKey = 'apitest'; 

$soap = new SoapClient($mageUrl); 

$sessionID = $soap->login($mageUser, $mageApiKey); 

var_dump($soap->call($sessionID, 'customer.info', array())); 

el resultado de la ejecución de dicho guión:

C:/Temp>php magesoap.php 
string(3) "xxx" 

Algunas notas:

o de error: "api ruta no válida"

  • Esto significa que Magento no puede encontrar el módulo.

o Error: "La ruta del recurso no se puede llamar".

  • Esto significa que Magento no puede llamar al método en el módulo.

  • Puede usar el archivo system.log para depurar esto. Mostrará uno o más errores sobre cómo no pudo cargar automáticamente la clase solicitada desde la ruta de archivo calculada.

    2011-04-13T15:15:24+00:00 DEBUG (7): include(Mage/Customer/Model/Api.php) [function.include]: failed to open stream: No such file or directoryC:/Development/Projects/MagentoCommercial/lib/Varien/Autoload.php

    2011-04-13T15:15:24+00:00 DEBUG (7): include() [function.include]: Failed opening 'Mage/Customer/Model/Api.php' for inclusion (include_path='C:/Development/Projects/MagentoCommercial/app/code/local;C:/Development/Projects/MagentoCommercial/app/code/community;C:/Development/Projects/MagentoCommercial/app/code/core;C:/Development/Projects/MagentoCommercial/lib;.;C:/Development/Libraries;C:/Development/Libraries/Standard/_Pear')C:/Development/Projects/MagentoCommercial/lib/Varien/Autoload.php

o El módulo XML-config anterior enlazará esta interfaz SOAP a un nuevo elemento en los permisos de API llamados "Obtener información de prueba" en el grupo "Los clientes". Luego estará disponible para permitir o denegar en usuarios/roles específicos de API.

o El valor en/config/api/resources/customer/methods/info en el XML de module-config es el nombre del método interno del método que debe vincularse con el nombre-recurso SOAP. Si son iguales, entonces puedes omitir esto.

o El valor en/config/api/resources/customer (que es 'ModuleName_Model_Api') es el nombre completo de la clase porque obviamente se refiere a mi clase, que no forma parte de Mage. Si intentas llamar a una clase existente dentro de Mage, puedes usar la notación abreviada (xxx/yyy, xxx/yyy_zzz, etc.).

o Solo en la parte ACL de la configuración de módulo que el valor de los atributos de "módulo" (< ... module = "">) ​​parece importar. De todos modos, asegúrese de que esté configurado correctamente (caso no importa) en todas partes. Es posible que aún no lo hayan implementado en la corriente principal, y que ignorarlo solo le causará problemas más adelante.

Dustin Oprea

+0

¡Tu sección de notas me ayudó mucho! ¡Ojalá pudiera votarte más! – Jpepper

+0

¡Muy útil! ¡¡Gracias!! – Becky

+0

Si alguien está obteniendo la Ruta del recurso no se puede llamar. Puede haber conflictos de módulos anulando los mismos archivos. – Muk

Cuestiones relacionadas