APM 订阅支付
订阅支付是一种周期性自动扣款解决方案,可以帮助您完成周期性自动收款。仅需一次授权即可绑定支付账户享受持续的订阅服务,且支持动态调整订阅配置(如修改周期/金额、取消续订或终止服务等)。整个流程既便捷高效,又安全可靠。
本文主要针对 APM 类支付方式通过 API 方式集成进行阐述。不同支付方式的集成策略各异,其优缺点直接影响开发成本与用户体验。要做出最适合您业务的技术决策,请参阅场景适配指引以深入了解各集成方案的特性与适用场景。
用户体验
首次绑定
后续扣款
交互流程
以下为订阅周期、订阅创建以及接收扣款通知的流程示意。
订阅周期
订阅创建
接收扣款通知
集成准备
- 已获得 client ID。
- 已完成密钥配置。
- 已完成异步通知接收地址的配置。
- 集成服务端 SDK 资源包,并完成接口库安装及请求示例初始化。具体操作请参阅服务端 SDK。
集成步骤
开始集成,请按照以下步骤操作:
- 添加支付方式列表
- 创建订阅
- 跳转授权绑定链接
- 接收订阅结果异步通知
- 接收订阅续期异步通知
步骤 1:添加支付方式列表 客户端
订阅场景下,买家进入支付方式选择页,需展示本次需要集成的支付方式标识和名称,供买家根据自身需求和偏好选择。请联系 Antom 技术支持以获取各支付方式的标识和名称。
注意:支付方式列表页面需要由您自行实现。
步骤 2:创建订阅 服务端
创建订阅包含以下关键参数:
参数名 | 是否必需 | 说明 |
periodRule.periodType | 是 | 订阅周期,支持 YEAR 、MONTH 、WEEK 、DAY 4 类周期。 |
subscriptionNotificationUrl | 是 | 订阅关系通知地址,包括创建、更新、撤销等。 |
subscriptionRequestId | 是 | 商户端生成的唯一 ID,每次发起创建订阅都要有个新的 ID。 |
subscriptionDescription | 是 | 订阅描述。 |
subscriptionStartTime | 是 | 订阅关系生效时间。 |
subscriptionExpiryTime | 否 | 自定义订阅创建超时时间。 |
subscriptionRedirectUrl | 是 | 商户端支付结果页,需根据服务端结果展示,非固定为成功页。 |
paymentAmount | 是 | 每期支付金额。 |
paymentMethod.paymentMethodType | 是 | 支付方式枚举值。 |
paymentNotificationUrl | 否 | 支付结果通知地址,可以通过接口传入,也可以在 Antom Dashboard 里设置一个固定值。 |
settlementStrategy.settlementCurrency | 是 | 该笔支付的结算币种,若业务签约了多个结算币种,需在接口中指定。 |
orderInfo | 是 | 订单信息,包括商户端订单金额、币种。 |
env.terminalType | 是 | 终端类型:
|
env.osType | 否 | 买家发起交易的操作系统,当买家从商户手机浏览器网站或商户 App 商发起时,则设置env.osType 为 ANDROID 或 IOS 。 |
以下为请求报文示例:
响应代码中涉及以下关键参数:
参数名称 | 描述 |
result.resultStatus | 判断订阅创建状态。 |
normalUrl | 需跳转 H5 类型支付的链接。 |
applinkUrl | 需跳转 deeplink 类型支付链接。 |
schemeUrl | 需跳转 scheme 类型支付链接。 |
以下为响应报文示例:
下表展示了响应代码中 result.resultStatus 参数可能返回的值,请您根据指引进行处理:
result.resultStatus | 信息 | 后续操作 |
S | 订阅创建接口调用成功。 | 引导至买家跳转链接进行授权。 |
F | 订阅创建失败。 | 更换 subscriptionRequestId 进行重试。 |
U | 订阅创建处理延迟。 | 关闭订阅或发起原单重试。 |
注意:如果您未收到响应报文,可能是网络超时所致,您可以关闭订阅或发起原单重试。
常见问题
问:如何确认响应代码中需要消费的链接类型?
答:不同支付方式在不同端类型下,Antom 可能会返回以下三种链接中的一种或多种:normalUrl、applinkUrl 和 schemeUrl。商户服务端需将这些链接传递给商户前端,可以选择任选一种链接进行跳转消费。
问:如何设置 terminalType?
答:terminalType 的有效值为:
- 如果买家在 PC 端发起交易,需要将 terminalType 指定为 WEB。
- 如果买家在移动浏览器上发起交易,需要将 terminalType 指定为 WAP。添加 osType 参数,并根据买家的手机填写相应的系统参数ANDROID或IOS。
- 如果买家在应用内发起交易,需要将 terminalType 指定为 APP。
步骤 3:跳转授权绑定链接 客户端
商户服务端拿到 Antom 返回的授权绑定链接后,将该地址传递给前端,由商户前端跳转至支付方式页面。不同类型的推进链接如下表所示:
类型 | 描述 | 示例 URL |
normalUrl | 一个 HTTPS 地址的链接,用于在同一浏览器页面上重定向到支付方式的网站页面。 | https://render.alipay.com/p/s/i/?scheme=alipays%3A%2F%2Fplatformapi%2FstartApp%3FappId%3D10000007%26actionType%3Droute%26qrcode%3Dhttps%3A%2F%2Fglobal.alipay.com%2F281002040099gUtj0amuJ48dt49hKJX1jA94%26externalThrough%3D%257B%2522acTerminalType%2522%253A%2522WAP%2522%257D |
applinkUrl | 在支付过程中用于重定向的 Android App Link 或 iOS Universal Link。 | https://payments.gcash.com/gcash-ac-cashier-intermediate-web/h5.html?acCodeValue=https%3A%2F%2Fglobal.alipay.com%2F2810020400948dtv5AptV1kpaQ48dyD2r72r&acFlag=true |
schemeUrl | 用于打开支付方式应用的 URL scheme。 | alipays://platformapi/startApp?appId=10000007&actionType=route&qrcode=https%3A%2F%2Fglobal.alipay.com%2F281002040099gUtj0amuJ48dt49hKJX1jA94&externalThrough=%7B%22acTerminalType%22%3A%22WAP%22%7D |
以下为商户前端加载推进链接的示例代码:
Web
WAP
iOS
Android
下图展示支付方式收银台页面的效果:

不同支付方式在不同终端会返回不同的支付推进链接,Antom 基于您传入的 paymentMethod 和 terminalType 决策返回不同的支付推进链接。下表列举了不同终端返回的支付推进链接类型及其用户体验。关于具体的不同支付方式返回的支付推进链接内容,请参阅支付方式返回链接了解更多详情。
支付推进链接 | 返回场景 | 功能 | 用户体验 |
applinkUrl | 一般在买家从商户应用程序或手机网站发起支付时会返回该 URL,具体依赖于支付方式是否支持。 | 可以自动判断买家是否安装支付方式应用程序。
|
![]()
![]() |
schemeUrl | 一般在买家从商户应用程序或手机网站发起支付时会返回该 URL,具体依赖于支付方式是否支持。 |
|
![]()
|
normalUrl | 买家从商户 Web 端发起支付时,均返回此 URL,具体依赖于支付方式是否支持。 |
|
![]()
![]()
![]() |
常见问题
问:subscriptionRedirectUrl 在传参上需要注意什么?
答:默认设置为 HTTPS 地址,同时 URL 中的特殊字符不能进行编码处理,否则会支付异常。
问:支付结果页内容如何展示?
- 授权成功和授权失败的情况下,可能都有入口可以从支付方式端回跳到商户页面。因此,请勿将 subscriptionRedirectUrl 固定为授权成功页面,而是以服务端返回的结果为准,避免引起买家误解。
- 如果商户从应用程序端发起交易,subscriptionRedirectUrl 需设置为商户应用程序的 scheme 地址。
问:回跳商户结果页是否代表订阅关系生效?
答:不能仅凭回跳商户页面来判断授权是否成功,具体有以下三种情况:
- 买家授权成功后,可能因网络等原因导致未能回跳至商户页。
- 即使买家未完成授权,也可能通过支付方式端的入口回跳至商户页面。
- 即使买家完成授权认证,也可能因为首期扣款失败导致订阅关系没有生效。
步骤 4:接收首期订阅异步通知 服务端
Antom 会根据 APM 交易的授权结果和扣费结果的状态来推送异步通知:
订阅状态通知
当期扣款结果通知
- 响应通知结果。响应通知时,无论交易支付成功与否,均需按以下固定格式响应,且无需做加签处理。
常见问题
问:异步通知会被重新发送吗?
答:是的,对于以下情况,异步通知会在 24 小时内自动重新发送:
- 如果由于网络原因未收到异步通知。
- 如果您收到来自 Antom 的异步通知,但您没有按照处理通知的示例代码格式对通知做出响应。
通知最多可以重发 8 次,或者直到收到正确的响应以终止发送。发送间隔如下:0 分钟、2 分钟、10 分钟、10 分钟、1 小时、2 小时、6 小时和15 小时。
问:在响应异步通知时,我需要加签吗?
问:收到支付结果通知后是否需要验签?
答: 需要。为确保回调请求确实由 Antom 发送,在验签时需要进行验证。在拼装待验签的报文时,必须按照以下标准顺序处理:
<http-method> <http-uri> <client-id>.<request-time>.<request-body>
。请注意拼装 request-body
时应直接取其原始值,而不要解析成 JSON 后再拼装。
问:若首次支付失败,订阅关系会生效吗?
答:当订阅开通的首次扣款失败时,订阅关系将不会生效,Antom 系统会通过 Webhook 推送 subscriptionStatus =
TERMINATED
的状态通知给商户,表明订阅开通失败。
问:订阅超时时间是多久?
答:针对 APM 类支付方式,默认为 80 分钟超时时间,您也可以通过 subscriptionExpiryTime 来指定超时时间。
问:如果订阅创建失败,是否会有首期扣费结果通知?
答:此场景分为两种情况:
- 如果买家授权成功但是首期扣费失败,则会发送订阅关系创建失败的通知和首期扣费失败通知;
- 如果买家授权失败,则仅有订阅关系创建失败的通知。
步骤 5:接收订阅续期异步通知 服务端
- 触发时间:续订扣款将在下一个订阅周期起始日的前 24 小时自动触发。您可以依据上一周期支付结果通知中的 periodEndTime 参数,向前推 24 小时以判断下一周期扣款的发起时间。
- 周期规则:续费周期及扣款频率将按照订阅时设定的 periodRule 执行,例如按日、按月、按季度或按年扣款。如下表述:
首期扣款时间 paymentTime = periodStartTime | 订阅周期 | 下期扣款时间 paymentTime | 下期生效时间 periodStartTime |
2024-09-25T20:10:17+08:00 | 设置订阅周期为 3 天,需要传入以下参数:
| 2024-09-27T20:20:04+08:00 | 2024-09-28T20:10:17+08:00 |
2024-09-25T20:10:17+08:00 | 设置订阅周期为 1 周,需要传入以下参数:
| 2024-10-01T20:10:17+08:00 | 2024-10-02T20:10:17+08:00 |
2024-09-25T20:10:17+08:00 | 设置订阅周期为 1 个月,需要传入以下参数:
| 2024-10-24T20:10:17+08:00 | 2024-10-25T20:10:17+08:00 |
2024-09-25T20:10:17+08:00 | 设置订阅周期为 1 年,需要传入以下参数:
| 2025-09-24T20:10:17+08:00 | 2025-09-25T20:10:17+08:00 |
异步通知通常分为以下场景:
常见场景 | 首次绑定支付 | 后续周期扣款 |
订阅结果通知 | 有通知,告知订阅创建结果。 | 无通知。 |
当前扣费结果通知 | 有通知,告知本期扣费状态、金额和有效期。 | 有通知,告知每期扣费状态、金额和有效期 |
订阅当期扣款结果通知示例:
关键参数说明:
- notifyType:通知类型,值为 PAYMENT_RESULT。
- phaseNo:订阅当期的期数。
常见问题
问:若扣款失败会导致订阅关系失效吗?
答:创建订阅的首期扣款如果失败,订阅关系将不会生效;若订阅关系已生效但后续的周期扣款失败(如余额不足),订阅状态仍保持有效;若未主动取消订阅,Antom 将会在下一期继续扣款。
问:扣款失败会发送当期扣款通知吗,会重试吗?
答:扣款失败会发送扣款失败通知;APM 的订阅支付场景下,Antom 会发起多次重试。
问:假如订阅周期为 1 个月,首期扣款是 2 月 28 日、3 月 31 日或 4 月 30 日这些月末时间点,那下一期的扣费时间怎么定义?
答:订阅的周期逻辑为按选定的日期来发起下一次扣款,如果下一个周期没有这个日期,则往前推一天,例如:
- 首期 1.28,二期 2.28,三期 3.28,四期 4.28。
- 首期 1.31,二期 2.28,三期 3.31,四期 4.30。
- 首期 1.30,二期 2.28,三期 3.30,四期 4.30。
问:后续的周期扣款如何跟首期合约关联?
答:针对周期扣款通知,可以根据通知请求中的 subscriptionRequestId 或 subscriptionId 与首期合约关联。
订阅后操作
完成订阅支付后,您可以对交易进行以下操作:
查询订阅相关信息 服务端
订阅确认后,您可以查询以下订阅信息:
- 查询订阅列表:您可以通过 inquireSubscriptionList 接口查询符合特定筛选条件的订阅列表。
- 查询订阅详情:您可以使用 subscriptionId 调用 inquireSubscription 接口来获取订阅详情。
- 查询订阅交易信息:您可以使用 subscriptionId 调用 inquireSubscriptionPayment 接口来获取订阅交易的列表信息。
订阅试用 服务端
终止订阅 服务端
取消订单 服务端
对于支付成功后的订单,如买家在当天内申请取消订单或退款,您可以通过 Antom 提供的取消订单能力将订单状态取消或解冻。此外,对于尚未完成支付的订单,您也可以直接进行取消,具体的集成方案见取消交易文档。
退款 服务端
对于已支付成功的订单,如您需向买家发起退款,Antom 提供以下两种方式。
- 由您的运营人员直接在 Antom Dashboard 平台上进行人工退款。
- 通过 API 方式接入 refund 接口发起退款。具体的集成方案见退款文档。
更多内容
测试钱包
下载测试钱包应用程序来模拟支付。想要了解更多关于下载测试钱包的信息,请参阅下载测试钱包。
最佳实践
为了提高集成效率,Antom 为您提供以下最佳实践方案:









