为什么实施HTTP / 1.1会破坏我的IPN脚本?

时间:2012-12-11 21:03:49

标签: paypal-ipn http-1.1

以下是我在PHP脚本中的原始代码:

$header = "POST /cgi-bin/webscr HTTP/1.0\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: " . strlen($req) . "\r\n\r\n";

我从Paypal收到一封电子邮件,说我需要升级我的IPN脚本,以便它使用HTTP / 1.1。所以我根据他们的指示改变了我的代码:

$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 .="Connection: close\r\n";

付款已经过去了,但IPN不再更新我的数据库,这是我对它做出的唯一改变。关于该怎么做的任何想法?

谢谢!

1 个答案:

答案 0 :(得分:0)

是。我刚刚与此作斗争。对我有用的是删除连接关闭标题,并为PP的响应添加修剪。以下是标题:

$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";

这是fsockopen:

$fp = fsockopen ('ssl://www.paypal.com', 443, $errno, $errstr, 30);

以下是来自PP的回复修剪:

if (!$fp) {
// HTTP ERROR
  error_mail("Could not open socket");
//
} else {
  fputs ($fp, $header . $req);
  while (!feof($fp)) {
    $res = trim(fgets ($fp, 1024));
    }
//
// check the payment_status is Completed
// check that receiver_email is your Primary PayPal email
//
  if ((strcmp ($res, "VERIFIED") == 0) && ($payment_status == "Completed") && ($receiver_email == $valid_receiver_email)) {

这对我有用。