Paypal:ipn响应有问题

时间:2014-11-23 15:58:03

标签: php paypal

我可以使用IPN从paypal获得VERIFIED答案 我通过notify_url从PayPal接收POST数据。然后我使用cmd = _notify-validate将数据发送回PayPal。

使用PayPals记录的代码,我使用它将消息发送到PayPal

$header = "POST /cgi-bin/webscr HTTP/1.1\r\n"; // HTTP POST request
$header.= "Content-Type: application/x-www-form-urlencoded\r\n";
$header.= "Host: www.sandbox.paypal.com\r\n";
$header.= "Content-Length: " . strlen($req) . "\r\n";
$header.= "Connection: Close\r\n\r\n";
$fp = fsockopen ('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30);

然后我用这个

if (!$fp) {
    // HTTP ERROR; 
} else {
    var_dump(fputs($fp, $header . $req));
    while (!feof($fp)) {
        $res = stream_get_contents($fp, 1024); 
        if (strcmp ($res, "VERIFIED") == 0) {
            //Transaction verified
        }
    }
}

实际上我有两个$ res(由于while循环)。第一个似乎没有意义,第二个是

55 GMT
Connection: close
Set-Cookie: X-PP-SILOVER=name%3DSANDBOX3.WEB.1%26silo_version%3D880%26app%3Dslingshot%26TIME%3D1273590100; domain=.paypal.com; path=/; Secure; HttpOnly
Set-Cookie: X-PP-SILOVER=; Expires=Thu, 01 Jan 1970 00:00:01 GMT
Set-Cookie: Apache=10.72.128.11.1416751435364358; path=/; expires=Tue, 15-Nov-44 14:03:55 GMT
Vary: Accept-Encoding
Strict-Transport-Security: max-age=14400
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8

8
VERIFIED
0

似乎第一部分是标题,第二部分(8认证0)是真正的反应,但为什么我有这个0和8?通常人们使用

 if (strcmp ($res, "VERIFIED") == 0) {

要检查$ res是否已经过验证...我可以考虑使用类似

之类的回复来验证回复吗?
if(strstr($res,'VERIFIED')) {

有些帮助吗?!?

由于

2 个答案:

答案 0 :(得分:1)

我有完全相同的问题,并且能够以同样的方式解决它。如果我使用PayPal的示例代码,我根本得不到任何回复。

但我在这里遇到过使用cURL的东西: https://github.com/paypal/ipn-code-samples/blob/master/paypal_ipn.php

我需要使用以下说明安装cURL: curl_init() function not working

还可以下载并使用脚本注释中的cacert.pem。

我仍然不确定为什么stream_get_contents()返回标头。如果您已经弄明白了,可以更新吗?

答案 1 :(得分:0)

我和你有同样的问题。我使用strstr($ res,'VERIFIED')来检查通知是否已经过验证。