这种无法解释的可能会影响或将影响成千上万的网站管理员。
问题是 Paypal 根本没有对此请求作出响应。以下是我使用的示例代码以及我的程序员的评论:
我的订单日期 - 重复了 5 次!为什么?谁知道...这仅意味着 PayPal 尝试对该脚本进行 5 次 IPN,但均未成功。仅当我将 HTTP 更新为 1.0 并重新上传脚本时,PayPal 才会出现“已验证”响应。在那之后,贝宝仍在查询它。似乎当 HTTP = 1.1 时,PayPal 正在正确获取所有内容,但没有正确响应;然后由于某种原因返回为同一付款创建另一个响应。使用 HTTP 1.0,一切都像一朵花:一个请求,一个响应,一切正常。我不知道它有什么问题... 0 并重新上传脚本。在那之后,贝宝仍在查询它。似乎当 HTTP = 1.1 时,PayPal 正在正确获取所有内容,但没有正确响应;然后由于某种原因返回为同一付款创建另一个响应。使用 HTTP 1.0,一切都像一朵花:一个请求,一个响应,一切正常。我不知道它有什么问题... 0 并重新上传脚本。在那之后,贝宝仍在查询它。似乎当 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}" />
当它在沙盒中测试时它正在工作..