【问题标题】:How to send complex types via Zend_Soap_Client?如何通过 Zend_Soap_Client 发送复杂类型?
【发布时间】:2012-01-03 10:36:35
【问题描述】:

我想使用 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>

我做错了什么?

更新:我认为问题的原因是为参数声明的 complexType 是基本类型,其中 WSDL 中存在几种扩展类型,我想使用其中一种扩展类型。我猜 Zend_Soap_Client 不能识别基本类型中不存在的任何元素,即所有元素。有没有办法解决这个问题?

【问题讨论】:

    标签: php zend-framework soap


    【解决方案1】:

    解决方案在于标准的 PHP SOAP 客户端,它扩展了 Zend_Soap_Client。 SoapVar 类允许您包装参数并指定要使用的实际类型。我必须做的是回到使用 $transactionDetails 的 PHP 类和这段代码:

    $params->details = new SoapVar($transactionDetails, 
        SOAP_ENC_OBJECT, get_class($transactionDetails), $namespace);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-29
      相关资源
      最近更新 更多