Soap Client的Soap Request格式错误

时间:2019-02-01 15:11:01

标签: php soap-client

我有以下要求我可以与邮递员一起成功测试的要求:

curl -X POST \
  'https://dig-stage.crane.aero/craneota/CraneOTAService?wsdl=' \
  -H 'Content-Type: text/xml' \
  -H 'Postman-Token: 85f5fd96-5040-497e-9578-02dc63d91267' \
  -H 'cache-control: no-cache' \
  -d '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:impl="http://impl.soap.ws.crane.hititcs.com/">
  <soapenv:Header/>
  <soapenv:Body>
    <impl:GetAirPortMatrix>
        <AirPortMatrixRequest>
          <clientInformation>
            <clientIP>127.0.0.1</clientIP>
            <member>false</member>
            <password>xxxxxx</password>
            <preferredCurrency>xxx</preferredCurrency>
            <preferredLanguage>xx</preferredLanguage>
            <userName>xxxxxx</userName>
          </clientInformation>
      </AirPortMatrixRequest>
    </impl:GetAirPortMatrix>
  </soapenv:Body>
</soapenv:Envelope>'

现在我想使用PHP SOAP客户端执行从我的控制器,同样的要求:

$client = new SoapClient("https://dig-stage.crane.aero/craneota/CraneOTAService?wsdl");
$response = $client->__soapCall("GetAirPortMatrix", ["AirportMatrixRequest" => [
      'clientIP' => '127.0.0.1',
      'member' => false,
      'password'   => 'xxxxxx',
      'preferredCurrency' => 'xxx',
      'userName' => 'xxxxxx'
]]);

但是我不断收到服务器错误:

ERR_INVALID_REQUEST : Client information and Request object must be set properly

在这一点上,我确定我没有像在Postman中那样正确地在PHP中形成请求。

1 个答案:

答案 0 :(得分:1)

如果您不确定要形成一个有效的请求,请使用WSDL to PHP生成器。使用这种类型的生成器将带您进入一个PHP SDK,其中包含与请求和响应数据相匹配的类以及用于发送请求的类。然后,您只需要实例化对象,然后将请求数据对象传递到轻松允许使用OOP方法发送请求和处理响应的类即可。此外,您将使用PhpStorm或Eclipse PDT等IDE进行完全自动补全。

尝试PackageGenerator项目。