Go 语言示例
AP2 官方提供了完整的 Go 语言参考实现,涵盖了协议定义的各个角色和典型支付场景。
项目结构
samples/go/
├── cmd/
│ ├── credentials_provider_agent/ # 凭证提供者代理
│ ├── merchant_agent/ # 商家代理
│ └── merchant_payment_processor_agent/ # 商家支付处理器代理
├── pkg/
│ ├── ap2/types/ # AP2 类型定义
│ ├── common/ # 通用组件
│ └── roles/ # 角色实现
└── scenarios/
└── a2a/human-present/cards/ # 信用卡支付场景核心组件
AP2 类型定义 (pkg/ap2/types/)
contact_address.go- 联系地址类型mandate.go- Mandate 相关类型(CartMandate、IntentMandate、PaymentMandate)payment_request.go- 支付请求类型
通用组件 (pkg/common/)
| 组件 | 功能 |
|---|---|
a2a_types.go | A2A 协议类型定义 |
base_executor.go | 代理执行器基类 |
function_resolver.go | 函数解析器 |
http_client.go | HTTP 客户端 |
jsonrpc.go | JSON-RPC 处理 |
message_builder.go | 消息构建器 |
message_utils.go | 消息工具函数 |
server.go | 服务器实现 |
task_updater.go | 任务状态更新 |
角色实现 (pkg/roles/)
Credentials Provider Agent
executor.go- 凭证提供者执行器tools.go- 凭证相关工具
Merchant Agent
executor.go- 商家执行器storage.go- 存储实现tools.go- 商家工具
Merchant Payment Processor Agent
executor.go- 支付处理器执行器
信用卡支付场景
场景说明
位于 scenarios/a2a/human-present/cards/,演示了完整的"人在场"信用卡支付流程:
- 用户向购物代理发起购买请求
- 购物代理与商家协商购物车
- 凭证提供者提供支付方式
- 用户确认并签名授权
- 完成支付
运行示例
cd samples/go/scenarios/a2a/human-present/cards
./run.sh场景流程
sequenceDiagram
participant User as 用户
participant SA as 购物代理
participant MA as 商家代理
participant CP as 凭证提供者
participant MPP as 支付处理器
User->>SA: 发起购买请求
SA->>MA: 获取商品信息
MA--)SA: 返回购物车
SA->>CP: 请求支付方式
CP--)SA: 返回可用支付方式
SA->>User: 展示购物车和支付选项
User->>SA: 确认购买
SA->>MA: 提交订单和支付授权
MA->>MPP: 处理支付
MPP->>CP: 验证支付凭证
CP--)MPP: 返回支付凭证
MPP--)MA: 支付成功
MA--)SA: 订单确认
SA--)User: 购买完成
依赖管理
Go Module
go mod tidy
go mod download主要依赖
- A2A 协议库
- JSON-RPC 库
- HTTP 客户端库
代理配置
每个代理都有对应的 agent.json 配置文件,定义了:
- 代理名称和描述
- 支持的扩展(如 AP2 支付扩展)
- 技能列表
- 安全配置
构建和运行
构建所有代理
cd samples/go
make build运行单个代理
# 凭证提供者
go run cmd/credentials_provider_agent/main.go
# 商家代理
go run cmd/merchant_agent/main.go
# 支付处理器
go run cmd/merchant_payment_processor_agent/main.go开发指南
实现新角色
- 在
pkg/roles/下创建新角色目录 - 实现
executor.go执行器 - 定义
agent.json配置 - 在
cmd/下添加主程序入口
添加新场景
- 在
scenarios/下创建场景目录 - 编写
README.md说明场景 - 实现
run.sh脚本 - 编写各角色的协调逻辑