payin商户操作手册

最新文章

删除 Stripe 优惠券,不等于移除已生效的折扣

区分停止未来优惠券使用与移除订阅折扣,保留需要继续的叠加优惠,并在宣布活动结束前检查客户级折扣回退。

发布日期及来源核查日期:

面向运营的选择:删除优惠券、停用单个促销码,还是移除或选择性更新已应用的订阅折扣。不讨论价格归档、首次交易资格、历史账单更正或批量迁移实现。

1. 先决定:关闭优惠入口,还是终止已授予的优惠

删除 Stripe 优惠券会阻止它被应用到未来的订阅或账单,但不会移除已经拥有该折扣的订阅或账单中的折扣。[1] 因此,活动停止接受新申请后,已有订阅者仍可能继续享受优惠。

这里涉及不同的对象:优惠券定义折扣规则;促销码是关联优惠券、面向客户输入的代码;Discount 则表示优惠券的一次实际应用。[1] 建议先写明期望的客户结果,再选择删除操作。“不再接受这个优惠”与“这些订阅者不再享受折扣”是两项独立决定。

这一问题有真实的开发者需求背景:有人询问如何在更新订阅时移除优惠券,并报告传入 Ruby 的 nil 后,该字段没有出现在请求中。[4] 这条历史问题仅证明存在此类集成疑问,不能作为当前 Stripe 行为或通用软件开发工具包解决方案的依据。

2. 选择影响范围最小的关闭方式

  • 停止底层优惠的新应用:删除优惠券。Stripe 提供 DELETE /v1/coupons/{COUPON_ID};成功响应包含优惠券标识和删除标记,并不证明已有折扣已经移除。[2]
  • 只停止一个客户可见的促销码:使用该促销码的 active 控制,而不是删除其他促销码也在使用的优惠券。多个促销码可以关联同一张优惠券。[1]
  • 终止已应用的订阅优惠:移除或更新相关订阅的折扣。Stripe 单独提供移除订阅折扣的接口。[3]

优惠券不能直接停用;删除优惠券会归档关联的促销码。如果底层优惠券失效,其促销码会永久停用,无法重新激活。[1] 建议删除前盘点关联促销码,不要把删除当作可以随时恢复的暂停按钮。

3. 移除一个优惠时,保留其他优惠

Stripe 提供 DELETE /v1/subscriptions/{SUBSCRIPTION_ID}/discount,用于移除订阅当前应用的折扣;订阅没有折扣时,该接口可能返回错误。[3] 不要把这个以单数描述的接口当作选择性编辑叠加折扣的操作说明。

对于使用 discounts 的订阅,如果不想改变现有折扣,就不要设置该参数。如果需要更新,则必须传入所有希望保留的既有 couponpromotion_codediscount。传入 discounts = "" 可以清空订阅级折扣。[1]

示例:一个订阅同时享有活动折扣与协商确定的忠诚客户折扣。若只终止活动优惠,更新时应保留忠诚客户折扣条目,而不是全部清空。还应保留预期顺序:Stripe 明确提示,百分比折扣与固定金额折扣的应用顺序会影响最终结果。[1]

建议在沙盒中检查所用开发工具包实际发送的请求编码,不要假定省略参数、null、空集合和文档要求的空字符串可以互换。使用 discounts 设置过多个折扣后,Stripe 不允许再用已弃用的 couponpromotion_code 参数更新该订阅。[1]

4. 不仅检查订阅,还要检查客户与账单

清空订阅级折扣,不代表下一张账单一定没有折扣。Stripe 说明,当订阅没有折扣时,客户级折扣如果存在,就会应用于账单;订阅项目也可以拥有折扣。[1] 建议检查客户、订阅、订阅项目和账单级折扣信息,再宣布优惠已经结束;其他层级如需修改,应分别使用对应的官方操作。

订阅折扣列表为空,也不能证明优惠券从未使用。对于 duration=once 的一次性优惠券,消耗该优惠的账单定稿后,Stripe 会从订阅列表移除该折扣,但相应账单仍保留已应用的折扣信息。[1] 客服应查看有关账单,而不是仅凭订阅当前状态推断历史。

5. 将账单生效时间与活动关闭分开处理

仅更新 discounts 不会产生按比例计费调整,也不会单独生成账单;新折扣状态会在该订阅下次创建账单时应用。如果同时执行会触发按比例调整的修改,例如改变订阅项目数量,Stripe 会使用更新后的价格和折扣状态计算按比例调整金额。[1] 建议业务只要求修改折扣时,将其作为独立变更;如同时迁移套餐或数量,应另外审查。

示例甲:活动今天结束,但商家承诺已有订阅者保留已领取的优惠。删除优惠券以阻止未来应用,并保留他们当前的折扣;删除不会撤回这些已有优惠。[2]

示例乙:某个订阅的优惠已获批准终止。更新该订阅的折扣状态,保留其他约定优惠,并检查下一张账单的计算结果及客户级折扣回退。[1] 客户通知与变更授权应作为独立的业务控制。上述示例都不是更正已定稿账单或追回历史优惠的操作流程。

6. 上线前验证预期边界

以下是建议执行的检查,并非本文已经完成的测试:

  1. 记录优惠券标识、关联促销码标识、受影响订阅、需要保留的折扣及批准的生效日期。
  2. 在沙盒中分别检查:重新申请已删除优惠券,以及读取此前已使用该券的订阅。文档预期是阻止新的应用,但不会自动撤回已有折扣。[1]
  3. 分别验证保留部分叠加折扣与全部清空的更新,对照已批准结果检查保留条目及其顺序。
  4. 检查客户级折扣回退、订阅项目以及相关账单;纳入一次性优惠券已被定稿账单消耗的情形。[1]
  5. 记录实际请求编码和响应。重复删除优惠券可能因已经删除而报错;移除订阅折扣可能因不存在折扣而报错。应核对当前状态,不要把每次重试都记录为一次新的成功变更。[2][3]

7. 范围、来源与日期

本文为于 2026-09-23 核查的文档研究,不是实际账户测试,不代表 PayIn 具备相同能力,也不是法律、税务或财务建议。所引文档没有建立逐国可用性清单。生产操作前应确认账户支持、接口版本、开发工具包请求编码及客户约定。未完成的结账会话、已安排的未来变更、历史账单更正和批量迁移需要单独审查;本文没有测试这些情形。

技术结论依据 Stripe 官方文档;社区问题仅用作定性的需求证据。检索日期不是发布日期;来源未注明的发布和更新日期均保留为未知。

  1. [1] 优惠券与促销码 — 未注明发布及更新日期。核查于 2026-09-23。
  2. [2] 删除优惠券 — 未注明发布及更新日期。核查于 2026-09-23。
  3. [3] 移除订阅折扣 — 未注明发布及更新日期。核查于 2026-09-23。
  4. [4] 更新 Stripe 订阅时如何移除优惠券 — 发布于 2019-10-30;未注明更新日期。核查于 2026-09-23。

更多指南