如何使用Zend_Soap_Client发出正确的请求?

时间:2011-12-01 18:15:54

标签: php zend-framework soap

我正在使用以下代码发送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相同。

我有什么遗失的吗?

1 个答案:

答案 0 :(得分:0)

没有WSDL,我猜每个人都会猜测你的问题。所以这是我的猜测。

试试这个:

$client->RequestCustomReport(array(
    'reportDefinition'    => $reqFilter, 
    'securityCredentials' => $secArr
));