0

这是我在 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 不再更新我的数据库,这是我对其进行的唯一更改。关于做什么的任何想法?

谢谢!

4

1 回答 1

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)) {

这对我有用。

于 2013-08-26T07:22:58.300 回答