use*_*084 10 php paypal paypal-sandbox paypal-ipn
我正在将paypal结账放到我的网站上,但是我和听众一起倒下了.对于那些不熟悉Paypal IPN系统的人来说,Paypal基本上会向您的脚本发送一条有关交易的消息,您可以通过添加几个位来发回该消息.如果Paypal收到正确的答复,它将回复'已验证',如果没有,它会说'无效'.
第一位我成功了.我的代码能够从paypal接收信息,添加额外内容并将其发回.但是,Sandbox没有回复说"已验证"或"无效".我几乎从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);
}
}
}
?>
Run Code Online (Sandbox Code Playgroud)
提前致谢!
pre*_*mer 11
切换到使用HTTPS网址,我不知道什么时候,但最近我的所有测试脚本都开始在普通的HTTP版本上失败.他们看起来正在迁移.
我使用的是相同的paypal示例代码:
$fp = fsockopen ('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30);
Run Code Online (Sandbox Code Playgroud)
要么
$fp = fsockopen ('ssl://www.paypal.com', 443, $errno, $errstr, 30);
Run Code Online (Sandbox Code Playgroud)
所以我想我找到了一个解决方案.事实证明连接到ssl:// sandbox ....没有问题,它实际上正在检索答案.代码被挂断了
while(!feof($fp)){
$res=fgets($fp,1024);
}
Run Code Online (Sandbox Code Playgroud)
位.我所做的只是替换为:
$res=stream_get_contents($fp, 1024);
Run Code Online (Sandbox Code Playgroud)
它第一次工作!现在我可以继续我的生活.再次感谢您对此的所有帮助.