我正在将 PayPal 结账功能添加到我的网站上,但却在监听器方面出了问题。如果您不熟悉 PayPal IPN 系统,基本上 PayPal 会向您的脚本发送有关交易的消息,您需要添加一些信息并将其发送回去。如果 PayPal 收到正确的答复,它将回复“已验证”,否则它将说“无效”。
我成功完成了第一部分。我的代码能够接收来自 PayPal 的信息,添加额外的信息并将其发送回去。然而,在沙盒中我没有收到任何来自 PayPal 的“已验证”或“无效”的响应。我几乎是从 PayPal 网站上直接复制我的代码,所以我希望这应该是相当简单的事情,如果您能花一分钟时间查看我的代码,也许新的眼睛可以找出我的错误。
以下是代码。没什么特别的,它只是获取信息、调整信息、传递信息并读取响应(要么没有收到,要么没有意识到已经收到)。
我成功完成了第一部分。我的代码能够接收来自 PayPal 的信息,添加额外的信息并将其发送回去。然而,在沙盒中我没有收到任何来自 PayPal 的“已验证”或“无效”的响应。我几乎是从 PayPal 网站上直接复制我的代码,所以我希望这应该是相当简单的事情,如果您能花一分钟时间查看我的代码,也许新的眼睛可以找出我的错误。
以下是代码。没什么特别的,它只是获取信息、调整信息、传递信息并读取响应(要么没有收到,要么没有意识到已经收到)。
<?php
$debug=true;
//Put together postback info
$postback = 'cmd=_notify-validate';
foreach($_POST as $key =>$value){
$postback .= "&$key=$value";
}
// build the header string to post back to PayPal system to validate
$header = "POST /cgi-bin/webscr HTTP/1.1\r\n";
$header .= "Host: www.sandbox.paypal.com\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: " . strlen($postback) . "\r\n\r\n";
$fp = fsockopen ('www.sandbox.paypal.com', 80, $errno, $errstr, 30);//open the connection
if(!$fp){ //no conn
die();
}
//post data back
fputs($fp, $header . $postback);
while(!feof($fp)){
$res=fgets ($fp, 1024);
if((strcmp($res, "VERIFIED")) == 0){ //verified!
if($debug){
$filename = 'debug/debug5_verified.txt'; //create a file telling me we're verified
$filehandle=fopen($filename, 'w');
fwrite($filehandle,'VERIFIED!');
fclose($filehandle);
}
}
}
?>
提前感谢!