【问题标题】:Paypal sandbox not returning data贝宝沙箱不返回数据
【发布时间】:2021-11-13 17:15:15
【问题描述】:

我在大约 3 年前实施了贝宝结账,目前运行良好。我现在想为一组新项目创建一个新的结帐页面。我从之前使用的页面复制了代码,并针对新项目进行了更新。我设置了新页面以使用我的沙箱进行初始测试。下面的代码是从实际页面中截取的,在这里展示。

<!DOCTYPE HTML >
<html>

<head>
</head>

<body>
  <div>
  <form id='paypal_form' action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">
  <input type="hidden" name="cmd" value="_xclick" />
  <input type="hidden" name="add" value="1" />
    <input type="hidden" name="business" value="buyer@test.com" />
  <input type="hidden" name="item_name" value="non-member RTV Renewal" />
  <input type="hidden" name="amount" value="75.00" />
  <input type="hidden" name="custom" value="Id=Joe;fixedName=Joe Smith;pw=1234;email=buyer@google.com;expdate=2024-02-14" />
  <input type="hidden" name="currency_code" value="USD" />
  <input type="hidden" name="lc" value="US" />

  <input type="hidden" name="cancel_return" value="https://www.roundalab.org/Figures_Subscriptions_All/test_renew.htm">
<input type="hidden" name="return" value="https://www.roundalab.org/Figures_Subscriptions_All/success_test.php">
<input type="hidden" name="rm" value="2">
  <center>
    <div id="add-cart" style="padding:30px;">
      <button onClick="document.getElementById('paypal_form').submit();">Click Here To Submit Order To Paypal</button>
    </div>
  </center>
  </form>
  </div>
  </div>
</body>

</html>

代码运行并在贝宝沙箱中创建订单。然后它应该去“return”项目中的url,它确实如此。问题是paypal应该在$_POST中返回一堆数据。当显示返回页面时,$_POST是空的。我还显示 $_GET,它包含 1 个字段,即 payer_id。几个问题...

有人知道为什么 $_POST 中没有数据吗?
有没有一种方法可以让我收到任何类型的错误消息,显示为什么在返回项目中的 url 时没有发送 POST 数据的信息?
我认为这种使用贝宝的方法已被弃用。有没有我仍然可以访问文档以使用此界面的地方?

【问题讨论】:

    标签: php paypal paypal-sandbox


    【解决方案1】:

    接收沙盒业务帐户需要启用Payment Data Transfer 才能返回任何数据。

    使用这种仅 HTML(无 API)的 PayPal 集成,可从您的网站重定向,无法保证在完成交易后返回。 PayPal 可能有义务向付款人出示收据,或者他们可能永远不会点击退货,或者他们的浏览器可能已关闭或崩溃。因此,您绝对不应依赖此返回的数据来获取任何重要的信息。仅供参考。

    如果您尝试对通过 _GET/_POST 返回的数据执行任何重要操作,则您的集成存在缺陷。


    使用这种仅 HTML 的

    帖子集成,接收数据的唯一可靠方法是实现 IPN 服务,该服务也很古老。如果您需要对返回的数据做任何重要的事情,所有这些都是糟糕的选择。

    改为使用当前的 PayPal Checkout 集成。按照Set up standard payments 指南在您的服务器上创建两条路线,一条用于“创建订单”,一条用于“捕获订单”documented here。两个路由都应该只返回 JSON 数据(没有 HTML 或文本)。在第二条路线中,当捕获 API 成功时,您应该将其生成的付款详细信息存储在您的数据库中(特别是 purchase_units[0].payments.captures[0].id,这是 PayPal 交易 ID)并执行任何必要的业务逻辑(例如发送确认电子邮件或预订产品)立即将您的返回 JSON 转发给前端调用者。

    将这 2 条路由与前端审批流程配对:https://developer.paypal.com/demo/checkout/#/pattern/server

    【讨论】:

      猜你喜欢
      • 2017-09-23
      • 2013-06-05
      • 2017-11-28
      • 2014-11-04
      • 1970-01-01
      • 2012-08-31
      • 2011-02-21
      • 2015-03-19
      • 2014-06-30
      相关资源
      最近更新 更多