如何在用户批准后取消 Paypal 订单? (API v2)

How to cancel a Paypal Order after user approvation? (API v2)

我实际上正在尝试创建一个使用 Papal API v2.

的应用程序

我成功创建排序器并在沙盒上赚钱。 我使用 JS Paypal 方法 onApprove 调用 order.capture 来获取订单并在我的系统上创建订阅。 但是,如果我的服务器端代码出现问题,如果出现问题,我如何阻止 paypal API 上的订单以停止从用户那里收钱?

        paypal.Buttons({
            locale: 'it_IT',
            style: {
                shape: 'pill',
                color: 'blue',
                layout: 'vertical',
                label: 'buynow',
                fundingicons: 'true',
            },
            createOrder: function (data, actions) {
                return actions.order.create(my_PlanOrderDef);
            },
            onApprove: function (data, actions) {
                console.log(data)
                console.log(actions)
                return actions.order.capture().then(function (details) {
                    if (!CloseProcess(details)) {
                        console.log("FAIL! HERE SOMETHING GOING BAD ON MY LOGIC, AND I NEED TO CANCEL THE ORDER PAYMENT");
                        return false;
                    }
                });
            },
            onError: function (err) {
                console.log(err);
            }
        }).render('#btnPaypalContainer');

CloseProcess 方法只是调用我的服务器端逻辑来在我的系统上创建订阅。 我可能错过了 paypal v2 逻辑中的某些内容,所以向我道歉,有什么想法可以完成这个任务吗?

谢谢

订单创建后,72 小时内有效。

订单获得批准后,有效期为 3 小时。

没有取消订单的方法。

如果您不想使用某个订单,请丢弃它的 ID 并且不要捕获它。


要更改为订单创建和捕获的服务器端集成,请遵循 Set up standard payments guide and make 2 routes on your server, one for 'Create Order' and one for 'Capture Order', documented here。两条路线都应该 return 只有 JSON 数据(没有 HTML 或文本)。在第二条路线中,当捕获 API 成功时,您应该将其生成的付款详细信息存储在您的数据库中(特别是 purchase_units[0].payments.captures[0].id,这是 PayPal 交易 ID)并执行任何必要的业务逻辑(例如发送确认电子邮件或预订产品)立即 将您的 return JSON 转发给前端呼叫者之前。

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