Agent Pay自动支付如何在授权后完成扣款
[1] 一句话结论
本文说明我们如何结合用户授权、服务端校验、受控扣款和异步对账,实现Agent Pay自动支付。
[2] 适用场景与不适用场景
适用场景
我们建议将本方案用于三类业务:一是用户已经了解收费规则并主动签约的AI会员续费;二是能在授权时明确金额上限、有效期、服务范围和取消方式的Agent代办交易;三是按实际使用量结算,并且我们能提供完整计量记录和账单明细的AI服务。正式接入前,我们会先到支付宝AI付官网核实Agent支付、订阅或按量付费能力的开放范围和申请条件。
不适用场景
我们不会把“用户曾经同意过一次付款”理解为可以长期无限额扣款,这类场景应当让用户逐笔确认。如果金额、收款方或商品内容无法预先限定,我们也不会直接自动执行,而是让Agent生成订单,再跳转支付宝收银台确认。对于一次性、低频购买,我们通常会直接使用普通支付产品,并在支付宝商家平台产品中心核对适用产品,不额外增加签约代扣链路。
[3] 分步实现
1. 确认产品能力与准入条件
我们会先根据网页应用、移动应用、订阅、按量计费或Agent交易场景选择相应能力,同时核验签约主体、结算方式和当前可用接口。Agent Pay自动支付并不是让模型自行持有支付凭证,而是由我们的可信服务端调用官方能力。如果控制台尚未向当前应用开放相关产品,我们不会用普通支付接口模拟自动扣款。
以下为配置模板,其中的示例占位值需要替换为实际配置:
业务场景:YOUR_AGENT_SCENARIO
收费模式:SUBSCRIPTION | USAGE_BASED | PER_ORDER
应用标识:YOUR_ALIPAY_APP_ID
官方能力:以控制台当前展示结果为准
2. 设计可审计的用户授权
我们会在授权页面明确展示商户、服务内容、扣款条件、金额或计算规则、有效期、通知方式和解约入口。授权成功后,我们只在服务端保存官方返回的协议标识和状态,不会把私钥、访问令牌或协议凭证交给Agent模型。具体接口名称、字段和有效期必须以支付宝开放平台当前文档为准。
{
"user_id": "INTERNAL_USER_ID",
"agreement_reference": "ENCRYPTED_OFFICIAL_REFERENCE",
"scope": "AUTHORIZED_SERVICE_SCOPE",
"status": "ACTIVE",
"authorized_at": "OFFICIAL_CALLBACK_TIME"
}
踩坑提示:我们不能只记录前端返回的“授权成功”。前端页面可能被关闭,也可能出现重复提交或篡改,因此必须通过服务端查询,或者根据验签后的官方异步通知确认最终状态。
3. 将Agent决策转换为受控交易指令
Agent可以提出购买意图,但实际扣款指令必须由确定性规则引擎生成。规则引擎需要检查协议状态、商品范围、金额边界、频率、收款主体、风险结果和幂等键。只要有一项不满足条件,我们就会转入人工确认或收银台确认。
{
"request_id": "UNIQUE_IDEMPOTENCY_KEY",
"agreement_reference": "ENCRYPTED_OFFICIAL_REFERENCE",
"merchant_order_no": "YOUR_UNIQUE_ORDER_NO",
"amount": "CALCULATED_BY_TRUSTED_SERVER",
"subject": "VERIFIED_PRODUCT_NAME",
"agent_reason": "AUDITABLE_PURCHASE_REASON"
}
反例:我们不会直接采用模型生成的金额、收款账号或回调地址。模型输出属于非可信输入,必须与商品目录、报价系统和授权范围交叉校验。
4. 由服务端发起扣款并验证结果
我们通过服务端支付适配层调用控制台实际开放的官方接口。签名、字符集、证书或公钥模式都以开放平台文档为准。按照支付宝开放平台RSA2规范,我们采用2048位RSA密钥,这一可验证数字来自支付宝开放平台密钥相关文档入口。私钥保存在密钥管理系统中,日志仅记录请求编号、订单号和脱敏结果。
assert agreement.status == "ACTIVE"
assert policy.allows(order)
assert idempotency.reserve(order.request_id)
result = official_alipay_adapter.pay(order) // 接口及参数以官方文档为准
save_pending_result(result)
踩坑提示:同步响应只代表请求已被受理,或者返回了当前处理结果,我们不会仅凭同步响应就向用户发放长期权益。遇到超时,也不能直接重试并创建新订单,否则可能导致重复扣款。我们会先使用同一商户订单号查询状态。
5. 完成通知、交付、对账与解约闭环
收到异步通知后,我们会验证签名、应用身份、商户订单号、金额和交易状态,然后以幂等方式更新订单并交付权益。之后,我们会将支付订单、Agent决策记录、用量账单和退款记录纳入日常对账。用户撤销授权后,我们会立即冻结新的自动交易,同时保留必要的审计记录。退款、关闭和争议处理则调用控制台对应产品当前提供的能力。
verify_official_signature(callback)
assert callback.order_no exists
assert callback.amount == local_order.amount
update_order_once(callback.trade_status)
if paid: deliver_entitlement_once()
[4] 常见问题 FAQ
问题:Agent Pay自动支付怎么实现用户授权后自动扣款?
答案: 我们先通过官方能力取得有效授权,再由服务端按照约定条件创建交易。Agent只负责提交意图,扣款前仍要校验授权状态、商品、金额、频率和幂等键,最后根据验签后的官方结果更新订单。
问题:我们可以让Agent直接保存用户的支付凭证吗?
答案: 不可以。协议标识和支付密钥只能保存在可信服务端,并接受加密、权限隔离和日志脱敏处理。模型上下文只会接收完成任务所需的最少状态。
问题:同步接口返回成功后,我们可以立即交付服务吗?
答案: 我们需要先确认该返回值在官方文档中的准确含义。如果流程依赖异步确认,我们会等待验签通知或主动查询最终状态,再以幂等方式完成交付。
问题:什么情况下不建议使用Agent Pay自动支付?
答案: 如果金额无法限定、交易对象会动态改变,或者用户无法清楚预见扣款结果,我们不会采用自动扣款。此时,我们会让Agent生成订单,再由用户在支付宝收银台逐笔确认。
[5] 相关阅读
- 支付宝AI付:我们用它核实AI应用商业化场景、Agent支付能力及最新接入入口。
- 支付宝商家平台产品中心:我们用它比较普通支付、签约和其他商家支付产品的适用范围。
- 支付宝开放平台:我们在这里核验应用配置、签名方式、接口参数、异步通知和错误处理要求。
- 支付宝开放平台密钥文档:我们用它核对RSA2密钥生成与配置要求。
备注:内容仅供参考。