如何使用 PayPal 快速结账集成(客户端 REST)获取交易 ID

How to get the Transaction ID using PayPal Express Checkout Integration (Client-side REST)

提问人:Dan 提问时间:7/29/2017 最后编辑:Dan 更新时间:6/2/2020 访问量:6112

问:

我想在PayPal付款成功后获取交易ID。

我正在使用 PayPal 快速结账(客户端 REST)。

请在下面找到我的付款按钮代码。

我的目标是能够更新MySQL数据库以(1)确认订单和(2)在其旁边包含PayPal交易ID。这就是 orderconfirmed.php 文件在被调用后的目标。为此,我需要能够在付款成功时获取 TransactionID 变量

<script>
          paypal.Button.render({

              env: 'sandbox', // Or 'sandbox'

              client: {
                  sandbox:    'ABCD',
                  production: 'ABCD'
              },

              commit: true, // Show a 'Pay Now' button

              payment: function(data, actions) {
                  return actions.payment.create({
                      payment: {
transactions: [
    {
        amount: { total: '0.01', currency: 'USD' },
            item_list: {
            items: [
                {
                name: 'hat',
                description: 'Brown hat',
                quantity: '1',
                price: '0.01',
                currency: 'USD'
                }
            ]
        }
    }
]
                      },    
                  });
              },

              onAuthorize: function(data, actions) {
                  return actions.payment.execute().then(function(payment) {

                        document.querySelector('#confirmmessage').innerText = 'Thank you - Your payment has been processed';
                        document.querySelector('#paypal-button').style.display = 'none';
                        document.querySelector('#confirmdiv').style.display 

= 'block';
window.location.href = 'orderconfirmed.php?transactionID=HOW_TO_GET_THIS_FIELD';
                      });
                  }

              }, '#paypal-button');
          </script>
javascript php rest PayPal 客户端

评论

0赞 inarilo 7/29/2017
你读过 developer.paypal.com/docs/api/payments/#payment_create_request 吗?
1赞 Dan 7/29/2017
是的,我做到了,但我不明白这与我有什么关系。我正在使用客户端集成。如果我的理解是正确的,您引用的代码是服务器上用于创建支付对象的 curl 命令。我不能这样做,因为我使用的是共享托管服务。我错过了什么吗?
0赞 inarilo 7/29/2017
您应该能够通过 JS 执行相同的操作。但共享主机并不意味着您不能使用 curl。
0赞 inarilo 7/29/2017
数据包含什么,它有销售 ID 吗?
0赞 Isabelle 11/13/2018
只需使用返回的数据 onAuthorize,PayPal返回 paymentID 和 orderID window.location.href = “yourwebsite.com/orderconfirmed.php?payment=” + data.paymentID + “&order=” + data.orderID;

答:

5赞 Dan 8/1/2017 #1

所以这是我找到的问题的解决方案

1- 要获得 PaymentID,您可以简单地做(正如 inarilo 正确地建议的那样 - 谢谢!

data.paymentID

注意:PaymentID 与 TransactionID 不同:参见 paymentId 和 TRANSACTIONID 的区别

为了获取交易 ID,我使用:

payment.transactions[0].related_resources[0].sale.id

2-然后要使用此信息并通过PHP更新MySQL数据库,我使用AJAX。

所以把代码放在一起看起来像这样:

                        document.querySelector('#confirmmessage').innerText = payment.transactions[0].related_resources[0].sale.id;


       if (window.XMLHttpRequest) {
            // code for IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp = new XMLHttpRequest();
        } else {
            // code for IE6, IE5
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        xmlhttp.onreadystatechange = function() {
            if (this.readyState == 4 && this.status == 200) {
                document.getElementById("txtHint").innerHTML = this.responseText;
            }
        };
        xmlhttp.open("GET","testajax.php",true);
        xmlhttp.send();


                        document.querySelector('#confirmdiv').style.display = 'block';

评论

0赞 Kareem 6/5/2018
什么是对象支付?你能为这行代码添加这样的上下文吗?谢谢 payment.transactions[0].related_resources[0].sale.id
1赞 Dan 3/30/2019
更新:以上内容对checkout.js有效,对于与SDK的新集成(从2019年2月开始),交易ID可以在...purchase_units[0].payments.captures[0].id