【问题标题】:Php SoapClient Soap-Env has 'item' and 'key' nodesPhp SoapClient Soap-Env 有 'item' 和 'key' 节点
【发布时间】:2016-05-23 09:06:13
【问题描述】:

我在使用 php SoapClient 调用合作伙伴肥皂服务时遇到问题。他的wsdl是https://motrada.net/accounts/test.wsdl

当我将以下数据发送到 php SoapClient

    array (
  'Expert_Status' => 
  array (
    'ChassisNo' => '9998886NZ12345678',
    'MotradaIntVehicleNo' => '757169',
    'MotradaSalesId' => '209448',
    'MotradaWorkflowStatus' => '5-offer_preperation',
    'GrossPriceInclVATAutoi' => '20000',
    'DamageAmountInclVAT' => '1000',
    'MileageExpertise' => '234234',
    'Timestamp' => '2016-05-23T10:14:58+02:00',
  ),
)

php-SoapClient 发送如下请求:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP-ENV:Body>
        <Expert-Request>
            <item>
                <key>Expert_Status</key>
                <value>
                    <item>
                        <key>ChassisNo</key>
                        <value>9998886NZ12345678</value>
                    </item>
                    <item>
                        <key>MotradaIntVehicleNo</key>
                        <value>757169</value>
                    </item>
                    ...   
                </value>
            </item>
        </Expert-Request>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

请求应该是这样的

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP-ENV:Body>
        <Expert_Status>
            <ChassisNo>9998886NZ12345678</ChassisNo>
            <MotradaIntVehicleNo>757169</MotradaIntVehicleNo>
            ...

我发送给 php SoapClient 的选项是:

array (
  'encoding' => 'UTF-8',
  'verifypeer' => false,
  'verifyhost' => false,
  'soap_version' => 'SOAP_1_1',
  'trace' => true,
  'exceptions' => true,
  'connection_timeout' => 10,
  'login' => 'MOTR_ALE',
  'password' => 'XXXXXXXX',
)

谁能帮我找出问题所在?

【问题讨论】:

    标签: php soap wsdl soap-client


    【解决方案1】:

    仔细查看给定的 WSDL 文件,其中显示:

    <wsdl:message name="xmln.Bestand-Request">
        <wsdl:documentation/>
        <wsdl:part xmlns="" name="Bestand-Request" element="Bestand-Request"/>
    </wsdl:message>
    <wsdl:message name="xmln.Bestand-Response">
        <wsdl:documentation/>
        <wsdl:part xmlns="" name="Bestand-Response" element="Bestand-Response"/>
    </wsdl:message>
    <wsdl:message name="xmln.Expert-Request">
        <wsdl:part name="Expert-Request" element="Expert-Request"/>
    </wsdl:message>
    <wsdl:message name="xmln.Expert-Response">
        <wsdl:part name="Expert-Response" element="Expert-Response"/>
    </wsdl:message>
    

    你看出区别了吗?在前两部分定义中,有一个空属性“xmlns”,其他部分定义中缺少该属性。 通过这个属性扩展这些部分,你应该很高兴;)

    【讨论】:

      【解决方案2】:

      好吧,你只需要从服务器作为对象发送答案

      return json_decode(json_encode([
          'response' => [
              'status' => 0, 
              'result' => [
                  'error' => [
                      'code' => 1111,
                      'message' => 'testme'
                  ]
              ], 
          ]
      ]));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-02
        • 1970-01-01
        相关资源
        最近更新 更多