订阅支付:支付巨头的必争之地

支付巨头们纷纷布局订阅支付领域,试图通过技术创新和业务拓展来抢占市场份额。本文将深入探讨订阅支付的业务流程、风控要点、技术实现方式以及主流支付平台的接口对比分析,帮助大家全面了解这一支付领域的竞争格局和发展趋势。

目录概览

主要参与方

典型信息流

订阅发起阶段

用户(就是你咯)在前端页面上选好订阅计划,然后授权支付方式(比如填个虚拟卡信息)。

支付公司就会调用银行或支付网关的 API,生成一个订阅协议(比如 PayPal 的 Billing Agreement),顺便把扣款周期和金额给记下来。

商户收到订阅 ID 后,就会给你开通服务权限,你就能开始享受服务啦。

周期性扣款阶段

到了该扣款的时候,支付公司就会按周期触发扣款请求,通过银行或卡组织把钱划走。

扣款结果会通过 Webhook 通知商户(成功了就继续服务,失败了就提醒一下,具体细节流程见下文:订阅支付UML流程)。用户(还是你)会收到扣款通知,还能通过支付公司或商户平台管理订阅状态,比如查看、修改或者取消订阅。

异常处理阶段

支付失败:系统会自动尝试重试,要是还是不行,就暂停服务。这时候,得把失败原因(比如余额不足、风控拦截)记录下来,并且通知用户(还是你)。后续如能扣到款是否支持恢复服务?

取消订阅:要是用户(你)不想订阅了,发起取消请求后,支付公司就会终止扣款计划,并且把状态同步给商户。

业务方面:

如扣款周期已过,仍然没有扣款成功,是否立即停止用户的服务,具体业务场景措施肯定不同?

更改订阅计划:

Webhook消息丢失

商户系统检测到订阅一直处于pending状态(超过30分钟)。

调用支付平台提供的「订阅状态查询接口」主动补偿:

GET /v1/subscriptions/{subscription_id}

Response:

{

“status”: “active”,

“last_payment_time”:

“2024-05-20 14:00:00”

}

根据查询结果更新本地状态,并补发用户通知。

风控与合规要点

案例:微信支付周期扣费产品业务流程

下发扣费前通知后,在约定时间内:

注意:目前支持通知后24小时自动扣费、或提前使用独立的通知接口两种模式。(支付中签约:pay/contractorder是独立接口,以下扣款规则只适用于申请扣款接口:pay/pappayapply,两种模式只能二选一)

微信周期扣费商户接口调用流程

1)商户在1号调用预扣费通知。

2)2号为扣费等待期,商户不可扣费,用户可随时关闭。

3)3~9号共7天为可扣费期

订阅支付的实现方式

1. 技术集成方案

2. 核心功能模块

主流竞品接口对比分析

Stripe订阅支付接口

接口功能:支持创建订阅计划、周期性扣款、试用期设置及失败重试。

核心请求参数

响应参数

调用流程

  1. 用户选择订阅计划并授权支付。
  2. 商户调用POST /v1/subscriptions创建订阅。
  3. Stripe验证支付方式并生成首次扣款。
  4. 商户通过Webhook接收invoice.payment_succeeded事件更新订阅状态。

PayPal定期付款接口

接口功能:支持固定周期扣款、账单协议管理。

核心请求参数

响应参数

调用流程:

  1. 商户调用POST /v1/billing/plans创建订阅计划。
  2. 用户通过授权链接完成支付授权。
  3. PayPal通过Webhook通知商户激活订阅。
  4. 周期性扣款自动执行,商户监听PAYMENT.SALE.COMPLETED事件。

支付宝自动扣款接口(
alipay.fund.auth.order.app.freeze)

接口功能:基于预授权协议实现定期扣款。

核心请求参数

响应参数

调用流程

微信支付合约支付接口

接口功能:支持按周期或按次扣款,适用于会员订阅。

核心请求参数

响应参数

调用流程

接口文档设计关键点

幂等性处理

有容错能力的序列设计

用户 -> 商户系统: 选择订阅计划并支付

商户系统 -> 支付平台: 调用创建订阅接口(携带idempotency_key)

支付平台 -> 支付平台: 校验幂等性(通过idempotency_key)

支付平台 -> 银行: 验证支付方式并扣款

alt 扣款成功

支付平台 –> 商户系统: 返回{“code”:0, “subscription_id”:”sub_123″, “status”:”pending”}

支付平台 -> 商户系统: Webhook发送PAYMENT_SUCCESS事件

商户系统 -> 商户系统: 更新状态为active,开通服务

商户系统 -> 用户: 发送成功邮件

else 扣款失败

支付平台 –> 商户系统: 返回{“code”:2001, “message”:”余额不足”}

支付平台 -> 支付平台: 记录待重试任务(定时触发)

loop 重试逻辑(最多3次)

支付平台 -> 银行: 重试扣款

alt 重试成功

支付平台 -> 商户系统: Webhook发送PAYMENT_SUCCESS事件

else 重试失败

支付平台 -> 商户系统: Webhook发送PAYMENT_FAILED事件

本文由 @支付唧唧咋咋 原创发布于人人都是产品经理。未经作者许可,禁止转载

题图来自Unsplash,基于CC0协议

该文观点仅代表作者本人,人人都是产品经理平台仅提供信息存储空间服务

展开阅读全文

更新时间:2025-05-04

标签:科技   必争之地   巨头   接口   用户   计划   周期   通知   状态   系统   流程   参数   周期性

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020- All Rights Reserved. Powered By 61893.com 闽ICP备11008920号
闽公网安备35020302035593号

Top