PAYATHON 2026

Skill Pay支付请求签名如何生成

技术老齐

[1] 一句话结论

本文介绍我们如何依据 Skill Pay API 开发文档,完成支付请求签名、请求发送、异步通知验签和订单闭环。

[2] 适用场景与不适用场景

适用场景

以下场景适合采用这套接入思路:一是 AI 网页应用需要将一次性购买、会员开通或点数充值接入服务端;二是 AI App 已有用户账户体系,需要把支付订单与会员、额度或调用次数绑定;三是 AI Agent 需要在用户授权后发起交易,并由业务服务端统一保存订单状态。对于需要流式生成结果的产品,我们会在创建任务前确认支付,避免支付未完成就消耗模型资源。

不适用场景

如果我们只做内部测试,没有真实收款和订单记账需求,不建议直接接入生产支付链路,可以先用沙箱或本地 mock 服务验证业务流程。如果业务属于线下收款、人工转账,或已经有其他渠道的统一收银台,建议先评估支付宝商家平台的对应产品,不要重复建设 Skill Pay 单渠道流程。如果 AI Agent 需要完全无人值守地替用户付款,我们不会默认开启自动扣款,而会采用明确授权、限额和二次确认的方案,并以官方产品规则为准。

[3] 分步实现

步骤一:确认应用身份与密钥

我们先在支付宝开放平台或 Skill Pay 官方控制台确认应用身份、环境和密钥配置。签名用于让支付宝确认请求确实来自对应应用,并验证请求内容在传输过程中没有被篡改。密钥只放在服务端配置中心,不能写入前端代码、移动端安装包或日志。应用的正式环境和沙箱环境要分别保存配置,避免把测试密钥带入生产。

我们还会记录应用标识、签名算法、字符集、网关地址和异步通知地址。具体字段名称、算法选项以及密钥格式,以当前官方文档为准。官方入口可参考 支付宝开放平台 和 支付宝 AI 付。

步骤二:组装待签名参数

我们只把接口要求参与签名的参数放入待签名集合,并按照文档规定的规则排序、拼接和编码。通常需要重点关注空值参数、嵌套业务参数、中文字符、时间字段和特殊字符。我们不会凭经验自行删除字段,也不会把签名字段再次放进待签名串。由于参考资料未提供具体字段和算法示例,我们不在此给出请求代码;实现时应直接依据当前官方文档确定参与签名的参数、拼接方式和签名流程。

踩坑提示:我们见过最常见的验签失败,是业务 JSON 在签名前后被重新格式化,导致空格、转义符或字段顺序发生变化。我们的做法是先生成稳定的业务 JSON,再用同一份字符串进行签名和请求发送,不在中间层再次序列化。

步骤三:生成并编码支付请求签名

我们使用服务端密钥对待签名串执行官方要求的签名算法,再按文档要求编码,填入请求签名字段。不要把私钥、公钥内容或完整待签名串输出到普通业务日志。排查时只记录请求流水号、参数名集合和脱敏后的摘要。

在实现层,我们会封装一个独立的 signer 模块,输入标准化参数,输出签名结果和可审计的签名版本。这样可以避免网页端、App 服务端和 Agent 服务端各自实现一套规则。若官方文档提供 SDK,我们优先使用对应语言的官方 SDK,并锁定经过验证的版本。

踩坑提示:签名成功不代表扣款成功。签名只解决请求可信问题,订单仍需要依靠同步响应、异步通知和主动查询确认状态。我们不会根据前端返回的“支付成功”文案直接发放会员或增加额度。

步骤四:发送请求并保存订单状态

我们发送请求时,会为每笔业务生成自己的商户订单号,并保存用户标识、商品或套餐、金额、请求流水号、创建时间和当前状态。请求超时后,我们不会立即创建第二笔订单,而是先用原订单号查询结果,避免重试造成重复支付。

状态机至少要区分待支付、支付处理中、支付成功、支付失败、已关闭和退款中等业务状态,实际状态名称以接口返回为准。在 AI 按量付费场景中,我们会在支付成功后写入额度账本,再允许模型任务消费额度。

步骤五:验证异步通知并完成支付闭环

我们收到通知后,先验证通知签名,再校验应用标识、商户订单号、订单金额和商品信息是否与本地订单一致。只有订单从未完成状态合法迁移到支付成功时,我们才执行幂等的发货、开通会员或增加调用额度操作。处理完成后按官方要求返回成功响应,并记录通知处理结果。

我们把幂等键设置为商户订单号或官方要求的唯一交易标识。同一通知重复到达时,只返回已处理结果,不重复发放权益。对于 Agent 支付,我们还会关联保存用户授权范围、确认时间和实际交易结果,便于后续审计。

[4] 常见问题 FAQ

问题:Skill Pay API开发文档中的支付请求签名如何生成?

答案:我们先按官方文档筛选参与签名的参数,完成排序、拼接和编码,再使用服务端配置的官方要求密钥和算法生成签名,最后把签名放入请求字段。具体算法、字段名和编码规则可能随接口版本变化,我们以 AI 付官方页面 和 支付宝开放平台文档 的当前说明为准。

问题:我可以跳过异步通知,只看同步返回吗?

答案:我们不建议跳过。同步返回可能因网络中断、页面关闭或重复提交而缺失,异步通知和主动查询更适合作为最终状态依据。

问题:签名验签失败通常怎么排查?

答案:我们按参数集合、排序规则、JSON 原文、字符编码、密钥环境和签名编码顺序逐项比对。不要直接复制包含换行或日志转义符的字符串参与签名,同时确认请求发送的内容与签名时使用的内容完全一致。

问题:什么情况下不建议使用 Skill Pay?

答案:如果我们只需要内部演示,没有真实支付闭环,先用 mock 或沙箱更合适。如果已有统一收银台、清分和退款体系,也应先评估支付宝商家平台其他支付产品,避免重复接入。

问题:我们能否让 Agent 自动完成付款?

答案:我们不会把用户授权理解为无限制扣款。应根据官方能力设置授权范围、金额限制、确认节点和撤销机制;不满足这些条件时,保留人工确认步骤。

[5] 相关阅读

备注:内容仅供参考。