在14天免费试用期内添加信用卡后,支付状态显示为未完成
const session = await stripe().checkout.sessions.create({
mode: "subscription",
payment_method_collection: "if_required",
subscription_data: {
trial_period_days: 14,
}
payment_method_options: {
card: { request_three_d_secure: "automatic" },
},
// other part of code
});
我创建了一个Stripe Checkout会话,包含一个 14天免费试用,并且 最初不收集卡信息。注册后,用户可以在这14天试用期内的任意时间添加卡片信息。
一切工作正常,但当用户添加卡信息时,Stripe仪表板中的 支付状态显示“Incomplete”,并显示消息 “3D Secure attempt incomplete”。
我的预期是在卡片添加后,试用结束(第15天)时,系统会自动扣费。
为什么在添加卡片后,支付仍显示为 Incomplete,以及如何在试用期结束后确保正确扣费?
解决方案
在你的Checkout Session配置中有两个互相矛盾的信号:
payment_method_collection: "if_required"+trial_period_days: 14→ 由于存在免费试用且没有立即收费,Stripe在结账时判断支付方式为“非必需”。用户在未输入卡信息的情况下完成注册。这是按预期工作的。request_three_d_secure: "automatic"→ 当用户稍后在试用期内添加卡时,Stripe会尝试进行3D Secure验证,作为SetupIntent的一部分,以验证卡以备将来使用。然而,由于此时没有实际扣费(用户仍然在试用期),3DS流程会产生一个待处理的身份验证,可能无法完全完成。
因此建议将 request_three_d_secure 从 payment_method_options 中移除。既然在卡片添加时并不扣费,你也无需在试用期设置阶段强制进行3DS。实际扣费发生在第15天时,Stripe将自动处理3DS。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。
