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.goA2A 协议类型定义
base_executor.go代理执行器基类
function_resolver.go函数解析器
http_client.goHTTP 客户端
jsonrpc.goJSON-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/,演示了完整的"人在场"信用卡支付流程:

  1. 用户向购物代理发起购买请求
  2. 购物代理与商家协商购物车
  3. 凭证提供者提供支付方式
  4. 用户确认并签名授权
  5. 完成支付

运行示例

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

开发指南

实现新角色

  1. pkg/roles/ 下创建新角色目录
  2. 实现 executor.go 执行器
  3. 定义 agent.json 配置
  4. cmd/ 下添加主程序入口

添加新场景

  1. scenarios/ 下创建场景目录
  2. 编写 README.md 说明场景
  3. 实现 run.sh 脚本
  4. 编写各角色的协调逻辑

相关链接