PHP SOAP server

Pozdravljeni,

v soap svetu nisem ravno domač, bi pa moral narediti en PHP server, kamor nam bo zunanja aplikacija pošiljala določena sporočila in dokumente. Imam wsdl file, ki so mi ga poslali iz te zunanje firme. Kakšna ideja kje začeti? Morda kdo, ki to obvlada in bi lahko pogledal?

7 odgovorov

1

Kaj manjka default SOAP klientu?

$soapClient = new SoapClient($wsdl, $options);

1

Sem delal z default soap clientom in mi je uspelo narediti do te mere, da sem sporočila normalno prejemal, vendar response ni bil pravilno oblikovan in tako njihova aplikacija ni pravilno registirala uspešnosti prenosa.

Če je response napačen, je zaradi tega, ker ste ga narobe formatirali in vam poreže vse kar ni specificirano v wisdlu.

$server = new SoapServer('wsdl', ['encoding'=>'UTF-8']);
    $server->setObject(new TheSoapServer());
    $server->handle();

In potem narediš class, ki ima metode kot jih zahteva wsdl

Naprimer takole:

// tole je fake metoda v zgoraj omenjenem classu

public function getUser()
{
    return (object)[
        'username' => 'janez',
        'name' => 'Miran',
    ];
}

Ne vem, če bi tudi array pravilno vrnil, lahko probaš.
Drugače pa je soap v PHP-ju ena precej grozna stvar (no SOAP nasplošno je grozna stvar) in nekatere zadeve so praktično nemogoče brez extendanja native liba (naprimer avtentikacija prek headerjev, če bi rad še custom headerje pošiljal ipd...)

Za osnovne stvari pa gre čez.

1

Sedaj sem uspel service pripraviti do tega, da vrača pravilno formatiran response. Normalno pa sem naletel na novo težavo :) In sicer ko mi zunanji webservice pošlje PDF, mu moj webservice vrne error 500. V usage logu je zabeležen error 500, medtem ko v error logu ni ničesar.
Opažam da je tale SOAP res pain in the ass, ampak žal nimam druge izbire.

Tole bi moralo pomagat.

To, da dobiš debug namesto 500, si pa pač confe pošvasaj.

1

Najbolj mi je zanimivo to, da imam v serverju definirani dve funkciji. Prva prenaša meta podatke o dokumentu in deluje OK, druga ki skrbi za prenos samega dokumenta, pa vrača 500 error.

spicey sem puskuil tudi na način prikazan na linku in je enako.