首页 > 解决方案 > 如何使用 PHP 捕获从 PayPal 智能按钮支付产生的交易数据

问题描述

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

<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 文件?

标签: phppaypal

解决方案


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

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

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


推荐阅读