犯了一个新错误让我再试一次。
该网站是非营利性网站,几年前我添加了一个 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吗?我在那里也一无所获-为沙箱设置。感谢您提供有关在哪里查看的任何建议。