/ / PHP SoapClient - Comment structurer un en-tête de savon - php, soap, soap-client

PHP SoapClient - Comment structurer un en-tête de savon - php, soap, soap-client

Si vous utilisez SoapClient dans PHP 5.3.28, vous souhaitez créer un en-tête de fichier soap ressemblant à ceci:

<soap:Header>
<ns:RequestParams Size="Large" Color="Blue" Brand="xyz">
</soap:Header>

Si je construis l'en-tête comme ceci:

    $params = array("RequestParams" => array("Size" => "Large", "Color" => "Blue", "Brand" => "xyz");
$header = new SoapHeader(NameSpace, "RequestParams", $params);
$client = new SoapClient(NULL, array("location" => "https://endpoint-url",
"uri" => "http://namespace-uri",
"soap_version" => SOAP_1_2, "trace" => 1));

$client->__setSoapHeaders($header);
$result = $client->__soapCall(some soap call here);
echo $client->__getLastRequest() . "n";

L'en-tête que je reçois est:

<env:Header>
<ns2:RequestParams>
<item><key>RequestParams</key><value>
<item><key>Size</key><value>Large</value></item>
<item><key>Color</key><value>Blue</value></item>
<item><key>LastName</key><value>xyz</value></item></value>
</item>
</ns2:RequestParams>
</env:Header>

et je reçois une réponse du serveur me disantc’est un en-tête invalide. J’ai cherché partout et il ne semble pas y avoir trop d’informations sur la façon dont PHP soapclient crée des en-têtes à partir de structures de données. Avez-vous une idée du format d’en-tête que je veux utiliser avec SoapClient? Tous les pointeurs appréciés.

Réponses:

0 pour la réponse № 1

utiliser pouvez-vous utiliser un tableau pour cette

$parm = array(
"properties" => array(
"Size" => "Large",
"Color" => "Blue",
"Brand" => "xyz"
),  );

va créer cette

<properties Size="Large" Color="Blue" Brand="xyz">

0 pour la réponse № 2

Impossible de trouver un moyen simple de créer un en-tête avec les paramètres comme attributs d’un nœud. En fin de compte, cela fonctionne, mais pas très joli:

$client = new SoapClient(NULL,
array("location" => $loc, "uri" => $ns,
"soap_version" => SOAP_1_2,
"style" => SOAP_DOCUMENT));
$headerVar = new SoapVar("<ns1:RequestParams Size="Large" Color="Blue" Brand="xyz"/>",
XSD_ANYXML);
$header = new SoapHeader($ns, "RequestParams", $headerVar);
$client->__setSoapHeaders($header);
$result = $client->__soapCall("SomeFunc", array(...));

Merci à Feroz d’avoir suggéré une réponse, ce qui fonctionne si vous envoyez des paramètres dans __soapCall, cela ne fonctionnait tout simplement pas lors de la création d’un en-tête.

Merci également à cb pour la solution: http://www.php.net/manual/en/soapvar.soapvar.php#91961