use*_*084 0 php paypal fgets feof paypal-ipn
我的Paypal IPN监听器脚本问题已经有几天了.对于那些不熟悉Paypal IPN系统的人来说,Paypal基本上会向您的脚本发送一条有关交易的消息,您可以通过添加几个位来发回该消息.如果Paypal收到正确的答复,它将回复'已验证',如果没有,它会说'无效'.
我最初认为我遇到的问题是'fsockopen'命令:$ fp = fsockopen('ssl://sandbox.paypal.com',443,$ errno,$ errstr,30); 但是,将我的所有代码简化为这一行,它似乎连接好了.问题在于'feof'和'fgets'命令.脚本挂断了,我不知道为什么.我基本上复制了Paypal IPN Listener网站上建议的代码,所以我认为它会起作用!如果你能帮助我理解为什么feof或fgets导致它失速,那么你的帮助将非常感激.
这是完整的脚本:
$postback = 'cmd=_notify-validate'; //doesn't matter what these include for now
$header='abc';
//Script has been activated, create debug
$filename = 'debug/debug1_script.txt';
$filehandle=fopen($filename, 'w');
fwrite($filehandle,$postback);
fclose($filehandle);
$fp = fsockopen ('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30);//open the connection
//no connection, create debug file
if(!$fp){
$filename = 'debug/debug2_fpfail.txt';
$filehandle=fopen($filename, 'w');
fwrite($filehandle, $errstr.'('.$errno.')');
fclose($filehandle);
die();
}
//post data back
fputs($fp, $header . $postback);
//create debug file
$filename = 'debug/debug3_postback.txt';
$filehandle=fopen($filename, 'w');
fwrite($filehandle, $header.$postback);
fclose($filehandle);
//script hangs with either of the two following lines included
while(!feof($fp)){
$res=fgets($fp,1024);
}
Run Code Online (Sandbox Code Playgroud)
提前谢谢了!
所以我认为我找到了一个解决方案,而不是使用
while(!feof())
Run Code Online (Sandbox Code Playgroud)
和
fgets()
Run Code Online (Sandbox Code Playgroud)
组合,我用过这个:
$res=stream_get_contents($fp, 1024);
Run Code Online (Sandbox Code Playgroud)
第一次工作!现在我可以继续我的生活.