如何将Stripe客户从同一产品旧订阅价计划迁移至新计划?
问题:如何将客户从同一产品的旧周期性订阅价格计划迁移至该产品的新周期性订阅价格计划?
已执行的操作
- a) 通过API创建产品
curl https://api.stripe.com/v1/products \ -u sk_test_xxxxxxxxxxxxxxxxxxxxxxxxxx: \ -d name="Daily Subscription"
- b) 在该产品下创建价格计划:
curl https://api.stripe.com/v1/prices \ -u sk_test_xxxxxxxxxxxxxxxxxxxxxxxxxx: \ -d unit_amount=1000 \ -d currency=usd \ -d "recurring[interval]"=day \ -d product=prod_xxxxxxxxxxx # 从第一个API响应中获取
- c) 创建客户:
curl https://api.stripe.com/v1/customers \ -u sk_test_xxxxxxxxxxxxxxxxxxxxxxxxxx: \ --email="alive-to-die@gmail.com" --name="alive-to-die"
- d) 客户购买该计划:
curl https://api.stripe.com/v1/checkout/sessions \ -u sk_test_xxxxxxxxxxxxxxxxxxxxxxxxxx: \ --data-urlencode success_url="https://example.com/success" \ -d "line_items[0][price]"=price_xxxxxxxxxxxxxx \ # 从价格计划API响应中获取 -d "line_items[0][quantity]"=1 \ -d mode=payment
问题背景
网站管理员希望将原每日10美元的计划价格调整为每日12.5美元,但遇到以下限制:
- Stripe不允许更新已有用户订阅的现有计划价格,官方说明:
无法修改计划的ID、金额、货币或计费周期。
- 无法通过调整数量实现价格变更,因为数量不能设置0.5这类非整数数值。
- 删除旧价格计划并创建新计划无法影响老客户,官方说明:
删除计划后无法添加新订阅者,但现有订阅者不受影响。
已成功在同一产品下创建了新的价格计划,需解决如何让老客户绑定到新价格计划的问题。
解决方案
1. 获取目标客户的订阅ID
先通过客户ID查询其名下的订阅记录,找到需要更新的订阅ID:
curl https://api.stripe.com/v1/subscriptions \ -u sk_test_xxxxxxxxxxxxxxxxxxxxxxxxxx: \ -d customer=cus_xxxxxxxxxxx # 替换为目标客户的ID
返回结果中的id字段(格式为sub_xxxxxxxxxxx)即为需要操作的订阅ID,同时记录该订阅下的订阅项ID(items.data[0].id,格式为si_xxxxxxxxxxx)。
2. 更新订阅关联的价格
使用订阅更新API,将原订阅项替换为新价格,同时可配置计费规则:
curl https://api.stripe.com/v1/subscriptions/sub_xxxxxxxxxxx \ -u sk_test_xxxxxxxxxxxxxxxxxxxxxxxxxx: \ -d "items[0][id]"=si_xxxxxxxxxxx \ # 替换为订阅项ID -d "items[0][price]"=price_xxxxxxxxxxx \ # 替换为你的新价格ID -d proration_behavior=create_prorations # 可选:生成按比例计费的账单,也可设为none跳过
- 若希望变更立即生效并收取差价,可添加
payment_behavior=default_incomplete; - 若希望变更在下一个计费周期生效,保持默认
payment_behavior=default即可,不会产生额外账单。
3. 批量迁移(可选)
如果需要迁移大量老客户,可通过脚本循环遍历客户订阅列表,逐个执行上述更新操作。注意遵守Stripe的API速率限制,必要时添加延迟。
核心说明
- 新价格必须与旧价格属于同一产品,否则会报错;
- 更新后,订阅后续的所有计费都会使用新价格;
- 按比例计费的规则可根据业务需求灵活调整,比如选择在下次计费时统一收取差价。
内容的提问来源于stack exchange,提问作者Death-is-the-real-truth
相关产品推荐
相关产品推荐

