我在php上写这个脚本来做一个SOAP请求:
<?php
try {
$soapCli = new SoapClient('somewsdl', array('trace' => 1));
print_r(
$soapCli->__soapCall(
"getUserByCf", array("xxx" => 'ok', "cf" => 'notok')
)
);
echo "REQUEST HEAD:\n" . $soapCli->__getLastRequestHeaders() . "\n";
echo "REQUEST:\n" . $soapCli->__getLastRequest() . "\n";
unset($soapCli);
} catch (SoapFault $e) {
print_r($e);
}
?>
但是我的wsdl第一个参数是cf(而不是xxx)。因此,服务器重新发布XML是:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns1="" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<ns1:getUserByCf>
<cf xsi:type="xsd:string">ok</cf>
<xxx xsi:type="xsd:string">notok</xxx>
</ns1:getUserByCf>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
2参数被切换。
为什么,如果_soapCall()
上的参数
“传递给函数的参数数组。这可以是有序数组或关联数组。”
我做了一个关联数组,请求不是关联的吗?
为什么soapCall不关联2个参数,但是在WSDL上以1°名称切换和关联1°参数,在2°时关联2°?
答案 0 :(得分:0)
您正在为参数使用关联数组。这意味着您正在使用命名参数。命名参数没有任何顺序,它们有一个名称。订单并不重要。
如果你想使用未命名的参数,可以不使用关联数组,只使用数字索引,从零开始:
$soapCli->__soapCall(
"getUserByCf", array('ok', 'notok')
)
请注意,这通常不起作用,因为许多服务需要命名参数。