使用Recurly V3表单时,如何恢复已过期订阅而非创建新订阅?
问题描述
我使用Recurly V3表单组件创建订阅,并在Rails后端存储Recurly生成的唯一ID。我可通过后端的client.terminate_subscription方法(借助该Recurly唯一ID)取消/终止订阅。但当用户重新提交填写信用卡信息的Recurly表单时,会生成全新订阅。请问能否直接恢复此前已过期的订阅?
回答
可以直接恢复Recurly中已终止或过期的订阅,无需创建新订阅,具体操作分以下场景:
1. 先确认订阅的可恢复状态
不同终止类型的订阅恢复权限不同:
- 到期终止(状态为
expired):只要对应订阅计划仍有效,基本都能直接恢复。 - 立即终止(状态为
terminated):取决于你调用client.terminate_subscription时是否传入了allow_reactivation: true参数。如果传了这个参数,订阅可恢复;若没传或设为false,则无法恢复,只能创建新订阅。
2. 后端通过API恢复订阅
在Rails后端,直接调用Recurly的恢复订阅接口即可,不需要用户重新走表单创建流程。示例代码如下:
# 从数据库取出存储的订阅ID subscription_id = "sub_xxxxxx" begin # 调用Recurly客户端的恢复方法 reactivated_sub = client.reactivate_subscription(subscription_id, { # 可选:如果需要绑定新付款方式,传入Recurly生成的payment_method_id # payment_method_id: "pm_yyyyyy" }) # 更新本地存储的订阅状态等信息 rescue Recurly::Errors::NotFoundError # 订阅不存在或已过恢复窗口期,处理错误 rescue Recurly::Errors::InvalidError # 恢复请求参数无效,处理错误 end
3. 前端流程优化
如果用户需要更新付款信息后再恢复订阅,别让用户走全新订阅的表单:
- 先判断用户是否有可恢复的订阅,有则展示「恢复订阅」按钮,而非「创建订阅」表单。
- 用户点击恢复后,用Recurly表单组件收集新付款方式并生成
payment_method_id,将该ID传给后端,由后端在调用reactivate_subscription时传入,完成订阅恢复与付款方式绑定。
注意事项
- 恢复订阅会延续原订阅的计费周期逻辑,新订阅则会重新开启计费周期,两者账单规则有差异。
- 部分订阅可能存在恢复窗口期,超过期限后无法恢复,只能创建新订阅。
内容的提问来源于stack exchange,提问作者Qasim
相关产品推荐
相关产品推荐

