2

WSDLこの方法でサーバーにリクエストを送信します。

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

それは正常に動作し、次を__getLastRequest返します。

<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>

しかし、私が電話をかけるとSomeFunction__soapCallサーバーWSDLはブレーキをかけ、正しい応答を返しません。

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

__getLastRequest戻り値:

<?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>

ご覧のとおり、リクエストが異なるため、機能しません。

それを解決する方法は?

4

1 に答える 1

7

PHPドキュメントに示されているようにSoapClient::__ soapCall

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

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

したがって、を使用してWebサービスを呼び出す場合は__soapCall、次のように呼び出す必要があります。

$soap->__soapCall('SomeFunction', array(array('Param1' => 123, 'Param2' => 456)));
于 2012-08-17T16:54:23.590 に答える