使用MAMP测试沙盒中的IPN

时间:2019-06-07 20:39:53

标签: php paypal paypal-ipn sandbox

我正在使用MAMP通过PayPal沙盒进行开发和测试,从而获得了无效的IPN回报。

我已经审查了几十个与此问题相关的最新帖子,但没有找到成功的建议。

我的MAMP设置通过了PayPal测试,符合TLS 1.2和HTTP / 1.1的要求 我将2019年5月的casert.pem软件包与侦听器放在同一目录中。

“立即付款”按钮中的所有交易变量都是整数,money_format或urlencoded文本。 交易已完成。自从我开始此测试以来,沙盒IPN历史记录一直不可用,因此HTTP代码和其他数据不可用。 (其他人可以访问沙箱中的IPN历史记录吗?)

设置本质上与使用SSL在生产站点上运行的实时应用程序相同。因此,明显的区别是:MAMP而不是SSL(notify_url和返回URL是http而不是https)。但是,几个月前,我在MAMP中运行了类似的代码,没有任何问题。

通过在浏览器中打开侦听器文件并在收到正确的“返回” PDT数据后刷新它,可以快速解决此错误。实时发布时,代码会发送有关错误的电子邮件。

我的代码(保留了IPN验证后运行的应用程序代码)几乎是示例代码的副本。

    <?php
    $paypal_url = “'https://www.sandbox.paypal.com/cgi-bin/webscr';

    $raw_post_data = file_get_contents('php://input');
    $raw_post_array = explode('&', $raw_post_data);
    $myPost = array();
    foreach ($raw_post_array as $keyval) {
        $keyval = explode ('=', $keyval);
        if (count($keyval) == 2)
             $myPost[$keyval[0]] = urldecode($keyval[1]);
    }

    // read the post from PayPal system and add 'cmd'
    $req = 'cmd=_notify-validate';
    if(function_exists('get_magic_quotes_gpc')) {
         $get_magic_quotes_exists = true;
    } 
    foreach ($myPost as $key => $value) {        
         if($get_magic_quotes_exists == true && get_magic_quotes_gpc() == 1) { 
                    $value = urlencode(stripslashes($value)); 
         } else {
                    $value = urlencode($value);
         }
         $req .= "&$key=$value";
    }

    $ch = curl_init($paypal_url);
    curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $req);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
    curl_setopt($ch, CURLOPT_CAINFO,  dirname(__FILE__) . '/cacert.pem');
    curl_setopt($ch, CURLOPT_FORBID_REUSE, 1);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection: Close'));

    if( !($res = curl_exec($ch)) ) {
        echo "curl_error($ch)";
        exit:
    }

    if (strcmp ($res, "VERIFIED") == 0) {
        echo "VERIFIED";
    } elseif (strcmp ($res, “INVALID”) == 0) {
        echo “INVALID”;
    }
    else {
        echo “NO IPN”;
    }
    ?>  

0 个答案:

没有答案