Paypal IPN响应$ res为空

时间:2014-03-30 16:07:57

标签: php paypal paypal-ipn paypal-sandbox

这是我第一次使用Paypal处理付款。我已经设置了一个开发者帐户,创建了一些测试商家/买家帐户并成功创建了一个我发送到paypal沙箱的购物车。在这里,使用我的一个买家帐户,我可以再次成功完成购买。在paypal的帐户历史记录中,它显示交易已完成。一切都好到现在。

问题出现在返回网址中,我获得了IPN。这是我从paypal网站复制的代码。

<?php

    include($_SERVER['WROOT'].'core/init.php');

    //Put together postback info

    $postback = 'cmd=_notify-validate';

    foreach($_POST as $key =>$value){
        $postback .= "&$key=$value";
    }

    // EMAIL $postback

    // 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";

    // also tried with $fp = fsockopen ('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30);
    $fp = fsockopen ('www.sandbox.paypal.com', 80, $errno, $errstr, 30);

    if(!$fp){ //no conn
        die();
    }

    //post data back
    fputs($fp, $header . $postback);

    while(!feof($fp)){

        $res=stream_get_contents($fp, 1024);

        if((strcmp($res, "VERIFIED")) == 0){
                    // EMAIL with a success notification 
            // update the database - THIS IS ONLY A SMALL TEST TO SEE IF THE TRANSACTION IS SUCCESSFUL -
            $new = $dbh->prepare(" ISNERT INTO orders(txn_id) VALUES(:txn_id) ");
            $new->execute(array( 'txn_id' => $_POST['txn_id'] ));

        } else if ( strcmp ($res, "INVALID") == 0 ) {
               // EMAIL with a error notification
               // LOG THE ERROR TO A FILE
            }
    }

?>

好的,首先我不做任何检查,看看电子邮件,总金额和其他参数是否有效,这是我在解决这个问题后会做的事情。

无论如何,在买家支付后,我的数据库应该更新,但事实并非如此。

我做了什么?

首先,我会在创建$postback变量后立即通过电子邮件将其发送给我。我收到了大量回复的电子邮件,所有数据都是正确的。

$res变量不是VERIFIEDINVALID,因此fsockopen()之后的任何内容都不起作用。

正如我所说,paypal网站上的付款是成功的。文档相当差,我无法得到答案。

我想添加的一件事是我的网站没有SSL证书,但我不存储任何客户数据,所有内容都在安全的paypal网站上处理。我需要SSL证书吗?

最后一件事。我尝试使用此类https://github.com/Quixotix/PHP-PayPal-IPN,错误日志消息为Invalid response status: 302

0 个答案:

没有答案