【问题标题】:How to capture transaction data generated from PayPal smart button payment with PHP如何使用 PHP 捕获从 PayPal 智能按钮支付产生的交易数据
【发布时间】:2021-09-07 08:47:42
【问题描述】:

我正在尝试使用带有 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 文件?

【问题讨论】:

    标签: php paypal


    【解决方案1】:

    您的示例将客户端 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

    【讨论】:

    • 我真的不清楚。我应该在我的服务器上安装 SDK 来实现捕获数据吗?我最初的问题中的代码是来自 PayPal 上的生成器,即带有注释的“onApprove:”块,我用您解释的块替换了错误地混合了提取。从上一个链接中的示例中,在 onCreate 块return fetch('/demo/checkout/api/paypal/order/create/' 中,该路径通向哪里?是那个有按钮的页面吗?这来自 onApprove,我不明白:return fetch('/demo/checkout/api/paypal/order/' + data.orderID + '/capture/'
    • 我的数据取自 PHP 呈现的 HTML 表,因此我从 var amt = "&lt;?php echo $thePackage-&gt;cost();?&gt;" 和我的 createOrder 中获取的“金额”类似于:purchase_units: [{"description":"Package delivery &lt;?php echo $thePackage-&gt;track;?&gt;","amount":{"currency_code":"CAD","value":amt}}]。我没有张贴的表格。
    • 在您的服务器上创建两个路由来实现必要的调用。您可以使用服务器端 SDK,也可以直接从服务器调用 HTTPS。链接中的 PHP 文档示例随 SDK 一起提供。
    • 路线是什么?它们是如何创建的?除了我帐户中的配置之外,我不熟悉 PayPal 的设置。过去,我使用的任何 IPN 操作都是在购物应用程序中提供的。尝试向用户请求为服务付款并在我的数据库中记录交易对我来说是新的,文档不是程序性的:要做 X,首先做 Y。对我来说,这似乎是所有碎片。
    • 路由是您网站上返回响应的路径。例如,PHP 文件的路径。返回的数据必须是 JSON 格式,没有其他 HTML 或文本。
    猜你喜欢
    • 2020-06-02
    • 2020-03-23
    • 2019-10-31
    • 1970-01-01
    • 2020-10-16
    • 2020-08-13
    • 2020-05-25
    • 2019-11-16
    • 2020-05-09
    相关资源
    最近更新 更多