首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用PHP语言捕获PayPal智能按钮支付生成的交易数据

如何使用PHP语言捕获PayPal智能按钮支付生成的交易数据
EN

Stack Overflow用户
提问于 2021-06-24 03:13:44
回答 1查看 158关注 0票数 0

我正在尝试使用PayPal提供的脚本使用智能按钮来实现PayPal支付:

代码语言:javascript
复制
<div id="smart-button-container">
      <div style="text-align: center;">
        <div id="paypal-button-container"></div>
      </div>
    </div>
  <script src="https://www.paypal.com/sdk/js?client-id=MY_CLIENT_ID&currency=CAD" data-sdk-integration-source="button-factory"></script>
  <script>
    function initPayPalButton() {
      paypal.Buttons({
        style: {
          shape: 'rect',
          color: 'gold',
          layout: 'horizontal',
          label: 'pay',
          
        },

        createOrder: function(data, actions) {
          return actions.order.create({
            purchase_units: [{"description":"Package delivery","amount":{"currency_code":"CAD","value":1}}]
          });
        },

/*        onApprove: function(data, actions) {
          return actions.order.capture().then(function(details) {
            alert('Transaction completed by ' + details.payer.name.given_name + '!');
          });
        }, */
            onApprove: function(data) {
              return fetch('/my-server/capture-paypal-transaction.php', {
                headers: {
                  'content-type': 'application/json'
                },
                body: JSON.stringify({
                  orderID: data.orderID
                })
              }).then(function(res) {
                return res.json();
              }).then(function(details) {
                alert('Transaction funds captured from ' + details.payer_given_name);
              })
            },
        onError: function(err) {
          console.log(err);
        }
      }).render('#paypal-button-container');
    }
    initPayPalButton();
  </script>

我用下面的函数替换了注释代码,该函数建议用户可以链接到服务器上的文件来处理返回的数据。

我找不到关于如何使用这个由PayPal生成的按钮的明确说明,所有与IPN相关的git示例要么是过时的,要么是已经弃用的PHP代码,例如引用了魔术引号。

有没有一个从智能按钮捕获交易数据的示例PHP文件?

EN

回答 1

Stack Overflow用户

发布于 2021-06-24 03:28:38

您的示例将客户端actions.order.create()与fetch混合在一起进行服务器端捕获。这种混合不应该这样做。从服务器执行这两个步骤(如果不使用PHP等服务器端语言,则两者都不执行)

因此,在您的服务器上创建两个路由,一个用于“创建订单”,另一个用于“捕获订单”,即documented here。这些路由应该只返回JSON数据(不返回HTML或文本)。后者应该(在成功时)在返回之前将付款详细信息存储在数据库中(特别是purchase_units[0].payments.captures[0].id,PayPal事务ID)。

将这两条路由与以下审批流配对:https://developer.paypal.com/demo/checkout/#/pattern/server

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68105893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档