Php IPN验证IPN模拟器无效

Php IPN验证IPN模拟器无效,php,validation,paypal,paypal-ipn,Php,Validation,Paypal,Paypal Ipn,我在沙箱中设置了paypal IPN。 我用这只脚 但我总是得到无效的回应 我用这个贴士 但仍然是无效的回应 我做错了什么 [2016-03-22 16:53欧洲/莫斯科]HTTP验证请求 请求:POST/cgi-bin/webscr HTTP/1.1主机:www.sandbox.paypal.com 接受:/Connection:关闭内容长度:970内容类型: 应用程序/x-www-form-urlencoded 对于IPN有效载荷: cmd=\u notify-validate&payme

我在沙箱中设置了paypal IPN。 我用这只脚

但我总是得到无效的回应

我用这个贴士

但仍然是无效的回应 我做错了什么

[2016-03-22 16:53欧洲/莫斯科]HTTP验证请求 请求:POST/cgi-bin/webscr HTTP/1.1主机:www.sandbox.paypal.com 接受:/Connection:关闭内容长度:970内容类型: 应用程序/x-www-form-urlencoded

对于IPN有效载荷: cmd=\u notify-validate&payment\u type=instant&payment\u date=Tue+Mar+22+2016+16%3A47%3A09+GMT%2B0300+%28RTZ+2+%28%C3%90%C2%B7%C3%90%C2%B8%C3%90%C2%BC%C3%90%C2%29&payment\u状态=已完成和地址状态=已确认和付款人状态=已验证和第一名=约翰和姓氏=史密斯和付款人电子邮件=买家%40payr payr paylsandbox.com和付款人姓名=约翰·斯密h&address\u country=美国+美国&address\u country\u code=美国&address\u zip=95131&address\u state=CA&address\u city=San+Jose&address\u street=123+any+street&business=卖家%40paypalsandbox.com&receiver\u电子邮件=卖家%40paypalsandbox.com&receiver\u id=卖家%40paypalsandbox.com&residence\u country=美国&item\u名称1=某物和项目编号=AK-1234&tax=2.02&mc\U币种=美元&mc_费用=0.44,mc_毛额=12.34,mc_毛额=12.34,mc_搬运=2.06,mc_搬运=1.67,mc_装运=3.02,mc_装运=1.02,txn_类型=cart&txn_id=901876583,通知版本=2.1,定制=xyz123,发票=abc1234,测试ipn=1,验证标志=A2AotZPiNfH J20-.CRF2FDADADADAP452AMRYNQ1BU [2016-03-22 16:53欧洲/莫斯科]验证请求的HTTP响应: HTTP/1.1 200确定日期:2016年3月22日星期二13:53:57 GMT服务器:Apache X-Frame-Options:SAMEORIGIN集Cookie: 2.在中国,一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的六六六六六六六六六六六六六六六六六六六六个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的二六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六六0Now_vYfA6IPQpBAG927oZVlU3iSxa6zj53u-NGER11Z1QE2WLMQO9VWBGOSBGCG2F3AU0FGULQDY-7mdQpFEriGbBF9FknFI_5YTzKo4uFQudUT9Sr4i-LSapRj_4758BPSTEiJ2oHpY-6m1lWuOi; 域名=.paypal.com;路径=/;保护HttpOnly设置Cookie: cookie_check=是;expires=2026年3月20日星期五13:53:58 GMT; 域名=.paypal.com;路径=/;保护HttpOnly设置Cookie: navcmd=\u notify-validate;域名=.paypal.com;路径=/;保护HttpOnly 设置Cookie:navlns=0.0;expires=2018年3月22日星期四13:53:58 GMT; 域名=.paypal.com;路径=/;保护HttpOnly设置Cookie: Apache=10.72.108.11.1458654837796174;路径=/;过期=2014年3月15日星期四 13:53:57 GMT变化:接受编码,用户代理连接:关闭 HTTP_X_PP_AZ_定位器:sandbox.slc Paypal调试Id:8023af87be966 设置Cookie: X-PP-SILOVER=name%3DSANDBOX3.WEB.1%26silo_版本%3D1880%26app%3Dappdispatcher%26TIME%3D1968107862; 域名=.paypal.com;路径=/;保护HttpOnly设置Cookie: X-PP-SILOVER=;Expires=周四,1970年1月1日00:00:01 GMT 严格的传输安全性:最大年龄=14400传输编码:分块 内容类型:text/html;字符集=UTF-8

无效[2016-03-22 16:53欧洲/莫斯科]无效IPN: cmd=\u notify-validate&payment\u type=instant&payment\u date=Tue+Mar+22+2016+16%3A47%3A09+GMT%2B0300+%28RTZ+2+%28%C3%90%C2%B7%C3%90%C2%B8%C3%90%C2%BC%C3%90%C2%29&payment\u状态=已完成和地址状态=已确认和付款人状态=已验证和第一名=约翰和姓氏=史密斯和付款人电子邮件=买家%40payr payr paylsandbox.com和付款人姓名=约翰·斯密h&address\u country=美国+美国&address\u country\u code=美国&address\u zip=95131&address\u state=CA&address\u city=San+Jose&address\u street=123+any+street&business=卖家%40paypalsandbox.com&receiver\u电子邮件=卖家%40paypalsandbox.com&receiver\u id=卖家%40paypalsandbox.com&residence\u country=美国&item\u名称1=某物和项目编号=AK-1234&tax=2.02&mc\U币种=美元&mc_费用=0.44,mc_毛额=12.34,mc_毛额=12.34,mc_搬运=2.06,mc_搬运=1.67,mc_装运=3.02,mc_装运=1.02,txn_类型=cart&txn_id=901876583,通知版本=2.1,定制=xyz123,发票=abc1234,测试ipn=1,验证标志=A2AotZPiNfH J20-.CRF2FDADADADAP452AMRYNQ1BU 贝宝回复:


在IPN PHP脚本中,尝试将所有
urlencode
更改为
rawurlencode
urldecode
更改为
rawurldecode
,尝试使用sandbox.paypal中的两个假帐户(1个个人,1个企业),以检查已验证/无效的响应,而不是IPN模拟器

你可以在那里买到,然后给他们假信用卡玩


我从未从IPN模拟器得到过验证,但在通过沙箱测试时总是得到验证。

我终于找到了此查询的更新(2016年8月5日)工作答案。您可以将此代码用作Sandbox或Live的最终IPN。考虑到以下因素:

  • 请确保将IPN侦听器置于->我的销售工具->即时付款通知部分
  • 不要在沙箱中使用IPN模拟器,它将始终返回无效
  • 创建并使用一个实际的沙盒按钮,但不要将您的IPN侦听器放在返回页面上,该页面显示“当客户完成签出时,将他们带到该URL”
  • 就这些。我希望这会有所帮助

    以下是工作代码:

    <?php
    $post_data = file_get_contents('php://input');
    $post_array = explode('&', $post_data);
    $dataFromPayPal = array();
    foreach ($post_array as $keyval) {
        $keyval = explode ('=', $keyval);
        if (count($keyval) == 2)
            $dataFromPayPal[$keyval[0]] = urldecode($keyval[1]);
    }
    
    $req = 'cmd=_notify-validate';
    if(function_exists('get_magic_quotes_gpc')) {
        $get_magic_quotes_exists = true;
    }
    foreach ($dataFromPayPal 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('https://www.sandbox.paypal.com/cgi-bin/webscr');
    //use https://www.paypal.com/cgi-bin/webscr in live environment.
    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_VERIFYHOST, 2);
    curl_setopt($ch, CURLOPT_FORBID_REUSE, 1);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection: Close'));
    
    if( !($res = curl_exec($ch)) ) {
        curl_close($ch);
        exit;
    }
    curl_close($ch);
    
    
    
    if (strcmp ($res, "INVALID") == 0) {
            echo "INVALID";
    }
    else if (strcmp ($res, "VERIFIED") == 0) {
            echo "VALID";
    }
    
    ?>