You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 18:13:15