跳到主要内容

支付系统

支付系统是井云平台的核心业务系统,负责处理订单管理、微信支付集成、支付回调处理以及订单支付后的业务逻辑。

🎯 系统概述

核心功能

  • 订单管理: 支持多种订单类型的创建、查询、更新
  • 微信支付: 集成微信支付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等索引
  • 分页查询: 订单列表分页优化
  • 事务处理: 订单状态更新事务

🔒 安全机制

支付安全

  • 签名验证: 严格的回调签名验证
  • 证书管理: 安全的证书存储和更新
  • 防重放: 防止重复回调处理

数据安全

  • 敏感信息: 支付信息加密存储
  • 访问控制: 严格的接口权限控制
  • 审计日志: 完整的操作审计日志

🛡️ 异常处理

支付异常

  • 网络异常: 微信支付网络超时处理
  • 签名错误: 签名验证失败处理
  • 证书过期: 证书自动更新机制

业务异常

  • 订单不存在: 订单验证和错误处理
  • 状态冲突: 订单状态冲突处理
  • 业务失败: 租户创建失败回滚

📚 相关文档