2010-08-05 217 views
0

贝宝IPN指南文档清楚地说贝宝API侦听网站付款标准URI

  • 发布请求到www.paypal.com或www.sandbox.paypal.com,这取决于关于您是否要在沙盒中进行实时测试或测试您的听众。

  • 等待来自PayPal的响应,该响应可以是VERIFIED或INVALID。

  • 嗯,我试过(Sandbox版本),而响应是一个完整的HTML页面。

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

    我在做什么错?这仅仅是我,还是贝宝文件不必要的混淆?

    编辑补充:

    我已经试过URL复位到页面我控制,它只是转储出$_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> 
    

    回答

    0

    如果您正在使用卷曲,有一个问题 - 你必须形成用手POST数据块,而不是传递一个数组。如果您传递一个数组,CURL会将其作为多部分数据发送,而不是URL编码形式,如PayPal所期望的那样。我有一个非常类似的问题,最终让它与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... 
    

    这是工作生产代码。

    +0

    啊哈!我现在已经开始工作了,而且我不会去碰它,但是如果我需要再次捅一下,我会研究一下。谢谢! – TRiG 2010-08-13 15:54:14

    +0

    我得到它的工作,但是当我从测试模式切换到现场模式时,它停止工作。所以现在我正在使用你的代码。它的工作原理,所以我将其标记为公认的答案。 – TRiG 2010-11-14 20:47:34

    +0

    http://stackoverflow.com/questions/4100452/paypal-ssl-error-on-live-site – TRiG 2010-11-14 20:47:57

    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,它是什么?

    +0

    啊哈!我认为数据返回到POST正文中,而不是URL本身。我会旋转一下,看看会发生什么。我正在使用'CURLOPT_POSTFIELDS'。 – TRiG 2010-08-05 14:29:53

    +0

    没有。仍然回到完整的HTML。我将编辑我的问题并将其粘贴进来。 – TRiG 2010-08-05 14:39:13

    +0

    不重写它们的示例代码,它应该放在POST正文中,而不是URL。但是我仍然找回完整的HTML页面。 – TRiG 2010-08-12 15:37:17

    0

    我现在已经通过使用他们提供的示例代码对它进行了排序,并稍微调整它以进行验证。我仍然不确定我在做什么,我正在使用的代码有错:我没有打扰过调试它,现在我已经有了其他代码的工作。

    1. 这是一个POST请求,而不是GET
    2. 现在,我使用他们的示例代码,它使用fsockopen而不是cURL,但它的工作原理是主要的。
    3. 请求转到PayPal上的一个URL,该URL不保留给IPN呼叫:它也作为HTML页面存在。
    4. 如果您在请求中做了任何错误,贝宝将返回HTML页面而不是IPN响应。

    https://www.x.com/message/180364