【问题标题】:PayPal IPN suddenly receiving garbagePayPal IPN 突然收到垃圾
【发布时间】:2016-11-16 05:12:39
【问题描述】:

我有一个 PayPal IPN 处理程序,它已经工作了 5 年以上(随着时间的推移有各种更新)。昨天突然间我停止接收正常的 '&' 和 '=' 分隔的数据字符串,并开始收到大约 6 个垃圾非 ascii 字符。

当我记录直接从 PayPal 传入的数据时,在任何确认、解析、处理之前,我通常会得到

[2016-07-13 04:46 UTC] 原始数据处理_amount=0.00&discount=0.00&insurance_amount=0.00&payer_id=blah blah blah 等

现在,我刚刚得到这个

[2016-07-13 04:37 UTC] 原始数据 xæÕ-

它永远不是同一组字符,而是总是垃圾(只有大约 6 个字符)。

我检查了我的 PayPal 帐户中的编码并将其设置为 UTF-8。没有帮助。 我用完全相同的代码(地址更改为沙箱)使用了 PayPal IPN 模拟器,它运行良好。 我已经尝试了 3 个从 PayPal 的 IPN 历史中重新发送的独立 IPN,包括 1 个之前没有失败的 IPN。它们都不起作用,都会产生相同的垃圾数据。 我尝试将来自 PayPal 的输入直接作为 $_POST 并使用 file_get_contents('php://input') 处理。没有任何区别;一切都在模拟器中运行,它只是 Live 中的垃圾。

这是我的监听器代码。它与您在网上其他地方看到的示例几乎相同。

<?php 
error_reporting(E_ALL ^ E_NOTICE); 

define("LOG_FILE", "./ipn.log");

$raw_post_data = file_get_contents('php://input');
error_log(date('[Y-m-d H:i e] '). "Raw data " . $raw_post_data . PHP_EOL, 3, LOG_FILE);
$raw_post_array = explode('&', $raw_post_data);
$myPost = array();
foreach ($raw_post_array as $keyval) 
{
    $keyval = explode ('=', $keyval);
    if (count($keyval) == 2)
        $myPost[$keyval[0]] = urldecode($keyval[1]);
}
// Read the post from PayPal and add 'cmd' 
$req = 'cmd=_notify-validate';
foreach ($myPost as $key => $value) 
{
    if($get_magic_quotes_exists == true && get_magic_quotes_gpc() == 1) {
        $value = urlencode(stripslashes($value));
    } else {
        $value = urlencode($value);
    }
    $req .= "&$key=$value";
}

这只是显示数据接收和解析。注意第 7 行,error_log 调用。这就是以上引文的出处。通常,数据很好(使用 Sandbox 也很好)。但是突然之间,Live 站点的日志数据是垃圾。 问题在于没有连接到 PayPal 或返回“已验证”或“无效”,因为没有任何数据需要验证或解析。

以前有人经历过吗?这似乎是一个编码问题,但我已将编码设置为 UTF-8。而且它不像是部分编码问题,其中某些数据是错误的。整件事都很糟糕。 谢谢!

【问题讨论】:

  • 我想知道 PayPal 现在是否强制 Tls12。
  • 我确定只有当我通过登录 PayPal、访问 IPN 历史页面并重新发送以前的 IPN重新发送 IPN 时才会出现无效数据。从沙盒发送的 IPN 和所有 原始 IPN 均已正确发送。我尝试的每一次 重新发送 都会导致无效数据。在我看来,很明显问题出在 PayPal 上。是否只是我的帐户,我不知道。

标签: php paypal-ipn


【解决方案1】:

我联系了 PayPal 技术支持,但他们从未解决此问题。在这一点上,我确定这是他们的一个问题,因为唯一失败的是 IPN 重新发送。拥有它很有用,但没有它我也能生存。

【讨论】:

    猜你喜欢
    • 2018-06-11
    • 2016-04-04
    • 2017-08-05
    • 2021-06-21
    • 2012-07-04
    • 2017-08-01
    • 2017-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多