保存卡以备将来付款时使用 Stripe 3D Secure

Posted

技术标签:

【中文标题】保存卡以备将来付款时使用 Stripe 3D Secure【英文标题】:Stripe 3D Secure when Saving Cards for future payments 【发布时间】:2019-07-05 20:57:07 【问题描述】:

保存卡以备将来付款时是否可以使用 3D Secure?

来自 Stripe 的文档,https://stripe.com/docs/sources/three-d-secure。这似乎是这样做的方法。

但是根据文档,不再推荐使用 PaymentIntents 来代替:

不再推荐使用此 API。如果您希望使用 3D Secure,我们强烈建议您采用 PaymentIntents,我们的新支付 API。

那么,有没有办法使用 PaymentIntents(利用 3D 安全)来保存卡而不立即付款?

【问题讨论】:

我不确定你的问题是否有意义。付款意图明确表示收取付款的尝试,并且 3D Secure 仅在您付款时发生。如果您只是在不付款的情况下保存卡,则可以使用链接的第 1 步中的 stripe.js 的 stripe.createSource 和 save it to a customer object 创建一个源。然后,稍后,如果您想从卡中扣款,您可以创建一个付款意图。 stripe.com/docs/payments/payment-intents/… 我们的用例是我们想保存客户的卡以备将来收费,这些未来的收费将在我们的服务器后台自动完成,因此我们无法从客户那里获得 3d 安全信息时间。所以我们想在保存卡片的过程中使用 3D 安全认证。我已经询问了条纹支持,他们说目前不支持在不付款的情况下保存卡的 3D 安全。 嗨@len 我正在尝试实现同样的目标,你有没有找到一种方法来实现支付意图? 【参考方案1】:

只是为了让你知道,我已经联系了 Stripe 支持,因为我和你有同样的担忧,这里是答案:

[...] PaymentIntents 目前不支持创建源而不创建收费。遗憾的是,也无法将 3DSecure 与当前保存信用卡的方法集成。

PaymentIntents 是一个相当新的 Stripe 产品,我们仍在解决问题并决定我们将支持哪些功能。保存资源在我们的优先级列表中绝对是重中之重,未来会有更多关于此更新的信息。

我试图获取有关他们路线图的更多信息,以了解该功能是否会在 9 月之前发布,但支持人员无法向我提供信息。

编辑: stripe 改进了它的文档,现在解释了如何在尊重 SCA https://stripe.com/docs/payments/cards/saving-cards#saving-card-without-payment 和 https://stripe.com/docs/payments/cards/charging-saved-cards 的同时实现你想要的东西

【讨论】:

请看一下这里的其他答案。我也在试图弄清楚同样的事情。:/【参考方案2】:

保存卡以备将来付款时是否可以使用 3D Secure?

我用PaymentIntents做的是创建一个客户然后付款:

customer = stripe.Customer.create(

payment = stripe.PaymentIntent.create(customer=customer_id, ....

在付款时,您有卡类型payment['charges']['data'][0]['payment_method_details']['card']['brand']和卡的后4位payment['charges']['data'][0]['payment_method_details']['card']['last4']

您可以在本地存储customer_id、卡类型和最后 4 位数字,以便下次向该客户展示。 要再次付款,您只需使用stripe.PaymentIntent.create() 和您第一次保存的customer.id。 如果客户想使用另一张卡就这样做

customer = stripe.Customer.modify(
                customer_id,
                source=token_id
           )

token_id 来自你前端的 stripe.js

【讨论】:

据我了解,这个答案与另一个答案相矛盾,后者刚刚得到 Stripe 支持的回复,即这是不可能的 :) 您应该能够存储卡的“元数据”似乎是合乎逻辑的客户和 PaymentIntent 可以在以后创建,然后才会触发 3D-Secure 2.0 步骤。但它真的有效吗? :) 我认为您没有得到用例:作者(以及参与此主题的每个人)想要实现的是:在一天保存一张启用了 3D 安全的客户卡,然后在以后对卡进行收费.当您想要构建自定义订阅系统并且提供的订阅系统不适合您的需求时,就会出现这种情况。目前看来 PaymentIntents 不支持这个用例。我们都知道您可以创建一个 PaymentIntents,它将“立即”从卡中收取费用,并保存此卡以供以后其他付款 当您创建客户时,您会在用户写下他的卡号后从 stripe.js 发送一个 token_id,因此您在 Stripe 中创建的客户拥有卡信息。在此之后,您就拥有了客户的 ID,因此您可以使用您想要的费用创建一个 PaymentIntent。对我来说是在测试模式下工作,我现在唯一的问题是当需要 3DSecure 时我没有收到来自 iframe 的消息,但付款在条纹仪表板中:) 我不知道作者是在谈论在本地保存卡片还是在条纹中保存卡片。我认为一开始应用程序将卡片保存在本地,并且从以前开始,我们不保存并且不想在本地保存卡片。我认为支持人员的回答是在本地保存卡片,PaymentIntents 的目的不是在本地保存卡片,而是在他们的系统上保存。【参考方案3】:

使用the SetupIntent API,基本上是PaymentIntent,数量为空(相同的工作流程)。

【讨论】:

以上是关于保存卡以备将来付款时使用 Stripe 3D Secure的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Stripe 的 PaymentIntents API 接受使用已保存卡的会话付款

使用 activemerchant 保存付款以备后用

Stripe connect - 在付款过程中保存卡

Stripe 更新订阅并使用 3d 安全添加新的付款方式

在 WooCommerce 中以编程方式收取保存的 Stripe 卡

应用程序功能要求保存信用卡详细信息以备将来使用。需要调查是不是存在任何特定的安全设计