我正在嘗試使用zend 1.11.7將一個web服務調用到一個asp.net soap web服務。如何通過php Zend_Soap_Client將參數傳遞給soap方法?
的文檔指出我需要做以下格式的呼叫:
RequestCustomReport(CustomReportDef, SecurityCredential)
結構如下:
<securityCredentials>
<Key>string</Key>
<UserName>string</UserN
<Password>string</Passw
</securityCredentials>
<reportDefinition>
<CustomTemplateId>int</CustomTemplateId>
<StartDate>dateTime</StartDate>
<EndDate>dateTime</EndDate>
<PeriodId>int</PeriodId>
<SiteId>int</SiteId>
<ReportGUID>string</ReportGUID>
<ReportData>base64Binary</ReportData>
<ReportDataType>xml or csv or tsv or txt</ReportDataType>
<CompressReportData>boolean</CompressReportData>
<ReportStatus>Pending or Ready or Error or Deleted</ReportStatus>
<ErrorMessage>string</ErrorMessage>
</reportDefinition>
我的zend代碼:
$client = new Zend_Soap_Client($ws_url);
$reqFilter = array();
$reqFilter['CustomTemplateId'] = 33117; //33117 = report id
//$reqFilter['StartDate'] =
//$reqFilter[''] ='';
$reqFilter['PeriodId'] = 4; //4 = last 7 days
$reqFilter['SiteId'] =3672;
$reqFilter['ReportDataType'] ='xml';
$reqFilter['CompressReportData'] =0;
$reptXml=new XMLWriter();
$reptXml->openMemory();
$reptXml->startDocument('1.0','UTF-8');
$reptXml->startElement("reportDefinition");
$reptXml->startElement("CustomTemplateId");
$reptXml->text($reqFilter['CustomTemplateId']);
$reptXml->endElement();//CustomTemplateId
$reptXml->startElement("PeriodId");
$reptXml->text($reqFilter['PeriodId']);
$reptXml->endElement();//PeriodId
$reptXml->startElement("SiteId");
$reptXml->text((int)$reqFilter['SiteId']);
$reptXml->endElement();//SiteId
$reptXml->startElement("ReportDataType");
$reptXml->text($reqFilter['ReportDataType']);
$reptXml->endElement();//ReportDataType
$reptXml->startElement("CompressReportData");
$reptXml->text(0);
$reptXml->endElement();// CompressReportData
$reptXml->endElement();//reportDefinition
/*
* securityCredentials xml
*/
$secXml=new XMLWriter();
$secXml->openMemory();
$secXml->startDocument('1.0','UTF-8');
$secXml->startElement("securityCredentials");
$secXml->startElement("Key");
$secXml->text('----');
$secXml->endElement();
$secXml->startElement("UserName");
$secXml->text('--.--');
$secXml->endElement();
$secXml->startElement("Password");
$secXml->text('----');
$secXml->endElement();
$secXml->endElement();
$result = $client->RequestCustomReport($reptXml,$secXml);
但我得到一個錯誤:
致命錯誤:未捕獲SoapFault異常:[soap:Sender]報告定義是必需參數,但未在C:\ wamp \ www \ libs \ Zend-1.11.10 \ Zend \ Soap \ Client.php中提供:1121堆棧跟蹤:#0 C:\ wamp \ www \ libs \ Zend-1.11.10 \ Zend \ Soap \ Client.php(1121):SoapClient - > __ soapCall('RequestCustomRe ...',Array,NULL,NULL,Array )#1 [內部函數]:Zend_Soap_Client - > __ call('RequestCustomRe ...',Array)#2 C:\ wamp \ www \ ProFound_test \ wsdl.php(109):Zend_Soap_Client-> RequestCustomReport(Object(XMLWriter),對象(XMLWriter))#3 {main}拋出C:\ wamp \ www \ libs \ Zend-1.11.10 \ Zend \ Soap \ Client.php on line 1121
看起來它並沒有認出我有通過報告定義參數作爲正確的節點名稱。
任何人都可以幫忙嗎?
似乎已經做到了!我曾嘗試添加爲一個數組之前,但沒有把它作爲一個關聯數組,因爲它是缺少的「關鍵」:)我只需要找出下一個錯誤...另一個q! – thiswayup