将 SCA 实施到 Stripe 实施中

Posted

技术标签:

【中文标题】将 SCA 实施到 Stripe 实施中【英文标题】:Implementing SCA into Stripe implementation 【发布时间】:2019-12-16 07:06:25 【问题描述】:

我正在制作一个 SaaS,允许客户订阅计划,并在结帐阶段使用优惠券。优惠券给客户X% off for X months,默认情况下,每个人在订阅时都会获得7天的试用期。

让我困惑的是文档。在一个部分中,它说您应该创建 SetupIntents 以进行付款,而在其他部分中它说要使用令牌。

我正在编写支付流程的代码,但我只是想检查一下我的逻辑和理解是否正确。任何人都可以验证以下内容吗?

    客户输入卡号和优惠券 调用 Stripe,获取卡片令牌 向服务器发送令牌和优惠券 使用令牌创建 Stripe 客户 使用折扣创建订阅并传递客户 ID

现在发生的事情是进行了授权尝试。如果需要 SCA,则订阅状态不完整,需要对最新的发票付款意图状态进行操作。

此时,我可以使用handleCardPayment() 将我的用户重定向到 SCA 流以提示 3DS,一旦完成,订阅状态就会变为活动状态。

如果发票付款因任何原因失败,则订阅状态不完整,并且付款意图要求具有付款操作要求状态。此时,我应该再次向我的客户展示 React Elements 表单,并使用新卡令牌调用 stripe.invoices.pay 端点

今后,所有订阅费用都不需要进一步的 SCA 批准,但是如果客户更改计划或银行要求,那么我可以通过 SCA 流程流程让我的用户返回

流程图在这里:绿色是 UI,橙色是服务器,蓝色是条纹

这里有什么我遗漏或误解的地方吗?我一直在阅读有关创建 SetupIntents 和 PaymentIntents 的信息,但我不确定我是否需要这个?

【问题讨论】:

这张图对我来说很棒!这就是 SCA 就绪状态。我要说的唯一一点是,在“下个月付款”->“生成的发票”->“需要 SCA”流程中,您不必自己拥有 handleCardPayment 的页面,可以配置 Stripe自动向客户发送电子邮件stripe.com/docs/billing/migration/… 但是初始付款的图表是正确的 啊,是的,我应该加上那个。对我来说,我想在应用程序中通知用户以通知他们需要额外的信息/新的付款,但是是的,我确实在文档中看到了这一点。谢谢! 【参考方案1】:

如果您使用 Stripe Billing 产品创建订阅,他们会处理创建 PaymentIntent(如果您要立即付款)或 SetupIntent(如果您要设置试用或计量计费)。你真正需要做的就是handleCardPayment(用于支付)或handleCardSetup(用于设置试用和计量计费)。文档中的This 部分非常好。

如果您不使用计费,他们在 Stripe Developers Youtube 频道上有一个video,这可能有助于消除任何混淆。

希望这会有所帮助:)

【讨论】:

【参考方案2】:

欢迎同胞,卡和代币在Stripe Charges API which is not SCA compilant 中实现。如果您想在欧盟内部使用 Stripe 进行支付,您应该使用支付意图。

卡令牌也可用于创建支付意图。

但是,如果您想减少必要的身份验证次数,您应该使用设置意图(使用usage = "off-session")来创建支付方式,而不是卡令牌。

我有很多老客户仍在使用 Charges API 进行注册。我使用以下策略:

新客户始终通过设置意图和付款方式进行注册。 老客户使用 Charges API 直到他们的令牌失效。然后他们还必须使用设置意图和付款方式。

当然,客户并没有注意到太多。

总而言之,我总是会使用付款方式和设置意图来处理新客户和卡更新。只有通过设置意图,您才能确保您的客户必须尽可能少地进行身份验证。

编辑:关键点是订阅时发生的非会话付款。 Stripe 过程在此处描述:https://stripe.com/docs/payments/cards/saving-cards#saving-card-without-payment

【讨论】:

嗯,现在我更加困惑了。有人告诉我,订阅会在创建发票时生成 PaymentIntent,因此为什么认为我仍然可以调用 customers.create,然后是 subscriptions.create,按照:stripe.com/docs/billing/subscriptions/payment 我不使用订阅 API,但我认为该页面可能有点过时了。在任何情况下,付款方式也应该适用于付款方式:“客户是您的买家。客户拥有唯一的 ID、电子邮件地址和付款方式。“如果您需要 SCA,您应该使用付款方式而不是卡令牌/来源。 我不确定我是否需要担心这种方式的休会付款。它声明“如果您想预先收集卡详细信息,但不确定将来打算何时或向客户收取多少费用,请使用 Setup Intents API。”这对于计量类型的订阅很有用,但我已经为他们创建了一个客户和订阅,所以我知道我要收取多少费用。如果他们更改订阅,则会生成一张新发票并显示价格。我遇到的问题是它没有明确清楚在我的场景中要做什么.. SetupIntents 并不真正适用于您,因为您从订阅中获得了初始付款。订阅会生成一个 PaymentIntent 是的,您 100% 正确地关注 stripe.com/docs/billing/subscriptions/payment。 如果您在接受他们的卡时没有向客户收费,您只需要使用 SetupIntents。否则,您使用 setup_future_usage:off_session 完成 PaymentIntent,或者只是创建订阅并处理其发票的付款(它也会自动设置该用法,在创建发票的 PaymentIntent 上)

以上是关于将 SCA 实施到 Stripe 实施中的主要内容,如果未能解决你的问题,请参考以下文章

一个BADI中实施多个Implementation

颤振问题中的 Firebase 实施

在我的结帐中实施了 Stripe v3 卡片元素,并且 jquery 停止工作

使用 Firebase JS SDK 版本 9 实施 Stripe 订阅

区块链实施[关闭]

DevOps - DevOps落地