WordPress站点上的PayPal IPN停止工作

时间:2014-01-22 19:36:11

标签: wordpress paypal paypal-ipn

如果这个IPN脚本工作正常,直到昨天(今天早些时候)没有变化......以下是核心PayPal代码的关键部分,我希望有人可以查看并告诉我是否有任何问题?我的Wordpress代码似乎在它自己的工作正常(所以我排除它)... Paypal是否再次更改了他们的版本(1.0到1.1 ??)或URL或什么?

$req = 'cmd=_notify-validate';
foreach ($_POST as $key => $value) {
$value = urlencode(stripslashes($value));
$value = preg_replace('/(.*[^%^0^D])(%0A)(.*)/i','${1}%0D%0A${3}',$value);// IPN fix
$req .= "&$key=$value";
}
// 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 .= "Content-Length: " . strlen($req) . "\r\n\r\n";
$fp = fsockopen ('www.paypal.com', 80, $errno, $errstr, 30);
if (!$fp) {
 echo $errstr . ' (' . $errno . ')';
 $mail_From = 'From: IPN@tester.com';
 $mail_To = 'charlwoode@gmail.com';
 $mail_Subject = 'HTTP ERROR';
 $mail_Body = $errstr;//error string from fsockopen
 mail($mail_To, $mail_Subject, $mail_Body, $mail_From); 
 $fh = fopen("logipn.txt", 'a');//open file and create if does not exist
 fwrite($fh, "\r\n/////////////////////////////////////////\r\n HTTP ERROR \r\n");//Just for spacing in log file
 fwrite($fh, $errstr);//write data
 fclose($fh);//close file
}
elseif
{
  fputs ($fp, $header . $req);
  while (!feof($fp)) {
    $res = fgets ($fp, 1024);
    $res=trim($res);
    if (strcmp ($res, "VERIFIED") == 0) {
      $item_name = $_POST['item_name'];
      $item_number = $_POST['item_number'];
      $aid= $_POST['custom'];  
      $payment_status = $_POST['payment_status'];
      $payment_amount = $_POST['mc_gross'];         //full amount of payment. payment_gross in US
      $payment_currency = $_POST['mc_currency'];
      $txn_id = $_POST['txn_id'];                   //unique transaction id
      $receiver_email = $_POST['receiver_email'];
      $payer_email = $_POST['payer_email'];
//do stuff
      }
else {
//do stuff
}

2 个答案:

答案 0 :(得分:0)

啊......我的标题过时了 - 这些都有效:

$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"; // NEW
$header .= "Connection: close\r\n"; // NEW
$header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
// OLD VERSION THAT DIDN"T WORK $fp = fsockopen ('www.paypal.com', 80, $errno, $errstr, 30);
$fp = fsockopen ('ssl://www.paypal.com', 443, $errno, $errstr, 30); // NEW CORRECT VERSION

另外别忘了修剪!

while (!feof($fp)) {
$res = fgets ($fp, 1024);
$res=trim($res);

答案 1 :(得分:0)

我在过去几天遇到了同样的问题,并试图在Paypal网站上进行研究。他们现在为IPN提供的样本编码看起来与上面的完全不同(我正在使用它)。

我将我的一个IPN页面修改为上面的建议(我已经有了额外的标题,但没有ssl:或44​​3端口或修剪代码)。

今天早上虽然所有的IPN页面都在重新运行 - 不仅仅是修改后的页面 - 所以看起来PayPal已经再次播放了!

我无法在PayPal网站上找到此编码的链接,以查看是否需要进行任何其他更改。