贝宝生产比沙箱不同的工作(PayPal production working differently

2019-10-19 03:14发布

我已经建立了一个应用程序,发送与登录用户到PayPal的GUID的通知URL,交易完成后,会调用该网址和验证之后,用户数据库条目更新列purchased从0到1。

然后,用户点击返回到应用程序按钮,并且基于所述收费功能显示purchased列。

我一直在沙箱中的最后几个月测试此。 测试(包括本次发行后)时代的100%,溢价选项卡显示购买完成后。

客户非常高兴,并给出了继续移动到生产。 我已经建立了IPN具有完全相同的网址 ,我已经改变了几乎一无所有,除了从www.sandbox.paypal.com切换到www.paypal.com和改变从沙箱业务上市到个人业务的帐户。

THS的问题是,该按钮现在不露面, 直到您刷新屏幕。 点击“返回到应用程序”按钮,这在以前是按预期工作,现在不显示的溢价标签。 当我点击刷新 - 它,然后显示出来。 如果我切换一切回到沙箱设置,咚 - 它再次工作就好了。

这里是生产账户中现在购买按钮的代码:

<form action="https://www.paypal.com/cgi-bin/webscr" method="post" id="buynowForm" target="_top">
<input type="hidden" name="cmd" value="_xclick">
<input type="hidden" name="business" value="ACCOUNT EMAIL">
<input type="hidden" name="lc" value="US">
<input type="hidden" name="item_name" value="Product">
<input type="hidden" name="amount" value="10.00">
<input type="hidden" name="currency_code" value="USD">
<input type="hidden" name="button_subtype" value="services">
<input type="hidden" name="no_note" value="1">
<input type="hidden" name="no_shipping" value="1">
<input type='hidden' name='notify_url' value='http://app.com/purchase/<?php echo $data[0]['uid'] ?>'>
<input type='hidden' name='return' value='http://app.com/'>
<input type="hidden" name="rm" value="1">
<input type="hidden" name="cbt" value="Return to Product Plus">
<input type="hidden" name="bn" value="PP-BuyNowBF:btn_buynowCC_LG.gif:NonHosted">
<input type="submit" class="hidden-print visible-print" border="0" name="buysubmit" value="Click For Product Plus" alt="Click for Product Plus">
<img alt="" border="0" src="https://www.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1">

这里是上面叫工艺路线:

$app->post('/purchase/:uid', function ($uid) use ($app) {

 $request = Slim::getInstance()->request();
 $inputs = json_decode($request->getBody());
 $db_conn = conn();

 $req = 'cmd=_notify-validate'; 
    foreach ($_POST as $key => $value) 
    { 
        if (get_magic_quotes_gpc()) 
        { 
            $_POST[$key] = stripslashes($value); 
            $value = stripslashes($value); 
        } 
        $value = urlencode($value); 
        $req .= "&$key=$value"; 
    } 

    $url = "https://www.paypal.com/cgi-bin/webscr";
    $ch = curl_init();    
    curl_setopt($ch, CURLOPT_URL,$url); 
    curl_setopt($ch, CURLOPT_FAILONERROR, 1); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 3); 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $req); 
    $result = curl_exec($ch); 
    curl_close($ch); 

    if (strcmp ($result, "VERIFIED") == 0)
    { 
        $sql_st = 'UPDATE  `user_data` SET `purchased` = 1 WHERE uid=:uid';

          $sql = $db_conn->prepare($sql_st);
          if ($sql->execute(array('uid'=>$uid))) {
            $data = array('status' => "Ok");
          } else {
            $data = array('status' => print_r(mysql_error()));
          }
    } 
    else  
    { 
        // Did Not Process IPN Properly
    } 

});

真的很希望这只是事情在我的部分令人难以置信的愚蠢。 任何帮助/指导表示赞赏。

Answer 1:

从本质上讲这里的解决方案是两个选项之一 -

  1. 建设完成的辅助方法 - 换句话说,该IPN是不是防御所购买升级软件的第一线。 在我结束一切正常时,IPN(notify_url)调用的但显示时间是使即时升级不完全即时太慢。 他们返回到执行升级,然后重定向的页面。

  2. 存储升级功能不同的路线背后 - 这是PayPal的建议。 从本质上讲,有app.com/basic和app.com/upgraded。 这不是真正的理想,也不是我会建议它作为一个永久性的解决方案。

概括起来 - 这是一个已知的问题与贝宝。 沙箱和生产流程基本上是不同的 - 而不是按功能或API,但在使用 - 生产水平帐户正在打多,所花费的时间来处理的通知是要慢得多。

希望这可以帮助别人。



文章来源: PayPal production working differently than sandbox