【问题标题】:Why the SOAP request is empty?为什么 SOAP 请求为空?
【发布时间】:2021-04-30 09:02:17
【问题描述】:

我开发系统以使用 SOAP 从客户端导出一些数据。我有一个指向他们的 staging wsdl 的链接,并实现了某种 SOAP 客户端,但不幸的是我的 SOAP 请求是空的,响应是错误的。

链接到 WSDL: https://rewardsservices.griris.net/mapi/OrderManagementServices.svc?wsdl

操作调用: exportPendingOrder

我的 SOAP 客户端片段:

$soap = new \SoapClient('https://rewardsservices.griris.net/mapi/OrderManagementServices.svc?wsdl', [
    'soap_version' => SOAP_1_2,
    'cache_wsdl' => WSDL_CACHE_NONE,
    'trace' => 1,
    'exception' => 1,
]);
​
$headers = [
    new SoapHeader(
        'http://www.w3.org/2005/08/addressing',
        'Action',
        'http://tempuri.org/IOrderManagementServices/exportPendingOrder',
        true
    ),
     new SoapHeader(
         'http://www.w3.org/2005/08/addressing',
         'To',
         'https://rewardsservices.griris.net/mapi/OrderManagementServices.svc',
         true
     ),
];
​
$soap->__setSoapHeaders($headers);
​
try {
    $params = [
        'parameters' => [
            'merchantNetworkID' => "XXX",
            'merchantCode' => "XXX",
            'subProgramNetworkID' => "XXX",
            'countryISOCode' => "XXX",
            'grToken' => "XXX",
            'requestId' => (new \DateTime())->getTimestamp(),
        ],
    ];
​
    $result = $soap->exportPendingOrder($params);
​
    var_dump([
        'params' => $params,
        'result' => $result,
        'request' => $soap->__getLastRequest(),
        'response' => $soap->__getLastResponse(),
    ]);
} catch (\SoapFault $exception) {
    var_dump([
        'error_message' => $exception->getMessage(),
        'request' => $soap->__getLastRequest(),
        'response' => $soap->__getLastResponse(),
    ]);
}

日志信息(包括请求/响应):

array(4) {
  ["params"]=>
    array(1) {
      ["parameters"]=>
        array(6) {
          ["merchantNetworkID"]=>
          string(36) "XXX"
          ["merchantCode"]=>
          string(3) "XXX"
          ["subProgramNetworkID"]=>
          string(36) "XXX"
          ["countryISOCode"]=>
          string(2) "XXX"
          ["grToken"]=>
          string(110) "XXX"
          ["requestId"]=>
          int(1619772724)
        }
      }
    ["result"]=>
      object(stdClass)#185 (1) {
        ["exportPendingOrderResult"]=>
        string(121) "{"responseCode":"1002","description":"Required field value missing","result":{"requestID":null,"serializedDataset":null}}"
      }
    ["request"]=>
      string(496) "<?xml version="1.0" encoding="UTF-8"?>
    <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://tempuri.org/" xmlns:ns2="http://www.w3.org/2005/08/addressing"><env:Header><ns2:Action env:mustUnderstand="true">http://tempuri.org/IOrderManagementServices/exportPendingOrder</ns2:Action><ns2:To env:mustUnderstand="true">https://rewardsservices.griris.net/mapi/OrderManagementServices.svc</ns2:To></env:Header><env:Body><ns1:exportPendingOrder/></env:Body></env:Envelope>
    "
    ["response"]=>
      string(531) "<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing"><s:Header><a:Action s:mustUnderstand="1">http://tempuri.org/IOrderManagementServices/exportPendingOrderResponse</a:Action></s:Header><s:Body><exportPendingOrderResponse xmlns="http://tempuri.org/"><exportPendingOrderResult>{"responseCode":"1002","description":"Required field value missing","result":{"requestID":null,"serializedDataset":null}}</exportPendingOrderResult></exportPendingOrderResponse></s:Body></s:Envelope>"
}

您能否告知我做错了什么,以及为什么我的 SOAP 请求根据提供的 wsdl 为空?任何帮助表示赞赏!

提前致谢,

是的

【问题讨论】:

    标签: php web-services soap wsdl soap-client


    【解决方案1】:

    我终于成功地发送了非空请求。我已经使用SoapUI tool 检查了合作伙伴的 wsdl,它向我显示了请求的正确格式。所以正确的请求必须是以下一个:

    ...
    $params = [
        'JsonData' => json_encode([
            'merchantNetworkID' => "XXX",
            'merchantCode' => "XXX",
            'subProgramNetworkID' => "XXX",
            'countryISOCode' => "XXX",
            'grToken' => "XXX",
            'requestId' => (new \DateTime())->getTimestamp(),
        ]),
    ];
    ...
    

    【讨论】:

      猜你喜欢
      • 2013-08-18
      • 1970-01-01
      • 2019-11-04
      • 2012-02-13
      • 2018-08-29
      • 2016-11-24
      • 1970-01-01
      • 2016-04-07
      • 2014-03-28
      相关资源
      最近更新 更多