易趣平台通知SOAP监听器问题

时间:2016-11-02 22:25:43

标签: php soap ebay ebay-api

我正在尝试使用官方PlatformNotificationsCodeSample-PHP模板设置易趣平台通知。

我已使用我的密钥和令牌成功配置ebay.ini。 有了这个,SetNotificationPreferences.phpGetNotificationPreferences.php都会导致成功调用没有问题。

使用GetNotificationPreferences我可以看到我成功将ApplicationURL更改为http://localhost/notifications/listener.php

如果我尝试通过命令行访问generator.php,则会返回成功的呼叫

C:\development\xampp\htdocs\notifications>php generator.php
  <?xml version="1.0" encoding="UTF-8"?>
  <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:ns1="urn:ebay:apis:eBLBaseComponents" xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" 
  SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
  <SOAP-ENV:Body><ns1:GetMemberMessagesResponseResponse><return xsi:type="xsd:string">
  trachtenberga</return></ns1:GetMemberMessagesResponseResponse>
  </SOAP-ENV:Body></SOAP-ENV:Envelope>

这来自$argc $notifications arrayAskSellerQuestion.xml

我对listener.php如何运作感到困惑。

我是直接在浏览器(http://localhost/notifications/listener.php)中还是在命令行中访问它,我总是收到以下错误消息:

Notice: Undefined index: HTTP_RAW_POST_DATA in C:\development\xampp\htdocs\notifications\listener.php on line 107

这一行是:

$stdin = $GLOBALS['HTTP_RAW_POST_DATA'];

到目前为止我发现Undefined index: HTTP_RAW_POST_DATA问题的唯一可能解决办法是将我的php.ini配置更改为always_populate_raw_post_data = On,但这没有任何影响我仍然可以使用同样的错误。

我知道它已被建议使用php://input,因为$HTTP_RAW_POST_DATA在PHP 5.6.0中被折旧并在PHP 7.0.0中被删除,但根据eBay Knowledge base

  

请使用$ GLOBALS [&#34; HTTP_RAW_POST_DATA&#34;]来捕获有效负载   而不是file_get_contents(php://输入)。我们有类似的问题   客户在捕获时检索截止和不完整的有效负载   PHP输入流。

如何让这个SOAP侦听器工作,以便我可以开始配置我的平台通知?

1 个答案:

答案 0 :(得分:1)

忘了这个帖子。我的解决方案就是使用

if (!isset($HTTP_RAW_POST_DATA)) {
$HTTP_RAW_POST_DATA = file_get_contents("php://input");
}

// then do what you want, for example I was doing something like this
// to save the xml response to my web server

$file_name= "order_shipped_".time().".xml";
$stdin = $GLOBALS['HTTP_RAW_POST_DATA'];
file_put_contents($file_name, $stdin);

我收到的所有通知都很好。

但是根据原始帖子,我不确定这是考虑到eBay知识库和功能折旧的最佳解决方案。如果有人对此有任何更多的意见,请随意加入:)