我想验证来自贝宝的 IPN 响应,但由于某种原因我无法读取响应。
这是我正在尝试使用的代码:
$fp = fsockopen ('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30);
if(!$fp)die();
fputs($fp, $header . $postback);
$res=stream_get_contents($fp); #this triggers 500 error
它确实打开了一个连接,确实fputs
,但是在最后一行它挂断了,并且在相当长的等待返回之后500 error
。
有什么想法有什么问题吗?
注意:即使我评论该fputs
行,也会发生完全相同的事情。
标题:
$postback='cmd=_notify-validate&'.http_build_query($_POST);
// 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";
编辑
我尝试使用 curl,但它总是让我得到一个空的响应:
$ch = curl_init( 'https://www.sandbox.paypal.com/cgi-bin/webscr' );
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1) ;
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postback);
$strCurlResult = curl_exec($ch);
curl_close( $ch );
echo $strCurlResult;
上面的代码什么也没输出。