0

犯了一个新错误让我再试一次。

该网站是非营利性网站,几年前我添加了一个 PayPal“捐赠”页面;作为购物车完成(3 种类型的捐赠和/或会员资格)。PP 返回到一个 php 脚本,该脚本使用 PDT 数据构建感谢页面并为双重选择邮件列表设置 cookie。IPN 发送感谢电子邮件、选择加入电子邮件、数据库等工作正常。

现在向机票预订页面添加 PayPal 选项。同样,一个调用 PayPal 的购物车似乎在沙箱中运行良好;PayPal 屏幕符合预期,两封 foo 电子邮件看起来正确。我传递了一个不同的返回 URL,该 URL 被调用,但手上的炸弹震动了。该代码是从先前的工作中删减并基于 PayPal PDT 示例的。

    // read the post from PayPal system and add 'cmd'
    $req = 'cmd=_notify-synch';
    $header = "";

    $tx_token = $_GET['tx'];

    $req .= "&tx=$tx_token&at=$auth_token";  // see header for def of auth_token
    // post back to PayPal system to validate
    $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";
    // If possible, securely post back to paypal using HTTPS
    // Your PHP server will need to be SSL enabled

    $fp = fsockopen ($socket, $port, $errno, $errstr, 30); // see header

    if (!$fp) 
    {
       // HTTP ERROR
       mail($email, "PDT Error", "fsockopen error " . $errno . ":   " . $errstr);
    } 
    else 
    {

   fputs ($fp, $header . $req);
   // read the body data
   $res = '';
   $headerdone = false;
   while (!feof($fp)) 
   {
      $line = fgets ($fp, 1024);
    echo $line . "<br>";
      if (strcmp($line, "\r\n") == 0) 
      {
         // read the header
         $headerdone = true;
      }
      else if ($headerdone)
      {
         // header has been read. now read the contents
         $res .= $line;
      }
   }

添加回声的结果是:

找到 HTTP/1.0 302

地点:https ://www.sandbox.paypal.com

服务器:大IP

连接:关闭

内容长度:0

var $auth_token、$socket 和 $port 设置了“if ($test)”以在沙盒和 live 之间切换。显然,使用 0 长度的有效负载,没有其他方法可以工作。

我在这里读到了关于新的 Auth_token 的内容。还有其他一些关于测试成功的细节我还没有得到,没有数据可以玩..

我不记得了,沙盒会触发IPN吗?我在那里也一无所获-为沙箱设置。感谢您提供有关在哪里查看的任何建议。

4

0 回答 0