PHP5 SOAP请求 - 关联数组参数不发送

时间:2011-10-27 11:16:25

标签: php soap-client

我在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°?

1 个答案:

答案 0 :(得分:0)

您正在为参数使用关联数组。这意味着您正在使用命名参数。命名参数没有任何顺序,它们有一个名称。订单并不重要。

如果你想使用未命名的参数,可以不使用关联数组,只使用数字索引,从零开始:

    $soapCli->__soapCall(
        "getUserByCf", array('ok', 'notok')
    )

请注意,这通常不起作用,因为许多服务需要命名参数。