Stripe Checkout:如何用trial_period_days设置7天免费试用?
问题解决:添加Stripe 7天免费试用功能
你的代码核心问题是subscription_data的格式错误:Stripe Checkout Session API要求它是一个对象,但你写成了数组,这直接导致试用配置不生效。只需把数组包裹的[]改成对象的{}即可解决。
修正后的核心Payload片段
const payload = { mode: 'subscription', payment_method_types: ['card'], line_items: [ { price: priceId, quantity: 1, }, ], allow_promotion_codes: true, // 这里将数组[]改为对象{} subscription_data: { trial_period_days: 7, }, success_url: successUrl, cancel_url: window.location.origin, };
完整修正后的checkOut函数
const checkOut = async (priceId, currency) => { setIsLoading(true); const user = auth.currentUser; console.log("User UID:", user.uid); console.log("Attempting to checkout with Price ID:", priceId); console.log("Currency for checkout:", currency); const checkoutSessionCollection = collection(doc(firestore, 'customers', user.uid), 'checkout_sessions'); const successUrl = `${window.location.origin}/payment-success`; const payload = { mode: 'subscription', payment_method_types: ['card'], line_items: [ { price: priceId, quantity: 1, }, ], allow_promotion_codes: true, subscription_data: { trial_period_days: 7, }, success_url: successUrl, cancel_url: window.location.origin, }; console.log("Creating checkout session with payload:", payload); const docRef = await addDoc(checkoutSessionCollection, payload).catch(error => { console.error("Error creating checkout session:", error); }); console.log("Created checkout session with document ID:", docRef.id); const checkoutSessionDocRef = doc(firestore, 'customers', user.uid, 'checkout_sessions', docRef.id); onSnapshot(checkoutSessionDocRef, async (snap) => { console.log("Checkout session snapshot data:", snap.data()); const { error, sessionId } = snap.data(); if (error) { console.error("Stripe checkout session error:", error); alert(error.message); } if (sessionId) { console.log("Found Stripe session ID:", sessionId); const stripe = await loadStripe("TEST_KEY"); stripe.redirectToCheckout({ sessionId }); setIsLoading(false); } }); };
补充提示
- 确保你的Stripe价格ID对应的月度订阅产品,没有在产品后台预先设置试用期限,否则后台配置会覆盖代码中的参数。
- 用户完成结账后,会进入7天免费试用阶段,试用结束后才会开始按订阅价格扣费。
内容的提问来源于stack exchange,提问作者shevvydj
相关产品推荐
相关产品推荐

