无法更新Stripe优惠券:调用API时提示未知参数错误
问题解决:Stripe优惠券更新报错「Received unknown parameters: duration, percent_off」
问题原因
Stripe的Coupon对象创建后,**percent_off(折扣百分比)和duration(有效期类型)**属于不可修改的核心字段,调用stripe.coupons.update时传入这两个参数,就会触发「未知参数」的报错。你代码里试图修改这两个字段,不符合Stripe的API规则。
修正方案
如果需要调整折扣比例或有效期类型,只能创建新的优惠券,无法修改已有优惠券的这两个属性。以下是调整后的代码逻辑:
const update_coupon = async (req, res) => { const { percent_off, duration, new_coupon_name } = req.body; const couponId = req.params.coupon_id; try { // 1. 标记旧优惠券为失效(可选,防止继续被使用) await stripe.coupons.update( couponId, { active: false } ); // 2. 创建新优惠券,使用新的折扣和有效期参数 const newCoupon = await stripe.coupons.create({ percent_off: percent_off, duration: duration, name: new_coupon_name || "Updated Coupon", // 可按需添加其他参数,比如redeem_by(兑换截止时间)等 }); console.log("New coupon created:", newCoupon); res.status(200).json({ message: "旧优惠券已停用,新优惠券创建完成", old_coupon_id: couponId, new_coupon: newCoupon }); } catch (error) { console.error("优惠券更新处理失败:", error.message); res.status(500).json({ error: "优惠券更新操作失败" }); } };
补充说明
- Stripe允许修改的优惠券字段包括:
active(是否激活)、name(名称)、redeem_by(兑换截止时间)、max_redemptions(最大兑换次数)等。 - 若仅需修改合法字段,直接在
stripe.coupons.update中传入对应参数即可,比如修改优惠券名称:
const updatedCoupon = await stripe.coupons.update( couponId, { name: "新折扣名称" } );
内容的提问来源于stack exchange,提问作者kenil
相关产品推荐
相关产品推荐

