2011-07-14 12 views
8

Szukam działającego przykładu modułu obsługującego interfejs API Magento. Jak mogę to zdefiniować, napisać kod i zadzwonić?Przykład interfejsu API Magento

+2

Używane tutaj "API" jest niejasne. MYDŁO? RPC? Natywne wywołania PHP w języku Magento? Bądź bardziej konkretny, a ktoś ci pomoże. –

+0

Do zdefiniowania modułu połączonego z interfejsem API potrzebny jest tylko kod XML. –

Odpowiedz

29

config robocze (w app/code/local/ModuleName/etc/Pisałem kopalni w 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> 

kodu PHP (w app/code/local/ModuleName/model /Api.php):

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

kod PHP do faktycznie wywołać interfejs 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())); 

wynikiem działania wspomnianego skryptu:

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

Kilka uwag:

O błędzie: "Nieprawidłowa ścieżka API"

  • Oznacza to, że Magento nie może znaleźć modułu.

o Błąd: "Ścieżka zasobu nie jest wywoływalna".

  • Oznacza to, że Magento nie może wywołać metody w module.

  • Możesz użyć pliku system.log do debugowania tego. Wyświetli jeden lub więcej błędów o tym, w jaki sposób nie mógł automatycznie ładować żądanej klasy z obliczonej ścieżki pliku.

    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 moduł XML-config powyżej powiąże ten interfejs SOAP do nowej pozycji w uprawnieniach API o nazwie "Get Info Test" w grupie "Klienci". Będzie wtedy dostępna dla lub dla określonych użytkowników/ról interfejsu API.

o Wartość poniżej/config/api/resources/customer/methods/info w module-config XML jest wewnętrzną nazwą metody, która powinna być związana z nazwą zasobu SOAP. Jeśli są takie same, możesz to pominąć.

o Wartość poniżej/config/api/resources/customer (która jest "ModuleName_Model_Api") jest tutaj pełną nazwą klasy, ponieważ oczywiście odnosi się do mojej klasy, która nie jest częścią Mag. Jeśli próbujesz wywołać istniejącą klasę w Mag, możesz po prostu użyć skróconej notacji (xxx/yyy, xxx/yyy_zzz, etc.).

o Tylko w części ACL modułu-config wydaje się, że wartość atrybutów "module" (< ... module = "">) ​​ma znaczenie. Mimo wszystko, upewnij się, że jest ustawiony prawidłowo (sprawa nie ma znaczenia) wszędzie. Możliwe, że po prostu nie zaimplementowali go w głównym nurcie, a ignorowanie go spowoduje później problemy.

Dustin Oprea

+0

Twoja sekcja notatek bardzo mi pomogła! Chciałbym móc cię bardziej głosować! – Jpepper

+0

Bardzo pomocny! Dziękuję Ci!! – Becky

+0

Jeśli ktoś otrzymuje ścieżkę zasobu, nie można jej wywołać. Mogą występować konflikty modułów nadpisujące te same pliki. – Muk

Powiązane problemy