我想在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中没有名称。
答案 0 :(得分:0)
我在这里看到一些错误。
constructor signature for the SoapHeader
class显示第一个参数是名称空间声明,它不会显示您正在设置。
另外,SoapClient::__call()
is deprecated;相反,你应该直接调用该方法:
$res = $client->chargeAmount($chargeAmountArray);
SoapClient::__call()
期望数组中的参数带有键&#34;参数&#34;,您没有提供。
最后,您应该使用try
/ catch
进行一些错误检查,以防无论出于何种原因无法建立连接。