为了账号安全,请及时绑定邮箱和手机立即绑定

使用定期计费模型更新 SCA 的 Stripe 付款

使用定期计费模型更新 SCA 的 Stripe 付款

翻过高山走不出你 2023-07-19 10:20:37
您的输入是灰度图像。所以只有纯白色才会变成黑色,其他一切都会变成白色。我对 opencv 不熟悉,所以这可能行不通。但值得一试。int invertedPixel = (0xFFFFFF - pixel) | 0xFF000000;bitmapCopy.setPixel(x,y, invertedPixel);719043  我目前正在将我的应用程序从使用 Stripe Charges API 迁移到使用 Stripe PaymentIntents API,以便遵守 SCA 法规。我的应用程序是具有定期计费模型的订阅服务,因此我通常遵循迁移文档的“Gym Membership”示例,并查看其他相关文档和参考资料。我在前端使用 Stripe Elements 在自定义表单上捕获付款详细信息等,然后使用 Stripe 付款令牌发送到我的后端以进行进一步处理(同步)。前端更新很简单,我没有任何问题,但我对后端更新有点困惑。我可以在文档中找到的所有代码示例(通常都很棒)显示了如何将Charge调用转换为PaymentIntent调用,例如这个旧的 Charge 调用:Map<String, Object> chargeParams = new HashMap<String, Object>();chargeParams.put("amount", 1099);chargeParams.put("currency", "eur");chargeParams.put("source", request.token_id);Charge.create(chargeParams);...使用 PaymentIntents API 变成这样:Map<String, Object> createPaymentIntentParams = new HashMap<String, Object>();createPaymentIntentParams.put("currency", "eur");createPaymentIntentParams.put("amount", 1099);createPaymentIntentParams.put("confirm", true);createPaymentIntentParams.put("confirmation_method", "manual");createPaymentIntentParams.put("payment_method", request.paymentMethodId);intent = PaymentIntent.create(createPaymentIntentParams);因此,如果客户需要额外授权(如状态所示PaymentIntent),该请求将被退回给客户,并且 Stripe SDK 将处理额外的安全措施。但我的应用程序没有Charge以这种方式使用调用。它通常看起来像这样:Map<String, Object> srchOpts = new HashMap<>();srchOpts.put("email", userEmail);   List<Customer> matchingCustomers = Customer.list(srchOpts).getData();Customer customer = null;Subscription subscription = null;if ( matchingCustomers.isEmpty() ){    Map<String, Object> params = new HashMap<String, Object>();    params.put("email", userEmail);    params.put("source", stripeToken);    customer = Customer.create(params); // potential SCA rejection ??}新Customer创建、新PaymentSource创建和新Subscription创建调用是否会被 SCA 拒绝,此时我必须返回客户进行进一步身份验证?如果是这样,我如何检查 Customer 和 PaymentSource 调用是否有必要这样做,以及如何获取所需的客户端秘密令牌发送回前端?订阅对象确实提供对SetupIntent具有状态和客户端密钥的对象的访问,所以我是否必须检查和使用这些?
查看完整描述

1 回答

?
暮色呼如

TA贡献1853条经验 获得超9个赞

唯一需要 SCA 的时间是当您尝试付款时。收集客户的付款详细信息(并可选择将其保存为新客户)后,您要求 Stripe 完成付款。然后 Stripe 将联系客户的银行并询问是否可以付款或是否需要额外的身份验证。

如果银行表示不需要额外的费用,则付款成功,一切顺利。

如果银行表示需要 3DS 检查,那么您需要让客户完成 3DS 流程,这本质上是一个 2FA 步骤,以确保请求付款的人也是持卡人。

如果您的客户仍在“会话中”(例如仍在您的网站上),您可以将新创建的 PaymentIntent 的客户端密钥传递到您的前端,并使用 Stripe.js 完成 2FA 步骤并验证付款。

如果您的客户处于“非会话状态”(例如,这是定期订阅,并且他们不在您的网站上),那么您必须向您的客户发送电子邮件,让他们回到您的网站上执行 3DS 步骤(或者您可以使用 Stripe 的托管发票页面)。

在您的情况下,当您创建订阅时(假设您没有使用试用期),Stripe 将创建一个发票,并附加自动创建的 PaymentIntent。您可以通过Subscriptionlatest_invoice上的参数访问此 Invoice 。如果需要 3DS 步骤,PaymentIntent 将具有该状态,这意味着您需要让客户返回“会话”以完成付款。requires_action

在这种情况下,通过托管发票页面,Stripe 将自动向您的用户发送电子邮件,以便他们可以完成付款。如果没有托管发票页面,您将必须构建自己的实现才能让您的用户返回“会话中”。

仅当您实际尝试将资金从一个地方转移到另一个地方时,您才需要在创建客户或付款方式时执行 3DS。


查看完整回答
反对 回复 2023-07-19
  • 1 回答
  • 0 关注
  • 80 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信