支付系统
支付系统是井云平台的核心业务系统,负责处理订单管理、微信支付集成、支付回调处理以及订单支付后的业务逻辑。
🎯 系统概述
核心功能
- 订单管理: 支持多种订单类型的创建、查询、更新
- 微信支付: 集成微信支付API v3,支持Native支付
- 支付回调: 处理微信支付的异步回调通知
- 业务处理: 支付成功后的租户创建、版本快照等业务逻辑
- 事件发布: 支付成功后发布事件到消息队列
支持的订单类型
- tenant: 租户购买订单
- version: 版本服务订单
- coze: 智能体使用订单
🏗️ 架构设计
系统架构
┌─────────────────────────────────────────┐
│ Payment Service │
│ (端口: 9006) │
├─────────────────────────────────────────┤
│ ┌─────────────┬─────────────┬─────────┐ │
│ │ Service │ Biz │ Data │ │
│ │ Layer │ Layer │ Layer │ │
│ └─────────────┴─────────────┴─────────┘ │
├─────────────────────────────────────────┤
│ ┌─────────────┬─────────────┬─────────┐ │
│ │ PostgreSQL │ Redis │RabbitMQ │ │
│ │ 数据库 │ 缓存 │ 消息队列 │ │
│ └─ ────────────┴─────────────┴─────────┘ │
├─────────────────────────────────────────┤
│ ┌─────────────┬─────────────┬─────────┐ │
│ │ 微信支付 │ 租户服务 │ 事件总线 │ │
│ │ API │ gRPC │ MQ │ │
│ └─────────────┴─────────────┴─────────┘ │
└─────────────────────────────────────────┘
技术栈
- 框架: Go + Kratos v2
- 数据库: PostgreSQL + Ent ORM
- 缓存: Redis
- 消息队列: RabbitMQ
- 支付: 微信支付API v3
- 协议: gRPC/HTTP
📊 数据模型
Order (订单实体)
- 基本信息: order_no, order_type, status, amount
- 关联信息: member_id, user_id, tenant_id, version_id
- 支付信息: payment_method, payment_transaction_id
- 时间信息: paid_at, expires_at, created_at, updated_at
订单状态流转
pending (待支付)
↓
paid (已支付)
↓
cancelled (已取消) / refunded (已退款) / expired (已过期)
🔧 核心功能
订单管理
- 创建订单: 支持租户订单和版本订单创建
- 查询订单: 根据订单号、用户、状态等查询
- 更新订单: 订单状态更新和信息修改
- 订单列表: 分页查询订单列表
微信支付集成
- Native支付: 生成支付二维码供用户扫码
- 支付查询: 查询微信支付订单状态
- 签名验证: 验证微信支付回调的签名
- 证书管理: 支持商户私钥和平台证书
支付回调处理
- 回调接收: 接收微信支付异步通知
- 签名验证: 验证回调数据的真实性
- 订单更新: 更新订单状态为已支付
- 业务处理: 触发后续业务逻辑
🚀 API接口
订单管理接口
CreateTenantOrder: 创建租户订单GetTenantOrder: 获取租户订单CreateVersionOrder: 创建版本订单GetVersionOrder: 获取版本订单GetOrder: 获取订单详情ListOrders: 获取订单列表UpdateOrderStatus: 更新订单状态
支付接口
WechatPay: 微信支付下单HandleWechatPayNotify: 处理微信支付回调通知
🔄 业务流程
租户订单支付流程
1. 前端调用 CreateTenantOrder 创建租户订单
2. 前端调用 WechatPay 获取支付二维码
3. 用户扫码支付
4. 微信支付回调 HandleWechatPayNotify
5. 验证签名并更新订单状态
6. 处理业务逻辑:
- 创建或激活租户
- 设置租户过期时间
- 创建版本快照
7. 发布订单支付事件到 RabbitMQ
订单支付事件
{
"event_name": "payment.order.paid",
"data": {
"order_id": 12345,
"member_id": 1001,
"amount": 99.0,
"currency": "CNY",
"order_type": "tenant",
"version_id": 5,
"tenant_id": 1001,
"created_at": "2023-12-28T10:00:00Z"
}
}
🔗 外部集成
微信支付集成
- API版本: 微信支付API v3
- 支付方式: Native支付(扫码支付)
- 证书管理: 商户私钥和平台证书
- 安全验证: 回调签名验证
租户服务集成
- gRPC调用: 调用租户服务接口
- 创建租户: 自动创建新租户
- 更新租户: 激活租户和设置过期时间
- 创建快照: 保存版本配置快照
消息队列集成
- 事件发布: 发布订单支付事件
- 事件路由: 支付事件路由到用户服务
- 可靠投递: 确保消息可靠投递
📈 性能优化
缓存策略
- 订单缓存: 热点订单信息缓存
- 配置缓存: 微信支付配置缓存
- 状态缓存: 订单状态缓存
数据库优化
- 索引优化: 订单号、用户ID等索引
- 分页查询: 订单列表分页优化
- 事务处理: 订单状态更新事务
🔒 安全机制
支付安全
- 签名验证: 严格的回调签名验证
- 证书管理: 安全的证书存储和更新
- 防重放: 防止重复回调处理
数据安全
- 敏感信息: 支付信息加密存储
- 访问控制: 严格的接口权限控制
- 审计日志: 完整的操作审计日志
🛡️ 异常处理
支付异常
- 网络异常: 微信支付网络超时处理
- 签名错误: 签名验证失败处理
- 证书过期: 证书自动更新机制
业务异常
- 订单不存在: 订单验证和错误处理
- 状态冲突: 订单状态冲突处理
- 业务失败: 租户创建失败回滚