我正在使用以下代码发送soap请求:
$client = new Zend_Soap_Client($ws_url);
$reqFilter = array();
$reqFilter['CustomTemplateId'] = 33117;
$reqFilter['StartDate'] = '2011-11-01T00:00:00';
$reqFilter['EndDate'] = '2011-11-01T00:00:00';
$secArr = Array();
$secArr['Key'] = '----------';
$secArr['UserName'] = 'joe';
$secArr['Password'] = '----------';
try{
$result = $client->RequestCustomReport(array('reportDefinition'=>$reqFilter),array('securityCredentials'=>$secArr) );
}
catch(Exception $e){
echo 'bad times';
echo $client->getLastRequest().'<hr>';
echo $e;
}
它会生成这个实际的肥皂请求:
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://api.dc-storm.com/broker/engage/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<env:Body>
<ns1:RequestCustomReport>
<ns1:reportDefinition>
<ns1:CustomTemplateId>33117</ns1:CustomTemplateId>
<ns1:StartDate>2011-11-01T00:00:00</ns1:StartDate>
<ns1:EndDate>2011-11-01T00:00:00</ns1:EndDate>
</ns1:reportDefinition>
<param1>
<item>
<key>securityCredentials</key>
<value>
<item>
<key>Key</key>
<value>--------------</value>
</item>
<item>
<key>UserName</key>
<value>joe</value>
</item>
<item>
<key>Password</key>
<value>-------------</value>
</item>
</value>
</item>
</param1>
</ns1:RequestCustomReport>
</env:Body>
</env:Envelope>
将此与应要求的内容进行比较:
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://api.dc-storm.com/broker/engage/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<env:Body>
<ns1:RequestCustomReport>
<ns1:reportDefinition>
<ns1:CustomTemplateId>33117</ns1:CustomTemplateId>
<ns1:StartDate>2011-11-01T00:00:00</ns1:StartDate>
<ns1:EndDate>2011-11-01T00:00:00</ns1:EndDate>
</ns1:reportDefinition>
<ns1:securityCredentials>
<ns1:Key>--------------------</ns1:Key>
<ns1:UserName>joe</ns1:UserName>
<ns1:Password>--------------------</ns1:Password>
</ns1:securityCredentials>
</ns1:RequestCustomReport>
</env:Body>
</env:Envelope>
问题是“securityCredentials”节点格式不正确。我不明白的是“reportDefinition”这个事实是正确的,但为什么不是“securityCredentials”。我将参数“securityCredentials”和“reportDefinition”以相同的方式传递给soap方法,并期望通过解析wsdl来创建结构。
我检查了wsdl并且securityCredentials的定义存在,并且在方法参数中与reportDefinition相同。
我有什么遗失的吗?
答案 0 :(得分:0)
没有WSDL,我猜每个人都会猜测你的问题。所以这是我的猜测。
试试这个:
$client->RequestCustomReport(array(
'reportDefinition' => $reqFilter,
'securityCredentials' => $secArr
));