怎么给用户升级或降级套餐?
调用/api/v1/subscription/change。变更请求会基于原订阅创建一个新订阅,原订阅的剩余金额会结转到新订阅上——您不需要手动取消再重新创建。
- 通过
/api/v1/subscription/change/inquiry跟踪结果。 - 变更完成时,Waffo 也会推送
SUBSCRIPTION_CHANGE_NOTIFICATION。
change、update 和 manage 有什么区别?
金额更新会按您的合同限额校验。
不同周期能收不同的金额吗?
可以。两种机制组合起来可以覆盖分级定价和首期优惠:- 试用期——创建订阅时设置
trialPeriodAmount和numberOfTrialPeriod。通过trialPeriodType和trialPeriodInterval支持自定义试用粒度。 - 计划金额——为特定的正式周期配置按期金额(例如首期折扣),可在创建时配置,也可之后通过
/api/v1/subscription/update配置。
amount。
扣款失败了,接下来会怎样?
扣款失败会按订阅的重试策略自动重试——您不需要自己触发重试。- 每一次支付尝试,包括失败原因、时间戳和重试详情,都会通过订阅支付订单通知推送。
- 如果您只关心每个计费周期的最终结果,请改为监听
SUBSCRIPTION_PERIOD_CHANGED_NOTIFICATION——它每个周期触发一次,携带最终结果,跳过中间的重试事件。
我应该监听哪些订阅通知?
对任何通知,处理完成后请返回
success。如果 Waffo 收到 failed 或 unknown,Waffo 会按分布在接下来一天内的退避计划重试通知;计划详情见Webhook 通知重试。
用户怎么取消订阅?
两条路径:- 商户发起——调用
/api/v1/subscription/cancel。 - 用户发起——把用户重定向到通过
/api/v1/subscription/manage获得的托管管理页面,用户可在那里查看详情并取消。 - 钱包侧——如果用户在钱包 App 内撤销了支付授权,钱包会通知 Waffo。如果被撤销的支付方式是订阅上唯一的一个,订阅会自动取消;如果有备用支付方式,则备用方式成为默认。这会通过订阅状态通知告知您,因此请以Webhook 通知——而不是您自己的记录——作为订阅是否仍然有效的事实来源。
Waffo 支持按日计费或跨币种订阅吗?
两者都支持:DAILY是受支持的periodType,与其他计费周期并列。- 通过
userCurrency字段支持跨币种订阅——用户以其本地币种支付。
subscriptionManagementUrl 应该传什么?
subscriptionManagementUrl 在创建订阅时的文档定义为必填,您应始终传入。请注意,服务端目前不会拒绝省略该字段的请求——省略不会以校验错误的形式暴露,而是会在之后以发送到您页面的客户邮件中缺少链接的形式暴露。请将其指向一个用户可以在桌面浏览器中打开的页面。App deeplink 在这里是很差的选择:在 PC 上打开的用户可能根本无法访问该页面。您有三个选项:
- 自建带鉴权的订阅管理页面并传入其 URL。
- 用您自己的页面包裹 Waffo 从
/api/v1/subscription/manage返回的托管页面,并传入该页面。 - 直接使用 Waffo 的托管管理页面。
我收到了订阅通知,但马上查询却显示订阅不是 ACTIVE
订阅状态是最终一致的。通知到达时,内部状态更新可能仍在落地,因此紧接着发起的查询可能返回尚未 ACTIVE 的状态。这是读取时机的问题,不是订阅失败。
请这样处理:
- 不要把第一次查询结果当作最终结果。稍作等待后重新查询。
- 优先以订阅状态通知作为状态变化的触发器,用查询来确认而不是决策。
试用期金额可以和常规金额一样吗?
不可以。创建时trialPeriodAmount 必须严格小于 amount;相等的值会被拒绝,返回参数错误,报错信息为 trial period amount should be less than subscription amount。零是有效的试用金额(免费试用),因此可接受范围为 0 ≤ trialPeriodAmount < amount。
如果试用的目的是调整计费日历而不改变价格,请完全不要配置试用——用 startTime 推迟首次扣款,或用 scheduledAmounts 为特定早期周期定价。