PayPal IPN突然收到垃圾

时间:2016-07-13 14:34:41

标签: php paypal-ipn

我有一个PayPal IPN处理程序已经工作超过5年(随着时间的推移会有各种更新)。突然昨天我停止接受正常的'&'和'='分隔数据字符串并开始获得~6个垃圾非ascii字符。

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

  

[2016-07-13 04:46 UTC]原始数据handling_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个独立的IPN,这些IPN在PayPal的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。而且这不是一个部分编码问题,其中一些数据是坏的。整件事情都很糟糕。 谢谢!

1 个答案:

答案 0 :(得分:0)

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