Skip to main content
云端 Agent 平台为每位用户连接 Clink,代表该用户调用钱包和支付工具,并通过平台的浏览器能力完成商户结账。Browser Pay 凭证使用平台公钥加密时,按凭证解密范例解密。

准备平台连接

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 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。
Clink 提供钱包、购买授权、支付凭证和结果上报工具。需要区分以下三个完成点:

保留支付上下文

UNKNOWN 表示已经提交支付,但无法观察结果。沿用同一支付上下文核实,并在返回的 report_deadline 前上报最终结果,不要立即发起另一笔支付。详见 Operation 恢复与 Browser Pay 接口。

联调验证

上线前,在已配置的环境验证以下场景:
  • 两位用户连接同一个 OAuth Client,各自只能看到自己的钱包和 Operation。
  • 已有有效购买授权时能够取得凭证;缺少授权时返回用户操作,并能在操作完成后继续。
  • 使用已登记平台公钥加密的响应能按范例解密,并得到商户表单可用的支付字段。
  • 成功、失败、未提交和结果未知四种情况使用正确关联标识上报。
  • 用户授权返回或请求超时恢复后,能够继续原 Operation,不会盲目再次提交支付。
完整购买流程见 Browser Pay。支付卡选择和购买授权管理见 Wallet Service。