PayPal IPN 突然收到垃圾

PayPal IPN suddenly receiving garbage

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

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

[2016-07-13 04:46 UTC] Raw data handling_amount=0.00&discount=0.00&insurance_amount=0.00&payer_id=blah blah blah etc.

现在,我刚刚得到这个

[2016-07-13 04:37 UTC] Raw data xæÕ-

从来都不是同一组字符,但总是垃圾(而且只有大约 6 个字符)。

我检查了我的 PayPal 帐户中的编码并将其设置为 UTF-8。没有帮助。 我用完全相同的代码(地址更改为沙盒)使用了 PayPal IPN 模拟器,它运行良好。 我已经尝试了 3 个从 PayPal 的 IPN 历史记录中反感的独立 IPN,包括 1 个没有失败的 IPN。 None 其中有效,但都产生相同的垃圾数据。 我已经尝试将来自 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 或无法返回 'verified' 或 'invalid',因为没有任何数据可供验证或解析。

有没有人遇到过这种情况?这看起来确实像是一个编码问题,但我已将编码设置为 UTF-8。而且它不像是部分编码问题,其中某些数据是错误的。整件事都很糟糕。 谢谢!

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