如何在 PayPal 智能按钮交易中发送自定义数据字段

Cli*_*der 6 javascript paypal paypal-rest-sdk

我是 PayPal 集成的新手,但我已成功使用客户端 JavaScript SDK 创建按钮并完成交易。我还添加了一个 webhook,用于侦听 PAYMENT.CAPTURE.* 事件并将返回数据记录到我自己的数据库中的交易表中。缺点是我无法跟踪交易针对的是哪个服务或客户。因此,我想知道如何在按钮中添加至少一个自定义字段,以便它在 webhook POST 中返回给我,以便我可以为该特定客户执行一些业务逻辑。

我最初的选择是发布数据返回onApprove:(data, actions)=>{},但如果在此之前发生灾难性事件(例如断电或一般客户端-服务器连接故障),我将没有恢复选项。

现在我的 JS 基本代码如下:

try{
        paypal.Buttons({

        // Set up the transaction
        createOrder: function(data, actions) {
            return actions.order.create({
                purchase_units: [{
                    amount: {
                        value: charge.amount,
                        currency_code:'USD'
                    }
                }]
            });
        },
        // Finalize the transaction
        onApprove: function(data, actions) {
            return actions.order.capture().then(function(details) {
                console.log(details);
                if(details.status == "COMPLETED"){
                  localStorage.clear();
                  window.location.href = "thank-you";
                }
                //alert('Transaction completed by ' + details.payer.name.given_name + '!');
            });
        }


    }).render('#paypal-button-container');
  }catch(e){
     console.error('PayPal not loaded!');
  }
Run Code Online (Sandbox Code Playgroud)

Pre*_*der 4

切换到适当的客户端-服务器集成。

按照PayPal Checkout 集成指南,在您的服务器上创建 2 条路线,一条用于“创建订单”,一条用于“捕获订单”(请参阅​​“添加和修改代码”中的可选步骤 5)。这两个路由都应仅返回 JSON 数据(无 HTML 或文本)。在第二条路线中,当捕获 API 成功时,您应该将其生成的付款详细信息存储在数据库中(特别purchase_units[0].payments.captures[0].id是 PayPal 交易 ID)并执行任何必要的业务逻辑,例如保存来自表单输入的附加数据。

(该数据可以作为捕获调用的一部分进行传输,方法是向其选项参数fetch添加一个body键,该参数可以为您序列化一个 JSON 对象。然后,您的第二个服务器路由可以将该输入解析为 JSON 并在继续之前验证它是否正常。捕获。)

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


通过上述方法,您可以在付款捕获时获得即时、同步的 API 响应。不需要来自 webhooks 的额外异步通知,因此这些对您来说基本上是多余的。