用户批准后如何取消Paypal订单? (API v2)
Posted
技术标签:
【中文标题】用户批准后如何取消Paypal订单? (API v2)【英文标题】:How to cancel a Paypal Order after user approvation? (API v2) 【发布时间】:2022-01-15 01:38:02 【问题描述】:我实际上是在尝试创建一个使用 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 逻辑中的某些内容,所以向我道歉,有什么想法可以完成这项任务吗?
谢谢
【问题讨论】:
【参考方案1】:订单一经创建,有效期为 72 小时。
订单获得批准后,有效期为 3 小时。
没有取消订单的方法。
如果您不想使用订单,请丢弃其 id 并且不要捕获它。
要更改为用于订单创建和捕获的服务器端集成,请按照Set up standard payments 指南在您的服务器上创建 2 条路由,一条用于“创建订单”,一条用于“捕获订单”documented here。两个路由都应该只返回 JSON 数据(没有 html 或文本)。在第二条路线中,当捕获 API 成功时,您应该将其生成的付款详细信息存储在您的数据库中(特别是 purchase_units[0].payments.captures[0].id
,这是 PayPal 交易 ID)并执行任何必要的业务逻辑(例如发送确认电子邮件或预订产品)立即在将您的返回 JSON 转发给前端调用者。
将这 2 条路由与前端审批流程配对:https://developer.paypal.com/demo/checkout/#/pattern/server
【讨论】:
您好,谢谢您的澄清,对我来说,如果在买家批准后出现问题,我还不清楚会发生什么。我在沙箱中看到,在用户批准后,订单付款立即处理并完成。但是,如果在关闭贝宝批准窗口后我的系统出现问题,并且由于技术原因我无法处理订单,则客户端无法阻止贝宝从买家那里获得资金。可以吗? 付款未处理,审核通过后自动完成。它仅在捕获后完成。因此,如果您不希望立即完成,请不要立即捕获。服务器端创建和捕获是最强大的解决方案,您需要停止使用actions.order.create()
并停止使用 actions.order.capture()
并更改为服务器端 REST API 集成。用这些细节更新答案。
不清楚是什么导致CloseProcess(details)
在您的示例中失败,但该逻辑可能在捕获之前发生。或者,如果该逻辑必须在成功捕获后发生,那么当该逻辑失败时,您将需要退还付款。
谢谢,通常在 CloseProcess 中不会发生任何不好的事情,但是该方法在服务器端传达付款已被用户批准,因此它在我的数据库中创建了订单。无论如何,如果在订单创建过程中出现问题,我认为我可以在客户端停止订单捕获。
我的想法是在服务器端处理订单,但阅读 v2 API 文档后我认为我可以通过 javascript 仅在客户端创建订单,Paypal 文档对我来说有点不清楚。无论如何,如果我完全理解您的回复,最快的解决方案是: onApprove: function (data, actions) if (!CloseProcess()) console.log("FAIL") return false; else return actions.order.capture().then(function (details) ); ,以上是关于用户批准后如何取消Paypal订单? (API v2)的主要内容,如果未能解决你的问题,请参考以下文章
执行付款后调用的 PayPal REST API 取消 URL