我已经实现了本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安全身份验证的卡来说效果很好,但对于需要身份验证的卡片,我以后无法创建费用,并获得";需要3D安全认证";PaymentIntent的状态。并且客户不能对其进行身份验证,因为他们在此期间不在网站中("非会话"(。
这种3d安全行为只在Stripe测试卡上吗?或者我如何在需要3d身份验证的卡上实现未来的卡支付?
交易是否需要3D Secure完全取决于持卡人的银行。当法规(如SCA(要求使用3D Secure时,Stripe将尽可能申请豁免,以限制需要身份验证的交易的可能性,但这并不能得到保证。因此,是的,当你投入生产时,你的客户可能(但不太可能(在每笔交易中都需要3D Secure。
对于我无法创建的需要身份验证的卡稍后收费,并获得";需要3D安全认证";PaymentIntent的状态。客户无法验证它,因为它们在此期间不在网站中("关闭"会话"(。
在会话外付款的情况下,创建付款意向时应将off_session
属性设置为true
:
https://stripe.com/docs/api/payment_intents/create#create_payment_intent-关闭会话
这样做告诉Stripe,当你在生产时,申请休班付款豁免。您可以使用下表中的第一张监管测试卡测试这些类型的支付行为:
https://stripe.com/docs/testing#regulatory-卡片
在大多数情况下,豁免应该足够,付款不需要身份验证,但持卡人的银行仍有可能要求3D Secure进行交易。对于这些情况,您需要在您的端编写逻辑,以通知您的客户失败的交易,并让他们回到会话中处理付款。