PHP SOAP客户端数据格式化问题

时间:2012-01-23 17:44:31

标签: php soap soap-client

我正在尝试使用PHP格式化SOAP请求。如果我通过SOAPUI提出以下请求,我会得到正确的结果:

  <urn:getCallInfoSearch>
     <UserInfo>
        <UserID>USERID</UserID>
        <Password>PASS</Password>
        <SvcrAcct>USERID</SvcrAcct>
     </UserInfo>
     <FromDateTime>12/10/2011 12:00:00</FromDateTime>
     <ToDateTime>12/30/2011 12:00:00</ToDateTime>
  </urn:getCallInfoSearch>

我尝试使用SoapClient在PHP中格式化它,如下所示:

$getCallInfoSearch = array(
    'UserInfo'      => array('UserId' => 'USERID', 'Password' => 'PASS', 'SvcrAcct' => 'USERID'),
    'FromDateTime'  => '12/10/2011 12:00:00',
    'ToDateTime'    => '12/30/2011 12:00:00',
);
$client->getCallInfo($getCallInfoSearch);

我从服务器得到的回复是&#34; UserID不能为空或空白&#34;。阵列是否有任何理由不能完全转换为SoapUI的功能请求?

WSDL定义了getCallInfoSearch,如下所示:

<complexType name="getCallInfoSearch">
<sequence>
<element name="UserInfo" nillable="true" type="impl:UserInfo"/>
<element name="FromDateTime" nillable="true" type="xsd:string"/>
<element name="ToDateTime" nillable="true" type="xsd:string"/>
</sequence>
</complexType>

用户信息:

<complexType name="UserInfo">
<sequence>
<element name="UserID" nillable="true" type="xsd:string"/>
<element name="Password" nillable="true" type="xsd:string"/>
<element name="SvcrAcct" nillable="true" type="xsd:string"/>
</sequence>
</complexType>

更新,我还尝试使用标准类构建请求,如下所示,我仍然得到相同的结果:

$getCallInfoSearch = new stdclass();
$getCallInfoSearch->UserInfo = new stdclass();
$getCallInfoSearch->UserInfo->UserId    = 'USERID';
$getCallInfoSearch->UserInfo->Password  = 'PASS';
$getCallInfoSearch->UserInfo->SvcrAcct  = 'USERID';
$getCallInfoSearch->FromDateTime = '12/10/2011 12:00:00';
$getCallInfoSearch->ToDateTime = '12/30/2011 12:00:00';

UPDATEx2:这些解决方案中的任何一个都能正常工作(上面发布)。这个问题始终是区分大小写的。 UserID与UserId。

1 个答案:

答案 0 :(得分:2)

只是一个猜测,但是"UserID"!= "UserId"

试试这个:

$getCallInfoSearch = array(
    'UserInfo'      => array('UserID' => 'USERID', 'Password' => 'PASS', 'SvcrAcct' => 'USERID'),
    'FromDateTime'  => '12/10/2011 12:00:00',
    'ToDateTime'    => '12/30/2011 12:00:00',
);
$client->getCallInfo($getCallInfoSearch);