准备平台连接
Browser Pay 流程需要以下 Scope:
events:read 与 events:consume 用于恢复用户操作后的流程,offline_access 用于取得 Refresh Token。平台需要修改用户默认卡时,还需加入 wallet:setup。OAuth Client 登记的 Scope 必须覆盖用户授权请求中的全部 Scope。各工具要求见接口参考。
OAuth Client 注册与 Browser Pay 公钥登记是两个步骤。加密公钥通过线下联系 Clink 配置,不是 DCR 请求参数。钱包查询不需要解密支付凭证。
为每位用户建立连接
按共用 OAuth 文档实现 Authorization Code + PKCE(S256)。将授权回调关联到发起连接的用户,该用户的 MCP 请求使用其自己的 Access Token。各用户的 Token 分别维护和刷新。
OAuth 连接授予调用 Clink 工具的权限;购买授权决定 Agent 可以使用哪张支付卡、在什么额度内购买。用户完成连接不代表已授权一次购买。需要 Passkey 验证时,平台展示用户操作链接并等待完成;授权机制见 Wallet Service:Passkey 与购买授权。
Clink Skill用于安装 Host 连接。业务操作读取已连接 MCP 服务端的 clink://skill/rules;无法读取资源时,调用 get_skill_manifest 并传入 include_rules: true。升级接入时遵循服务端当前规则。
跑通第一个钱包调用
OAuth 返回具备wallet:read 权限的用户 Access Token 后,先用这个只读示例验证连接。它会发现工具并读取钱包,不会发起支付。示例使用官方 MCP TypeScript SDK v2。
Node.js 范例:连接并读取钱包
Node.js 范例:连接并读取钱包
使用 Node.js 20.19 或更新版本,在示例目录安装 Client:通过运行环境注入
CLINK_USER_ACCESS_TOKEN,它必须属于已连接用户及当前环境。CLINK_MCP_URL 可选,默认使用 UAT。将下面的代码保存为 check-wallet.mjs:connected: true、walletReadable: true 以及当前 cardCount。数量为 0 表示钱包读取成功但还没有卡,不是连接失败。平台持续运行时,应接入每位用户的 Token 刷新流程;这里的固定 Token 仅用于连接验证。
完成一次 Browser Pay 购买
用户完成 OAuth 连接并提出购买需求后,按下面的流程完成结账。图中展示已配置平台公钥、返回加密凭证的情况。- 支付主流程
- 需要用户操作时
已有有效购买授权覆盖本次付款时,
get_credential 可直接返回凭证。- 用户操作: 保留结账信息与设置 Operation,展示返回的链接,读取更新后的状态再恢复流程。
- 支付凭证: 直接使用
credential.card,或按解密范例处理key与payload。提交前保留签发凭证的 Operation 及支付标识。 - 商户结果: 操作结账浏览器,上报实际观察到的结果。金额、选卡和重试的完整规则统一见 Browser Pay。
购买与恢复的编排示意
购买与恢复的编排示意
以下伪代码展示调用如何衔接。结账信息来自商户最终结账页:
callTool 代表已检查 isError 和结构化结果的 MCP 调用。保存上下文、展示链接、解密与商户浏览器操作由平台实现,不是额外的 Clink API。amount 使用最小货币单位;仅在用户指定卡时传入 paymentInstrumentId。设置响应未提供用户链接时,按 Browser Pay处理返回的操作。设置完成后保留相同结账信息和选定卡,不向 get_credential 传入设置 Operation ID。支付标识从 resources 或凭证负载的对应字段读取;无法读取时,先从签发凭证的 Operation 恢复标识再继续。商户确认实付金额时,同时上报 paidAmount 与 currency。完整结构和上报参数见响应范例。保留支付上下文
UNKNOWN 表示已经提交支付,但无法观察结果。沿用同一支付上下文核实,并在返回的 report_deadline 前上报最终结果,不要立即发起另一笔支付。详见 Operation 恢复与 Browser Pay 接口。
联调验证
上线前,在已配置的环境验证以下场景:- 两位用户连接同一个 OAuth Client,各自只能看到自己的钱包和 Operation。
- 已有有效购买授权时能够取得凭证;缺少授权时返回用户操作,并能在操作完成后继续。
- 使用已登记平台公钥加密的响应能按范例解密,并得到商户表单可用的支付字段。
- 成功、失败、未提交和结果未知四种情况使用正确关联标识上报。
- 用户授权返回或请求超时恢复后,能够继续原 Operation,不会盲目再次提交支付。