Połączenie z Magento przez SOAP, tutorial cz. 1: Wprowadzenie

Magento oferuje innym aplikacjom zdalne połączenie się ze sobą za pośrednictwem specjalnie do tych celów napisanego Zdalnego API. Oparte jest ono na technologiach SOAP oraz XML-RPC. Umożliwia to integrację Marento z zewnętrznymi systemami typu CRM, ERP i innymi. Niniejszy odcinek kursu dotyczącego łączenia z Magento za pośednictwem SOAP jest pierwszym z cyklu skłądającego się 4 części.

Wprowadzenie

SOAP jest opartym na XMLu protokołem, który umożliwia aplikacjom przesyłanie wiadomości przez internet w ustandaryzowany sposób. Komunikacja przez SOAP sprowadza się do klienta SOAP i serwera SOAP. Magento oferuje właśnie serwer SOAP, który umożliwia komunikację z Magento na takim poziomie, aby umożliwić integrację z Magento innym, zewnętrznym aplikacjom.

Zaletą stosowania SOAP (lub jego konkurenta XML-RPC) jest to, iż komunikacja odbywa się poprzez protokół HTTP, więc nie trzeba się martwić o firewall. Dodatkowo, jest wiele klientów SOAP oraz XML-RPC dostępnych w internecie, których obsługa jest na tyle prosta, że nie trzeba w ogóle wiedzieć, jak tak na prawdę wygląda komunikacja poprzez SOAP. Jedyną rzeczą, którą trzeba wiedzieć jest poprawne wywoływanie metod API serwera oraz poprawna obsługa zwracanych przez nie wyników.

Niniejszy tutorial pokaże jak napisać klienta SOAP oraz jak użyć informacji zwróconych przez Magento.

Wymagania po stronie serwera

Aby SOAP działało poprawnie wewnątrz Magento, należy zainstalować na serwerze rozszerzenie PHP SOAP („soap.so”). W przypadku dystrybucji Linuxa opartych o RPM, rozszerzene to można zainstalować jedną komendą.

1
yum -y install php-soap

Należy przy tym pamiętać, że rozszerzenie PHP SOAP nie jest tym zamym co PEAR SOAP. Aby sprawdzić, czy Magento ma poprawnie uruchomione wsparcie dla SOAP, należy uruchomić w przeglądarce stronę o adresie:

1
http://MAGENTO/api/?wsdl

Jeżeli wszystko jest dobrze, to powinien pojawić się dokument oparty o XML podający szczegółowe informacje o SOAP. Jeżeli pojawi się komunikat typu: „Unable to load Soap extension on the server” to oznacza to, iż brakuje rozszerzenia SOAP na serwerze.

Ustawianie użytkownika dla SOAP

Na samym początku musimy stworzyć specjalne konto użytkownika dla SOAP. Wewnątrz naszej aplikacji będziemy budować klienta SOAP, który to będzie się zachowywał trochę tak samo jak zwykły klient korzystający z przeglądarki. Będzie żądał poszczególnych podstron z aplikacji Magento, ale strony te nie będą dostępne, gdy nie będzie się miało odpowiednich uprawnień. Dlatego właśnie trzeba stworzyć właściwe konto użytkownika.

Zanim stworzymy konto użytkownika, musimy stworzyć Rolę dla tego użytkownika. Logujemy się do panelu administracyjnego oraz przechodzimy do System->Webservices->Roles. Tam tworzymy nową rolę i przypisujemy jej zasoby, do których otrzyma ona dostęp.

W naszym przypadku przypiszemy do roli API Full Access, ale w prawdziwym życiu należy dokładnie przemyśleć, które uprawnienia powinna otrzymać dana rola. Przypisanie pełnych uprawnień użytkownikowi może stworzyć poważne zagrożene dla bezpieczeństwa.

Gdy utworzyliśmy już rolę, należy utworzyć użytkownika. Przechodzimy do System->Webservices->Users. Wpisujemy odpowiednie dane dla użytkownika. Najważniejsze to username (będący jego loginem) oraz API key (oznaczający hasło). Właśnie te parametry będziemy musieli wprowadzić do naszego klienta SOAP. Przed zapisaniem klienta upewniamy się jeszcze, że odpowiednia rola jest do niego przypisana.

Wybór klienta SOAP

W niniejszym dokumencie pokażemy, jak używać klienta SOAP do połączenia się z Magento. W rzeczywistości, ten klient SOAP jest odrębną aplikacją samą w sobie, która komunikuje się z Magento za pośrednictwem protokołu SOAP. Zamiast budować wszystko od zera, możemy posiłkować się już instniejącą biblioteką do obsługi SOAP.

PHP5 jest dostarczany z wbudowaną biblioteką zwaną SoapClient, która umożliwia komunikację po SOAP. Rozszerzenie to jest aktywowane, jeżeli PHP zostało skompilowane z parametrem –enable-soap. W wielu przypadkach pracujemy z już wcześniej skompilowanym PHP i jedyne co musimy zrobić to uruchomić to rozszerzenie w pliku konfiguracyjnym PHP.

Dla celów informacyjnych wato wspomnieć, iż powyższy klient nie jest jedynym. PEAR oferuje pakiet PEAR::SOAP zawierający klasę SOAP_Client. Zend Framework również zawiera takową klasę o nazwie Zend_Soap_Client. Od PHP4 dostępna była alternatywa o nazwie NuSoap. Ta ostatnia powodowała konflikt z PHP5 SOAP, gdy obie były włączone.

W niniejszym tutorialu użyjemy PHP5 SoapClient.

Logowanie z klientem SOAP

Teraz utworzymy prosty skrypt, który umożliwi zalogowanie się do Magento poprzez SOAP. Najpierw utworzmy instancję klienta SOAP wraz z argumentem w postaci adresu URL do Magento SOAP.

1
2
3
4
5
6
7
8
9
10
// Informacje konieczen do zalogowania
$mage_url = 'http://MAGENTO/api/?wsdl'; 
$mage_user = 'soap_user'; 
$mage_api_key = '********'; 
 
// Tworzenie instancji klienta
$soap = new SoapClient( $mage_url ); 
 
// Logowanie do Magento
$session_id = $soap->login( $mage_user, $mage_api_key );

Kiedy utworzymy instację naszego klienta, logujemy się stosując dostarczone dane logowania utworzone wcześniej. W rezultacie zwrócony nam będzie identyfikator sesji, który będzie stosowany przy wywołaniach metod API.

Warto wspomnieć dla celów informacyjnych, że wywołanie metody login() jest w rzeczywistości wywołaniem metody __soapCall(), z pierwszym argumentem ustaiwonym na login, a drugim argumentem w postaci tablicy wypełnionej parametrami przekazanymi do login(). Zastosowany tu mechanizm bazuje na tzw. magicznych metodach. Umożliwia to wywoływanie dowolnych metod SOAP stosując strukturę jak niżej.

1
$odpowiedz = $soap->nazwaMetodySOAP ( $argumenty );

Co dalej?

Dotychczas zobaczyliśmy tylko odrobinę kodu PHP. W następnym odcinku z tej serii zanużymy się w Magento API i popracujmy na danych.