Stripe:为未来的支付设置一张经过 3d 安全认证的卡
Stripe: Setting up a card for future payments that is 3d secure authenticated
我已经实施了此 Stripe 教程中描述的有关如何保存卡信息以供日后使用(未来付款)的步骤:
https://stripe.com/docs/payments/save-during-payment
现在已经实现并且工作正常。
我在卡上收取 0.5 美元以触发 3d 安全身份验证过程。它的工作原理是,它首先检查 PaymentIntent 状态是什么,如果它是“action_required”,那么它会重定向到这个 HTML,我在 JS 中实现了以下内容:
function _3dsec(stripe_publishable_key, pi_secret) {
document.addEventListener("DOMContentLoaded", function(event) {
var stripe = Stripe(stripe_publishable_key);
stripe.confirmCardPayment(pi_secret).then(function(result) {
if (result.error) {
$("#3ds_result").text("Error!");
$("#3ds_result").addClass("text-danger");
} else {
$("#3ds_result").text("Card succesfully validated");
$("#3ds_result").addClass("text-success");
}
})
})
}
这也很有效,如果卡需要,它会进行 3D 安全验证。我一直只用 Stripe 卡片进行测试。然后我的想法是我退还 0.5 美元,因为它只是用于验证卡。
但是,在我的产品中,费用是在之后完成的。只有一个包含用户和付款信息的注册页面,然后在用户使用我的产品时产生费用。这适用于不需要 3D 安全身份验证的卡,但对于需要身份验证的卡,我以后无法创建费用,也无法在 PaymentIntent 上获得“需要 3D 安全身份验证”状态。客户无法对其进行身份验证,因为他们在那段时间不在网站上(“关闭会话”)。
这种 3d 安全行为是否仅适用于 Stripe 测试卡,或者我如何在需要 3d 身份验证的卡上实现未来的卡支付?
交易是否需要 3D Secure 完全取决于持卡人的银行。当法规(例如 SCA)要求 3D Secure 时,Stripe 将尽可能申请豁免以限制交易需要身份验证的可能性,但不能保证。所以,是的,当您投入生产时,您的客户可能(但不太可能)在每笔交易中要求 3D Secure。
for the cards that require the authentication I'm not able to create
charges later on, and get the "3D secure authentication required"
status on the PaymentIntent. And the customer is not able to
authenticate it as they are not in the website during that time ("off
session").
在付款 off-session 的情况下,您应该在创建付款意向时将 off_session
属性 设置为 true
:
https://stripe.com/docs/api/payment_intents/create#create_payment_intent-off_session
这样做会告诉 Stripe 在您投入生产时申请 off-session 付款豁免。您可以使用此 table:
中的第一张监管测试卡来测试这些类型的付款方式
https://stripe.com/docs/testing#regulatory-cards
在大多数情况下,豁免应该足够了,付款应该不需要身份验证,但持卡人的银行仍有可能为交易请求 3D Secure。对于这些情况,您将需要在您的一端编写逻辑以通知您的客户交易失败并让他们回来 on-session 以处理付款。
我已经实施了此 Stripe 教程中描述的有关如何保存卡信息以供日后使用(未来付款)的步骤:
https://stripe.com/docs/payments/save-during-payment
现在已经实现并且工作正常。
我在卡上收取 0.5 美元以触发 3d 安全身份验证过程。它的工作原理是,它首先检查 PaymentIntent 状态是什么,如果它是“action_required”,那么它会重定向到这个 HTML,我在 JS 中实现了以下内容:
function _3dsec(stripe_publishable_key, pi_secret) {
document.addEventListener("DOMContentLoaded", function(event) {
var stripe = Stripe(stripe_publishable_key);
stripe.confirmCardPayment(pi_secret).then(function(result) {
if (result.error) {
$("#3ds_result").text("Error!");
$("#3ds_result").addClass("text-danger");
} else {
$("#3ds_result").text("Card succesfully validated");
$("#3ds_result").addClass("text-success");
}
})
})
}
这也很有效,如果卡需要,它会进行 3D 安全验证。我一直只用 Stripe 卡片进行测试。然后我的想法是我退还 0.5 美元,因为它只是用于验证卡。
但是,在我的产品中,费用是在之后完成的。只有一个包含用户和付款信息的注册页面,然后在用户使用我的产品时产生费用。这适用于不需要 3D 安全身份验证的卡,但对于需要身份验证的卡,我以后无法创建费用,也无法在 PaymentIntent 上获得“需要 3D 安全身份验证”状态。客户无法对其进行身份验证,因为他们在那段时间不在网站上(“关闭会话”)。
这种 3d 安全行为是否仅适用于 Stripe 测试卡,或者我如何在需要 3d 身份验证的卡上实现未来的卡支付?
交易是否需要 3D Secure 完全取决于持卡人的银行。当法规(例如 SCA)要求 3D Secure 时,Stripe 将尽可能申请豁免以限制交易需要身份验证的可能性,但不能保证。所以,是的,当您投入生产时,您的客户可能(但不太可能)在每笔交易中要求 3D Secure。
for the cards that require the authentication I'm not able to create charges later on, and get the "3D secure authentication required" status on the PaymentIntent. And the customer is not able to authenticate it as they are not in the website during that time ("off session").
在付款 off-session 的情况下,您应该在创建付款意向时将 off_session
属性 设置为 true
:
https://stripe.com/docs/api/payment_intents/create#create_payment_intent-off_session
这样做会告诉 Stripe 在您投入生产时申请 off-session 付款豁免。您可以使用此 table:
中的第一张监管测试卡来测试这些类型的付款方式https://stripe.com/docs/testing#regulatory-cards
在大多数情况下,豁免应该足够了,付款应该不需要身份验证,但持卡人的银行仍有可能为交易请求 3D Secure。对于这些情况,您将需要在您的一端编写逻辑以通知您的客户交易失败并让他们回来 on-session 以处理付款。