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

Stripe/NodeJS:传递空promotion_code报错,求解决方案

解决Stripe订阅创建时promotion_code空字符串报错问题

根据报错提示,promotion_code字段不能传空字符串,要么完全省略这个字段,要么传有效的非空优惠码值。以下是几种简单可行的实现方式:

方法一:条件构建参数对象

先定义基础的订阅参数,再根据promo是否有效决定是否添加promotion_code字段:

// 先创建基础参数对象
const subscriptionParams = {
  customer: customer.id,
  items: [{ price: "price_1N1TKrGxUje7SlyIeNldQvLT" }],
  payment_settings: {
    payment_method_options: {
      card: {
        request_three_d_secure: "any",
      },
    },
    payment_method_types: ["card"],
    save_default_payment_method: "on_subscription",
  },
  expand: ["latest_invoice.payment_intent"],
};

// 仅当promo不为空字符串(含纯空格)时,添加promotion_code字段
if (promo && promo.trim() !== "") {
  subscriptionParams.promotion_code = promo;
}

// 发起订阅创建请求
const subscription = await stripe.subscriptions.create(subscriptionParams);

方法二:对象展开运算符简洁写法

利用JavaScript的对象展开语法,条件性地包含目标字段:

const subscription = await stripe.subscriptions.create({
  customer: customer.id,
  items: [{ price: "price_1N1TKrGxUje7SlyIeNldQvLT" }],
  payment_settings: {
    payment_method_options: {
      card: {
        request_three_d_secure: "any",
      },
    },
    payment_method_types: ["card"],
    save_default_payment_method: "on_subscription",
  },
  expand: ["latest_invoice.payment_intent"],
  // 仅当promo有效时才注入该字段,空值场景下不会添加
  ...(promo && promo.trim() !== "" ? { promotion_code: promo } : {}),
});

关键注意点

  • 必须用promo.trim() !== ""判断,避免用户输入纯空格这类无效值
  • 不要传null或undefined,直接省略promotion_code字段才符合Stripe的要求——报错信息明确说明要么移除该参数,要么传非空值

内容的提问来源于stack exchange,提问作者Paul VI

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 04:07:38