PayPal API Listener网站付款标准URI

时间:2010-08-05 12:06:06

标签: uri paypal

PayPal IPN指南文档清楚地说明了

  1. 将请求发布到www.paypal.com或www.sandbox.paypal.com,具体取决于您是否在沙盒中上线或测试您的听众。

  2. 等待PayPal的回复,该回复是VERIFIED或INVALID。

  3. 好吧,我试过了(Sandbox版本),响应是一个完整的HTML页面。

    所以我看了https://www.paypal.com/us/cgi-bin/webscr?cmd=p/pdn/ipn-codesamples-pop-outside#php处的代码示例,发现建议的URI是/ cgi-bin / webscr。我试过了,仍然有一个完整的HTML页面。 DOCTYPE和一切。

    我做错了什么?它只是我,还是PayPal文档不必要地混淆了?

    编辑以添加:

    我已尝试将网址重置为我控制的网页,只会转出$_GET$_POST$_SERVER数据,我可以看到我发送的正确的信息。 (我现在将信息放在$_GET字符串中,正如Alex K所建议的那样,而不是在POST主体中,但我仍然将其作为POST请求发送。)

    我仍然从沙盒中获得HTML回复:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html lang="en">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <!--
             Script info: script: webscr, cmd: notify-validate, template: p/wel/sandbox-outside, date: Jul 28, 2010 17:09:26 PDT; country: US, language: en_US, xslt server: 
            web version: 64.0-1430643 branch: UPR_641_int
            content version: -
            pexml version: 64.0-1434686
            page XSL: Merchant/default/en_US/homepage/SandBox-outside.xsl
           hostname : DOxxcnld8je7pj0zYHT0DtWhtm4QxXx1WVQNKYCmQt0
             rlogid : DOxxcnld8je7pj0zYHT0Do0AouceG%2b49A2fz8FNwI82Hi9r1Lzz7MA%3d%3d_12a42bb271e
    -->
    <title>Welcome - PayPal</title>
    <!--googleoff: all-->
    <meta name="description" content="PayPal is the safer, easier way to pay online without revealing your credit card number.">
    <!--googleon: all-->
    <meta http-equiv="X-UA-Compatible" content="IE=8">
    <link media="screen" rel="stylesheet" type="text/css" href="https://www.sandbox.paypal.com/WEBSCR-640-20100726-1/css/core/xptdev.css">
    <link media="screen" rel="stylesheet" type="text/css" href="https://www.sandbox.paypal.com/WEBSCR-640-20100726-1/css/core/global.css">
    <!--[if IE 8]><link media="screen" rel="stylesheet" type="text/css" href="https://www.sandbox.paypal.com/WEBSCR-640-20100726-1/css/browsers/ie8.css"><![endif]-->
    
    <!--[if IE 7]><link media="screen" rel="stylesheet" type="text/css" href="https://www.sandbox.paypal.com/WEBSCR-640-20100726-1/css/browsers/ie7.css"><![endif]-->
    
    <!--[if lte IE 6]><link media="screen" rel="stylesheet" type="text/css" href="https://www.sandbox.paypal.com/WEBSCR-640-20100726-1/css/browsers/ie6.css"><![endif]-->
    <link rel="stylesheet" type="text/css" href="https://www.sandbox.paypal.com/WEBSCR-640-20100726-1/css/sandbox.css">
    <link media="print" rel="stylesheet" type="text/css" href="https://www.sandbox.paypal.com/WEBSCR-640-20100726-1/css/core/print.css">
    <script type="text/javascript">
    if (parent.frames.length > 0){
        top.location.replace(document.location);
    }</script><script type="text/javascript" src="https://www.sandbox.paypal.com/WEBSCR-640-20100726-1/js/lib/min/global.js"></script><script type="text/javascript">PAYPAL.util.lazyLoadRoot = 'https://www.sandbox.paypal.com/WEBSCR-640-20100726-1';</script><link rel="shortcut icon" href="https://www.sandbox.paypal.com/WEBSCR-640-20100726-1/en_US/i/icon/pp_favicon_x.ico">
    <link rel="apple-touch-icon" href="https://www.sandbox.paypal.com/WEBSCR-640-20100726-1/en_US/i/pui/apple-touch-icon.png">
    </head>
    <body class="xptSandbox">
    <noscript><p class="nonjsAlert">NOTE: Many features on the PayPal Web site require Javascript and cookies. You can enable both via your browser's preference settings.</p></noscript>
    <div class="" id="page">
    <div id="content">
    <div id="headline">
    <h2 class="accessAid">Welcome</h2>
    </div>
    <div id="messageBox"></div>
    <div id="main"><div class="layout1">
    <p><img src="https://www.sandbox.paypal.com/WEBSCR-640-20100726-1/en_US/i/logo/logo_sandbox_clr_289x39.gif" border="0" alt=""></p>
    <p align="center"><strong>Please login to use the <a href="https://developer.paypal.com/">PayPal Sandbox</a> features.</strong></p>
    </div></div>
    </div>
    <div id="navFull"><ul>
    <li class="active">
    <a href="https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_home-general&amp;nav=0" class="scTrack:SRD:Nav:L5">Home</a><ul>
    <li class="active">
    <a href="https://personal.paypal.com/cgi-bin/marketingweb?cmd=_render-content&amp;content_ID=marketing_us/How_does_PayPal_work&amp;nav=0.0" class="scTrack:SRD:Nav:W8">How PayPal Works</a><ul>
    <li><a href="https://personal.paypal.com/cgi-bin/marketingweb?cmd=_render-content&amp;content_ID=marketing_us/How_does_PayPal_work&amp;nav=0.0.0" class="scTrack:SRD:Nav:YX">What is PayPal</a></li>
    <li><a href="https://personal.paypal.com/cgi-bin/marketingweb?cmd=_render-content&amp;content_ID=marketing_us/Sign_Up_for_PayPal&amp;nav=0.0.1" class="scTrack:SRD:Nav:YY">Getting Started</a></li>
    <li><a href="https://personal.paypal.com/cgi-bin/marketingweb?cmd=_render-content&amp;content_ID=marketing_us/My_PayPal_Account&amp;nav=0.0.2" class="scTrack:SRD:Nav:YZ">Managing Your Account</a></li>
    <li><a href="https://personal.paypal.com/cgi-bin/marketingweb?cmd=_render-content&amp;content_ID=marketing_us/How_To_Use_PayPal&amp;nav=0.0.3" class="scTrack:SRD:Nav:W2">Great Ways to Use PayPal</a></li>
    <li><a href="https://personal.paypal.com/cgi-bin/marketingweb?cmd=_render-content&amp;content_ID=marketing_us/PayPal_FAQ&amp;nav=0.0.4" class="scTrack:SRD:Nav:Z0">Top Ten Things to Know About PayPal</a></li>
    <li><a href="https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_display-fees-outside&amp;nav=0.0.5" class="scTrack:SRD:Nav:y80">How Much It Costs</a></li>
    <li><a href="https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=xpt/Marketing/general/PayPalAccountTypes-outside&amp;nav=0.0.6" class="scTrack:SRD:Nav:Z8">Account Types</a></li>
    </ul>
    </li>
    <li>
    <a href="https://personal.paypal.com/cgi-bin/marketingweb?cmd=_render-content&amp;content_ID=marketing_us/pay_online&amp;nav=0.1" class="scTrack:SRD:Nav:W3">Pay Online</a><ul>
    <li><a href="https://www.paypal-shopping.com/" class="scTrack:SRD:Nav:Z2">Great Deals</a></li>
    <li><a href="https://www.paypal-shopping.com/shop-stores.html" class="scTrack:SRD:Nav:Z3">PayPal Store Directory</a></li>
    <li><a href="https://personal.paypal.com/cgi-bin/marketingweb?cmd=_render-content&amp;content_ID=marketing_us/paypal_credit_card&amp;nav=0.1.2" class="scTrack:SRD:Nav:W4">PayPal Plus MasterCard</a></li>
    <li><a href="https://personal.paypal.com/us/cgi-bin/?&amp;cmd=_render-content&amp;content_ID=marketing_us/mobile_payments#payonline&amp;nav=0.1.3" class="scTrack:SRD:Nav:L6">Shop Via Mobile</a></li>
    </ul>
    </li>
    <li>
    <a href="https://personal.paypal.com/cgi-bin/marketingweb?cmd=_render-content&amp;content_ID=marketing_us/send_money&amp;nav=0.2" class="scTrack:SRD:Nav:N9">Send Money</a><ul>
    <li><a href="https://personal.paypal.com/cgi-bin/marketingweb?cmd=_render-content&amp;content_ID=marketing_us/send_money&amp;nav=0.2.0" class="scTrack:SRD:Nav:O1">Send Money Online</a></li>
    <li><a href="https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=xpt/Marketing_CommandDriven/general/International_Money_Transfer-outside&amp;nav=0.2.1" class="scTrack:SRD:Nav:O2">Internationally</a></li>
    <li><a href="https://student.paypal.com/us/cgi-bin/marketingweb?cmd=_render-content&amp;content_ID=marketing_us/student_accounts&amp;nav=0.2.2" class="scTrack:SRD:Nav:MR">To Your Teen</a></li>
    <li><a href="https://personal.paypal.com/us/cgi-bin/?&amp;cmd=_render-content&amp;content_ID=marketing_us/mobile_payments#sendmoney&amp;nav=0.2.3" class="scTrack:SRD:Nav:Y4">Via Your Mobile</a></li>
    </ul>
    </li>
    <li>
    <a href="https://personal.paypal.com/cgi-bin/marketingweb?cmd=_render-content&amp;content_ID=marketing_us/receive_money&amp;nav=0.3" class="scTrack:SRD:Nav:Y5">Get Paid</a><ul>
    <li><a href="https://personal.paypal.com/cgi-bin/marketingweb?cmd=_render-content&amp;content_ID=marketing_us/sell_on_ebay&amp;nav=0.3.0" class="scTrack:SRD:Nav:Y6">Sell Online</a></li>
    <li><a href="https://merchant.paypal.com/cgi-bin/marketingweb?cmd=_render-content&amp;content_ID=merchant/wp_standard&amp;nav=0.3.1" class="scTrack:SRD:Nav:Y7">Accept Credit Cards</a></li>
    <li><a href="https://personal.paypal.com/cgi-bin/marketingweb?cmd=_render-content&amp;content_ID=marketing_us/request_money&amp;nav=0.3.2" class="scTrack:SRD:Nav:P6">Request Money</a></li>
    <li><a href="https://www.paypal.com/nonprofit" class="scTrack:SRD:Nav:P7">Accept Donations</a></li>
    </ul>
    </li>
    <li><a href="https://personal.paypal.com/cgi-bin/marketingweb?cmd=_render-content&amp;content_ID=marketing_us/products_services&amp;nav=0.4" class="scTrack:SRD:Nav:P8">Products &amp; Services</a></li>
    </ul>
    </li>
    <li><a href="https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_home-customer&amp;nav=1" class="scTrack:SRD:Nav:L8">Personal</a></li>
    <li><a href="https://merchant.paypal.com/cgi-bin/marketingweb?cmd=_render-content&amp;content_ID=merchant/home&amp;nav=2" class="scTrack:SRD:Nav:x60">Business</a></li>
    <li><a href="https://www.paypal.com/developer" class="scTrack:SRD:Nav:S9">Developers</a></li>
    </ul></div>
    <script type="text/javascript">if(typeof PAYPAL != 'undefined'){ PAYPAL.core.Navigation.init(); }</script>
    </div>
    <script type="text/javascript" src="https://www.sandbox.paypal.com/WEBSCR-640-20100726-1/js/lib/min/widgets.js"></script><script type="text/javascript" src="https://www.sandbox.paypal.com/WEBSCR-640-20100726-1/js/pp_naturalsearch.js"></script><script type="text/javascript">mp_landing();</script>
    <!-- SiteCatalyst Code
    Copyright 1997-2005 Omniture, Inc.
    More info available at http://www.omniture.com -->
    <script type="text/javascript" src="https://www.sandbox.paypal.com/WEBSCR-640-20100726-1/js/site_catalyst/pp_jscode_paypalsandboxdev.js"></script>
    <script type="text/javascript">
    s.prop1="p/wel/sandbox-outside";
    s.prop7="Unknown";
    s.prop8="Unknown";
    s.prop9="Unknown";
    s.prop10="US";
    s.prop14="";
    s.prop34="PayPalCredit:Servicing:CO:NoTransactions";
    s.pageName="p/wel/sandbox-outside::notify-validate";
    s.prop50="en_US";
    s.prop18="";
    </script>
    <script type="text/javascript"><!--
    /************* DO NOT ALTER ANYTHING BELOW THIS LINE ! **************/
    var s_code=s.t();if(s_code)document.write(s_code);
    if(navigator.appVersion.indexOf('MSIE')>=0)document.write(unescape('%3C')+'\!-'+'-')
    //-->
    </script><noscript><img
    src="//paypal.112.2O7.net/b/ss/paypalsandboxdev/1/H.6--NS/0?pageName=NonJavaScript"
    height="1" width="1" border="0" alt="" /></noscript>
    <!--/DO NOT REMOVE/-->
    
    <!-- End SiteCatalyst Code -->
    <script type="text/javascript">         
                            YUE.addListener(window, "load", function() {                                
                                PAYPAL.util.lazyLoad("/js/Customer/min/baynote.js", function() {
                                    var searchFormsIDs = ["searchForm", "searchformnew", "searchform"];                                 
                                    YUE.addListener(searchFormsIDs, 'submit', function() {baynote_handleSubmit(this);});            
    
                                    var bn_timeout = setTimeout(function() {
                                        if (typeof baynote_validateSearchBox == 'function') {
                                            baynote_validateSearchBox();
                                            clearTimeout(bn_timeout);
                                        }
                                    }, 200);
                                });
                            });
                            </script>
    </body>
    </html>
    

3 个答案:

答案 0 :(得分:0)

当IPN到达您的脚本时,您应该回发到:

https://www.paypal.com/cgi-bin/webscr?cmd=_notify-validate&<all the junk they posted you>
(or https://www.sandbox.paypal.com/...)

然后检查验证的响应正文。

如果所有这些都给你一些HTML,那是什么?

答案 1 :(得分:0)

我现在已经对它进行了排序,使用他们提供的示例代码并稍微调整它以进行验证。我仍然不确定我使用的代码到底出了什么问题:我没有费心去调试它,现在我已经有了其他代码。

  1. 这是POST请求,而不是GET
  2. 目前,我正在使用他们的示例代码,该代码使用fsockopen代替cURL,但它有效,这是主要的事情。
  3. 请求转到PayPal上的URL,该URL不是为IPN呼叫保留的:它也作为HTML页面存在。
  4. 如果您的请求中有任何错误,PayPal会返回HTML页面而不是IPN响应。
  5. https://www.x.com/message/180364

答案 2 :(得分:0)

如果你使用CURL,那就有一个问题 - 你必须手工形成POST数据块,而不是传递一个数组。如果传递数组,CURL会将其作为多部分数据发送,而不是像PayPal期望的那样以URL编码的形式发送。我有一个非常相似的问题,并最终与CURL合作。 PHP下面的示例:

function deq($s) //Removes the dreaded "magic quotes"
{
    if($s == null)
        return null;
    return
        get_magic_quotes_gpc() ?
        stripslashes($s) : $s;
}

function MakeQS($po) //Makes an URL-encoded query string from an associative array
{
    $ps = "";
    foreach($po as $k => $v)
        $ps .= ($ps == "" ? "" : "&").$k."=".urlencode(deq($v));
    return $ps;
}

$cu = curl_init("https://www.paypal.com/cgi-bin/webscr");
$po = $_POST;
$po["cmd"] = "_notify-validate";
curl_setopt_array($cu, array(
    CURLOPT_RETURNTRANSFER  => true,
    CURLOPT_HEADER => false,
    CURLOPT_POST => 1,
    CURLOPT_POSTFIELDS => MakeQS($po)  //This is the non-obvious bit!
    ));
$resp = curl_exec($cu);
if(curl_errno($cu) !== 0)
    //fail...

curl_close($cu);
if($resp != "VERIFIED")
    //fail...

这是有效的生产代码。