gpt4 book ai didi

java - 是否可以通过 Stripe 仅通过一个用户 3d 验证来确认多个 PaymentIntents?

转载 作者:行者123 更新时间:2023-11-30 10:01:04 26 4
gpt4 key购买 nike

我有与 Stripe 集成的 spring boot/angular 应用程序。

我们正尝试在现有系统中加入 3d 安全授权。具有即时自动和手动确认功能的基本流程很容易实现,而且效果很好,但是...

我们有一个特定的案例,我们有多种服务,其中一些是即时收费(捕获)的,其中一些需要由供应商确认,并在此确认后捕获。在我们当前的实现中,我们正在创建单独的费用对于每个异步服务(需要确认的服务),如果确认成功,我们将收取费用。所以我们有一个用户操作但有多个捕获。

现在我们正在尝试对 PaymentIntent 做同样的事情,但看起来 PaymentIntent 只能有一个 Charge 并且不能被部分确认。此外,如果我们创建多个 PaymentIntents,即使使用相同的 paymentMethodId,看起来我们需要为每个单独的用户操作。

有什么方法可以仅通过 1 个用户操作来支持多项收费或多个 PaymentIntents,以避免对每个异步捕获进行 3d 安全验证?

更新一:我设法使用 SetupIntent 实现了这一点,但仅适用于允许您进行一次性验证的卡,您可以稍后将其用于其他付款:

 @PostMapping("/createSetup")
public String createPaymentSetup(HttpServletRequest request) throws Exception {
Map<String, Object> params = new HashMap<>();
SetupIntent setupIntent = SetupIntent.create(params);
return setupIntent.getClientSecret();
}

此客户端密码将在前面用于调用 3d 验证(仍然没有任何实际付款):

this.stripe.handleCardSetup(
this.clientSecret, this.cardElement, {
payment_method_data: {
billing_details: {name: this.cardholderName.value}
}
}
).then((result) => {
if (result.error) {
console.log(result.error);
} else {
console.log(result);
console.log("Setup Intent id: " + result.setupIntent.id);
this.saveCardForFutureUse(result.setupIntent.id);
}
});
});

在 saveCardForFutureUse 中,我回电以将此设置中的付款方式附加到客户:

String setupIntentId = request.getHeader("paymentId");
SetupIntent intent = SetupIntent.retrieve(setupIntentId);
PaymentMethod paymentMethod = PaymentMethod.retrieve(intent.getPaymentMethod());
Map<String, Object> params = new HashMap<String, Object>();
params.put("customer", "{CUSTOMER_ID}");
paymentMethod.attach(params);

然后我们可以使用给定的 paymentMethod 创建多个 PaymentIntents:

PaymentIntentCreateParams bid1Params = PaymentIntentCreateParams.builder()
.setAmount(3099l)
.setCurrency("usd")
.setConfirm(true)
.setPaymentMethod(paymentMethod.getId())
.setCustomer("CUSTOMER_ID")
.setOffSession(true)
.build();



PaymentIntentCreateParams bid2Params = PaymentIntentCreateParams.builder()
.setAmount(5099l)
.setCurrency("usd")
.setConfirm(true)
.setPaymentMethod(paymentMethod.getId())
.setCustomer("CUSTOMER_ID")
.setOffSession(true)
.build();
PaymentIntent bid1 = PaymentIntent.create(bid1Params);
PaymentIntent bid2 = PaymentIntent.create(bid2Params);

如果我们使用正确的卡片,例如:

4000002500003155 Required on setup or first transaction

这 2 个出价 paymentIntents 将被确认...如果我们像这样使用卡片:

4000002760003184 Required This test card requires authentication on all transactions.

他们仍将处于状态

"requires_action"

所以,对于那些卡,我每次付款都需要这个 3d ...

最佳答案

PaymentIntents 实际上支持授权和捕获,就像之前的 Charge API 一样:https://stripe.com/docs/api/payment_intents/create#create_payment_intent-capture_method

鉴于您所描述的情况,一种解决方法是创建 1 个 PaymentIntent,并授权至您必须收取的最大金额。然后,一旦您与您的提供者一起完成了流程,并且您有了想要捕获的总和最终值,您就可以捕获该值的 PaymentIntent。

或者,您可以重复使用第一个 PaymentIntent(或 SetupIntents)中的卡详细信息以备后用,如下所述:https://stripe.com/docs/payments/cards/reusing-cards#saving-cards-after-payment .

关于java - 是否可以通过 Stripe 仅通过一个用户 3d 验证来确认多个 PaymentIntents?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57657635/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com