2 votes

SoapClient::SomeFunction vers SoapClient::__soapCall('SomeFunction')

J'envoie une demande à WSDL de cette manière :

$soap = new SoapClient('WSDL_URI');
$soap->SomeFunction(array('Param1' => 123, 'Param2' => 456));

il fonctionne bien, et __getLastRequest les retours :

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://tempuri.org/">
    <SOAP-ENV:Body>
        <ns1:SomeFunction>
            <ns1:Param1>123</ns1:Param1>
            <ns1:Param2>456</ns1:Param2>
        </ns1:SomeFunction>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

mais si j'appelle SomeFunction par __soapCall , WSDL Le serveur se bloque et ne renvoie pas de réponse correcte.

$soap->__soapCall('SomeFunction', array('Param1' => 123, 'Param2' => 456));

__getLastRequest les retours :

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://tempuri.org/">
    <SOAP-ENV:Body>
        <ns1:SomeFunction/>
        <param1>123</param1>
        <param2>456</param2>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Vous voyez, parce que les demandes sont différentes, cela ne fonctionne pas

Comment résoudre le problème ?

7voto

Anas Points 1705

Comme indiqué dans la documentation php SoapClient::__soapCall ,

    $client = new SoapClient("some.wsdl");

    $client->SomeFunction($a, $b, $c);
    // Or    
    $client->__soapCall("SomeFunction", array($a, $b, $c));

Je pense donc que si vous voulez appeler le webservice avec __soapCall Vous devriez faire l'appel de cette manière :

$soap->__soapCall('SomeFunction', array(array('Param1' => 123, 'Param2' => 456)));

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X