如何从多个授权交易中仅捕获一笔交易?
Posted
技术标签:
【中文标题】如何从多个授权交易中仅捕获一笔交易?【英文标题】:How to capture only one transaction from multiple authorized transactions? 【发布时间】:2021-10-25 02:38:51 【问题描述】:我正在构建一个支付系统,用户可以通过orderId
进行支付
我想确保只有一笔付款通过(被捕获)
支付流程是这样的:
1- 用户点击 Paypal 按钮
2- 使用orderId
为用户创建事务PENDING_PAYMENT
3- 用户使用 Paypal 付款
4- Paypal 发送 webhook 并将付款标记为AUTHORIZED
5-系统CAPTURES
付款
如您所见,用户可以打开多个 Paypal 页面并同时支付所有页面,我无法阻止这种情况,但我希望能够CAPTURE
仅其中一个付款。 (这样我就可以自动退还剩余的款项)
非常感谢您的帮助,在此先感谢您。
【问题讨论】:
【参考方案1】:当您设置 PayPal 交易以供批准时,将一个唯一的 invoice_id
传递给 PayPal,该invoice_id
以前从未用于在该 PayPal 帐户上成功付款。这可能是您的orderId
,如果需要,可能会添加一些额外的前缀。 (例如,如果您在同一个 PayPal 帐户上有多个店面,可能使用相同的订单号,则通常选择 3 个字母的前缀和表示商店名称的破折号)
默认情况下,PayPal 帐户会阻止(阻止)以前用于成功支付该帐户的 invoice_id
的任何后续付款 - 正是为了防止意外付款,就像您的用例一样。
【讨论】:
我问了一个笼统的问题,假设我正在使用另一种付款方式(如bitpay),只有CAPTURE
,我将如何确定付款是否重复?跨度>
其实你没有以一般的方式提出你的问题,但你没有提出的问题的一般解决方案是在捕获之前添加你自己的验证。也就是说,只要您成功捕获,就在您的数据库中将该 orderId 标记为已付款。在尝试任何捕获之前,请检查是否设置了该标记。以上是关于如何从多个授权交易中仅捕获一笔交易?的主要内容,如果未能解决你的问题,请参考以下文章
仅授权信用卡交易是不是应该与数据库中的授权捕获交易分开存储?
Authorized.net - 可以 createTransactionRequest 用于授权、捕获和取消现有支付配置文件 ID 的交易