我想使用Zend_Soap_Client调用Web服务。这是相关的代码:
$params = new stdClass();
$params->transactionId = $transactionId;
$params->transactionState = $transactionState;
$params->details = $transactionDetails;
var_dump($params->details);
try {
$this->_soapClient->updateTransaction($params);
}
问题在于details
参数,它是WSDL中的复杂类型。 $transactionDetails
包含一个包含复杂类型(非空)元素的数组,这在var_dump()
中可见。以前,我尝试使用带有元素作为属性的PHP类。在这两种情况下,SOAP客户端实际发送的是:
<SOAP-ENV:Body>
<ns1:UpdateTransactionRequest>
<transactionId>45</transactionId>
<transactionState>SUCCESS</transactionState>
<details/>
</ns1:UpdateTransactionRequest>
</SOAP-ENV:Body>
我做错了什么?
UPDATE:我认为问题的原因是为parmeter声明的complexType是一个基类型,WSDL中存在几种扩展类型,我想使用其中一种扩展类型。我猜Zend_Soap_Client无法识别基类型中不存在的任何元素,这些元素都是它们。有办法解决这个问题吗?
答案 0 :(得分:1)
解决方案在于标准的PHP SOAP客户端,Zend_Soap_Client扩展。 SoapVar
类允许您包装参数并指定要使用的实际类型。我要做的就是回到使用$transactionDetails
的PHP类和这段代码:
$params->details = new SoapVar($transactionDetails,
SOAP_ENC_OBJECT, get_class($transactionDetails), $namespace);