Kako pomoću SOAP protokola slati/primati XML u PHP-u

Iako sam do sada radio isključivo s REST API-jem koristeći JSON u ovom ću blog postu pokazati kako pomoću SOAP protokola slati/primati XML u PHP-u.

Nekoliko stvari će biti pojašnjeno:
– kako treba izgledati XML kojeg šaljem kako bi dobio očekivani rezultat
– kako raspakirati dobiveni rezultat i od njega napraviti niz (array) podataka
– od čega se sastoji __doRequest metoda

XAMPP

S obzirom da ću sve raditi i testirati na lokalnom računalu potreban mi je XAMPP, jedno od popularnijih PHP razvojnih okruženja.

Ako lokalno želim koristiti SOAP protokol moram aktivirati SoapClient jer ću inače dobiti sljedeću grešku:

Aktivacija se vrši unutar Apache modula – ConfigPHP (php.ini).

SOAP XAMPP

Potrebno je pronaći ;extension=php_soap.dll i maknuti ; te nakon toga restartati Apache modul.

SOAP XAMPP

Postman

Prije nego krenem s izradom primjera u PHP-u moram se uvjeriti da API radi, a to ću napraviti kroz Postman.

Kod slanja zahtjeva na API moram pod Headers postaviti Content-Type: text/xml dok u Body ide XML u raw obliku.

Na prvom API-ju dobijem popis stanica.

SOAP XML Postman

Na drugom API-ju, nakon što pošaljem ID dvije stanice i datum, dobijem popis aktivnih stanica za odabrani datum.

SOAP XML Postman

PHP demo aplikacija

U službenoj dokumentaciji na adresi https://www.php.net/manual/en/class.soapclient.php saznao sam koje parametre trebam poslati kako bi dobio željeni rezultat.

__doRequest metoda me u ovom slučaju najviše zanima.

Iz priložene dokumentacije vidim da mi je potrebno četiri tj. pet parametara.

getStanice

string $request je zapravo XML koji sam u Postmanu slao kroz Body.

string $location je URL API-ja.

string $action je potrebno pronaći u dokumentaciji API-ja.

int $version označava verziju XML-a. U ovom slučaju to je 1.

Sve zajedno to izgleda ovako

Nakon što sam dobio rezultat $result trebam iz njega izvući nazive stanica tj. njihove ID-eve kako bi mogao kreirati select polja. Ovdje koristim getElementsByTagName() metodu.

[nodeValue]

print_r($popisStanica); daje sljedeći rezultat u kojemu gledam [nodeValue] unutar kojega se nalazi string sa svim podacima od pojedine stanice. Npr. [nodeValue] => idNAZIVgps1GPS2granicaZEMLJAIDnazivzemljeOZNAKA.

Od toga sada mogu kreirati dva select polja + polje za odabir datuma.

Krajnji rezultat su dva padajuća izbornika sa popisom stanica.

SOAP protokol

getLinije

string $request je zapravo XML koji sam u Postmanu slao kroz Body.

Parametre StanicaOd, StanicaDo i Datum dohvaćam dinamički putem forme kroz funkciju display().

string $location je URL API-ja.

string $action je potrebno pronaći u dokumentaciji API-ja.

int $version označava verziju XML-a. U ovom slučaju to je 1.

Sve zajedno to izgleda ovako

Nakon što sam dobio rezultat $result trebam iz njega izvući nazive stanica tj. njihove ID-eve, termine polaska, dolaska i ukupno trajanje putovanja kako bi mogao kreirati tablicu. Ovdje također koristim getElementsByTagName() metodu.

[nodeValue]

Krajnji rezultat izgleda ovako:

SOAP post

Prikaz vremena polaska, dolaska i trajanje mogu se pomoću jedne funkcije ljepše formatirati.

Krajnji rezultat sada izgleda ovako:

SOAP post

Zaključak

Cilj ovog blog posta bio je pokazati kako napraviti demo PHP aplikaciju pomoću koje se može primiti/poslati XML putem SOAP protokola.

Promjena verzije PHP-a za WordPress

S obzirom da sve volim imati “up-to-date”, koliko god je to moguće, nedavno sam istraživao koliki utjecaj verzija PHP-a ima na WordPress. Iako je i sam WordPress pisan u PHP-u velika je vjerojatnost da se korisnik običnog WordPress bloga nikada neće niti susresti s pravim PHP-om koji stoji “ispod poklopca”. No, to nije razlog da se zanemare prednosti koje donose novije verzije PHP-a, ako ništa drugo, onda po pitanju sigurnosti i performansi.

Što je potrebno za samostalnu promjenu PHP verzije?
WordPress instalacija
– pristup cPanelu
– pristup opciji Select PHP Version unutar cPanela
PHP Compatibility Checker plugin
Display PHP Version plugin

Trenutna verzija PHP-a

Prije svega potrebno je (sa)znati koja se verzija PHP-a trenutno koristi kako bi uopće znali koje nam opcije nadogradnje ostaju i što s njima možemo dobiti. Za tu svrhu može se koristiti “Display PHP Version” plugin koji će nakon instalacije i aktivacije unutar upravljačke ploče WordPress nadzorne ploče prikazati trenutno korištenu verziju PHP-a.

U mojem slučaju to je bila verzija 5.3.29.

Promjena verzije PHP-a za WordPress

Nakon što sam saznao koju verziju PHP-a trenutno koristim zaključujem da bi se trebao prebaciti na (naj)noviju verziju.

Promjena verzije PHP-a za WordPress
PHP Supported Versions

Međutim, prije nego to napravim trebam se uvjeriti da su tema koju koristim i svi pluginovi kompatibilni sa verzijom PHP-a, na koju se planiram prebaciti, jer se u suprotnom WordPress stranica može srušiti.

Kompatibilnost nove verzije PHP-a

Kada se koriste najnovije verzije teme i pluginova mala je vjerojatnost da isti neće biti kompatibilni sa novom verzijom PHP-a, ali ipak može se i to dogoditi. Zato je važno prije promjene provjeriti jesu li tema i svi pluginovi kompatibilni sa novom verzijom PHP-a.

To je moguće učiniti koristeći PHP Compatibility Checker plugin.

Nakon instalacije i aktivacije dovoljno je otići u izbornik Alati -> PHP Compatibility -> odabrati željenu verziju PHP-a i kliknuti na Scan site.

Prvo ću provjeriti kompatibilnost sa trenutno najnovijom verzijom PHP-a, a to je verzija 7.0

Promjena verzije PHP-a za WordPress

Iz analize mogu vidjeti da mi jedan plugin, konkretno Social Warfare Pro kojeg sam platio 30ak $, nije kompatibilan sa verzijom 7.0 PHP-a. Zbog toga trenutno odlučujem da neću prelaziti na najnoviju verziju PHP-a, barem ne dok ne istražim moguće načine kako taj plugin prilagoditi ili moguće posljedice nadogradnje unatoč nekompatibilnosti.

Promjena verzije PHP-a za WordPress

Sljedeća logična verzija PHP-a je 5.6 te odlučujem testirati kompatibilnost svoje instalacije WordPressa s tom verzijom. Zaključujem da imam punu kompatibilnost i da se slobodno mogu prebaciti na verziju PHP-a 5.6

Promjena verzije PHP-a za WordPress

Promjena verzije PHP-a

Sada mogu otići u cPanel i promijeniti verziju PHP-a koristeći Select PHP Version.

Promjena verzije PHP-a za WordPress

Odabirem verziju 5.6 i klikom na Set as current potvrđujem da tu verziju želim koristiti.

Promjena verzije PHP-a za WordPress

Ako se sada vratim u nadzornu ploču mogu vidjeti da je nova verzija PHP-a za WordPress 5.6.32

Promjena verzije PHP-a za WordPress

Zaključak

So, now you know – PHP versions aren’t something you have to think about a lot, but it’s the engine that runs everything else. It matters, and you can improve your speed, security and compatibility, by making the right choice. – Does your PHP version matter?