如何在PHP中使用SOAP Web服务及其XML

时间:2016-06-01 05:21:40

标签: php xml web-services soap

我想在PHP开发的项目中调用Web服务的功能。这是我的代码:

$wsdl="http://x.x.x.x:8090/charge/services/Amount?wsdl";

$client = new SoapClient($wsdl) or die("Error");

$chargeAmountArray  = array('UserIdentifier' => $number ,
                            'data' => array(
                            'description' => array("Channel=test|".$Origin),
                            'currency' => NULL,
                            'code' => $code),
                            'refrence' => $refcode);

$header = new SoapHeader('servicekey', $servicekey);

$client->__setSoapHeaders($header);

$res = $client->__call('chargeAmount',$chargeAmountArray); 

return $res->return;

我用tcpdump看过我的xml代码,它就像:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.csapi.org/schema/parlayx/payment/amount_charging/v4_0/local" xmlns:ns2="servicekey">
    <SOAP-ENV:Header>
        <ns2:e0ce5ed56d7c4d60/>
    </SOAP-ENV:Header>
    <SOAP-ENV:Body>
        <ns1:chargeAmount/>
        <param1>
            <item>
                <key>description</key>
                <value>yChannel=test|30733</value>
            </item>
            <item>
                <key>currency</key>
                <value/>
            </item>
            <item>
                <key>code</key>
                <value>MOBDY</value>
            </item>
        </param1>
        <param2>1PN1mROoZop2hAy</param2>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

如您所见,UserIdentifier未通过且refrence参数在XML中没有名称。

1 个答案:

答案 0 :(得分:0)

我在这里看到一些错误。

constructor signature for the SoapHeader class显示第一个参数是名称空间声明,它不会显示您正在设置。

另外,SoapClient::__call() is deprecated;相反,你应该直接调用该方法:

$res = $client->chargeAmount($chargeAmountArray);

SoapClient::__call()期望数组中的参数带有键&#34;参数&#34;,您没有提供。

最后,您应该使用try / catch进行一些错误检查,以防无论出于何种原因无法建立连接。