这种无法解释的内容可能会影响或影响数千名网站管理员。
问题是Paypal没有对此请求作出回应。下面是我使用的示例代码以及程序员的评论:
“PayPal根本没有对此请求作出任何回复,空字符串来自它。您可以询问PayPal团队,是否应添加”Host“和”HTTP / 1.1“之外的任何内容以正确处理响应可能是'cmd'命令应该有另一个值吗? 我的期望是,PayPal将仅在2013年2月开放HTTP / 1.1协议,因为他们在电子邮件中说明了这一点。我不确定相同的脚本和主机如何处理不同的协议。该脚本现在无法使用HTTP / 1.1和我们存档的代码,原因可能是在PayPal方面。 我正在关注PayPal如何查询IPN脚本,并且当HTTP 1.1设置时,它似乎进入某种循环。你仍然可以在ipnlogz.txt中看到它 - '07%3A39%3A41' - 即我订单的'07:39:41'日期 - 它重复了5次!为什么?谁知道... 它只意味着PayPal试图IPN这个脚本5次,但没有成功。只有当我将HTTP更新为1.0并重新上传脚本时,才会出现来自PayPal的“已验证”响应。在此之后,PayPal仍然在查询它。 似乎当HTTP = 1.1时,PayPal正在正确地获取所有内容,但没有正确响应;然后由于某种原因回来为同一笔付款创建另一个回复。使用HTTP 1.0,它就像一朵花:一个请求,一个响应,一切正常。我不知道它有什么问题......
聚苯乙烯。我们不是在谈论'无效'回复。 “INVALID”响应实际上是成功的一部分 - 但在HTTP 1.1的情况下,PayPal根本不提供任何响应,它是一个空字符串。“
<?php
$req = 'cmd=_notify-validate';
$r='';
foreach ($_POST as $key => $value) {
$value = urlencode(stripslashes($value));
$req .= "&$key=$value";
$r.="{$key}: {$value}\n";
}
// post back to PayPal system to validate
$header .= "POST /cgi-bin/webscr HTTP/1.1\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Host: www.paypal.com\r\n";
$header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
$fp = fsockopen ('www.paypal.com', 80, $errno, $errstr, 30);
#I also tried: $fp =fsockopen('ssl://www.paypal.com',443,$err_num,$err_str,30);
if (!$fp) {
$r.="----\nHTTP ERROR\n";
// HTTP ERROR
} else {
$r.="----\nReceived IPN request\n";
fputs ($fp, $header . $req);
while (!feof($fp)) {
$res = fgets ($fp, 1024);
}
fclose ($fp);
if (strcmp ($res, 'VERIFIED') == 0) {
$proceed=TRUE;
}
else{
$proceed=FALSE;
}
}
?>
PS。这是我们使用的脚本的notify_url
部分:
<input type="hidden" name="notify_url" value="{$main_url}/index.php?action=ipn&user_id={$user_id}" />
当它在Sandbox中测试时,它正在工作..
答案 0 :(得分:2)
在上面的代码中,您可以替换:
if (strcmp ($res, "VERIFIED") == 0) {
使用
if (strcmp (trim($res), "VERIFIED") == 0) {
唯一的区别是修剪
答案 1 :(得分:1)
我发现了http://www.justmyusecase.com/2012/09/subject-action-required-update-your.html
看起来你只需要修剪“已验证”的字符串。
答案 2 :(得分:1)
我添加了以下行,这很好用
$ res = trim($ res);
参考链接
答案 3 :(得分:0)
自2012年12月中旬以来,我们没有从PayPal收到任何IPN。 Web服务器访问或错误日志中没有条目表明PayPal从那时起尝试发送IPN。
所以今天我接到了德国PayPal支持的电话(在等候线上超过2小时后 - 我终于到达了某人)。
他们向我确认,某些帐户存在问题(没有发送IPN)并且他们尝试修复它。 因此,在您尝试更改脚本之前,请先注意服务器日志文件!
答案 4 :(得分:0)
好吧,我和我的IPN有类似的东西
尝试在PayPal上更改IPN编码
我的accont =&gt;我的个人资料=&gt;我的销售工具=&gt;语言编码
答案 5 :(得分:-1)
我也有这个问题,PP拒绝承认存在问题。我不知道该怎么办,但客户会在四个月内生气。
你应该做的一个改变是:
$header .= "POST /cgi-bin/webscr HTTP/1.1\r\n"; // wrong
$header .= "POST cgi-bin/webscr HTTP/1.1\r\n"; // right (according to PP)