Skip to content

开发文档

版本号修改修改时间备注
v1.0.0王小琱2024.12.20初次修订

1. 项目简介

  • 服务名称exchange-bank-bridge-backend
  • 服务描述:本项目为银行间资金桥接、账户管理、银行卡管理等金融业务提供后端服务,支持银行账户、银行卡、商户、银行中转等多种实体的管理与操作,适用于交易所、金融等场景。
  • 所属模块:金融基础服务组件。
  • 负责人:王小琱(wang746277441@gmail.com

2. 功能描述

  • 用户虚拟收款账号的创建、查询与管理
  • 银行卡信息的创建、查询与管理
  • 银行信息及中转银行信息的管理
  • 商户信息管理
  • 银行交易流水(如众安银行流水)记录
  • 支持出金、入金、回调等银行业务流程
  • 支持 RabbitMQ 消息队列、MySQL 数据库、Prometheus 监控等基础设施

3. 系统架构

3.1 主要技术栈

备注:具体依赖版本详见go.mod文件。

3.2 架构图

3.3 架构概括

  • 业务层(Business Layer)

    业务系统(如交易所、金融平台)通过 gRPC 调用本服务,实现银行账户、银行卡、出入金等业务。

  • 服务层(Service Layer)

    Bank Bridge Service 负责业务逻辑处理、数据持久化、消息推送等。

  • 基础服务层(Infrastructure Layer)

    依赖 MySQL 存储数据,RabbitMQ 进行消息通信,Prometheus 监控服务运行状态。

3.4 业务流程

3.4.1 出金业务流程

3.4.2 入金回调业务流程

4. 依赖组件

组件版本说明
MySQL8.x关系型数据库
RabbitMQ3.x消息队列

5. 接口设计

接口文档

使用make doc可以重新生成接口文档。

6. 数据库设计

数据库设计文档

7. 项目部署

部署文档

8. 错误码定义

错误码错误信息说明
ErrSystem内部错误服务内部异常
ErrNoMerchantInfo商户信息不存在商户信息不存在
ErrNoBankInfo银行信息不存在银行信息不存在
ErrCallZaintl调用众安银行接口失败调用众安银行接口失败
ErrFailed银行接口异常调用银行API失败
ErrNotFound消息队列异常RabbitMQ相关错误

9. FAQ

1. 如何创建用户虚拟收款账号?

请调用接口 CreateBankWalletInfo,传入用户ID、真实姓名、证件号码等信息,系统会自动为用户创建虚拟收款账号并返回 walletId。

2. 如何绑定银行卡?

请调用接口 BindBankCard,传入用户ID、真实姓名、证件号码、银行卡号等信息,系统会为用户绑定银行卡并返回 walletId。

3. 如何发起出金操作?

请调用接口 InitiateWithdrawal,传入 userId 及转账相关信息(如收款人账号、金额、币种等),系统会自动补全商户信息、子账户等,调用银行API发起出金,并返回结果。

4. 如何处理银行回调(入金/出金)?

银行侧会回调 OnTransactionReceived(入金)或 OnWithdrawalRequested(出金),系统会自动验签、记录流水,并通过消息队列推送业务消息。

5. 如何扩展业务表结构?

请参考 数据库设计文档 的命名规范和表结构,新增或修改表,并同步更新 entity 结构体。

6. 如何排查出金/入金失败?

  • 检查请求参数是否完整、正确
  • 检查银行API返回的错误码和信息
  • 查看服务日志,定位具体失败原因
  • 检查数据库和消息队列服务是否正常

7. 如何安全地修改生产环境配置?

建议通过环境变量或 .env 文件进行配置修改,修改后重启服务生效。所有敏感信息(如私钥、数据库密码)请妥善保管。

8. API信息以及商户信息如何录入到数据库中?

  • bank_anget_info表中录入中转银行信息。
  • bank_merchants表中录入商户信息。
  • bank_info表中录入银行信息。

10. 参考资料

11. 致谢

感谢 众安银行 提供的银行API服务。

🚀 构建现代化数字资产交易平台