常见问题
汇总 DaxPay 使用、部署、二次开发中高频出现的疑问。未覆盖的问题可至 GitHub Issues 或 交流群 反馈。
基础概念
DaxPay 是什么
DaxPay 是一款开源支付系统,提供支付、退款、查询、回调等支付核心能力,将支付宝、微信、银联等多种支付通道封装为统一的 HTTP 接口,业务系统只需对接一套标准协议即可接入多种支付方式。详见 项目介绍。
开源版和商业版有什么区别
开源版(本项目)交付完整的支付核心链路与多端管理界面,基于 LGPL v3.0 协议开源。
商业版(dax-pay-plus)在开源版基础上扩展:
- 更多聚合通道 — 20+ 渠道子模块
- 分账与结算、国际支付通道等增强能力
分账结算为商业版能力,不在开源版交付范围内。
LGPL v3.0 协议可以商用吗
可以。LGPL v3.0 允许商业使用。你的业务系统可以通过接口调用或动态链接方式使用 DaxPay,无需开源你的业务代码。详见 开源协议。
部署运行
后端编译必须用 mvnd 吗
项目约定使用 mvnd(Maven Daemon)加速编译。普通 mvn 也能编译,但 mvnd 自带守护进程,增量编译速度显著更快,推荐使用。
Apache Artemis 能否替换为其他消息队列
当前版本强依赖 Artemis(用于支付延时通知等 JMS 场景),不支持直接替换为 RabbitMQ / Kafka。如需替换需自行改造消息中间件适配层。
支持哪些数据库
仅支持 PostgreSQL 14+。时间字段统一使用 timestamptz(6),实体类使用 OffsetDateTime,不支持 MySQL / Oracle 等。
容器化部署最低配置
建议最低 2 核 4G(含 PostgreSQL / Redis / Artemis / 主应用 / 通道子应用全部容器化)。生产环境建议 4 核 8G 起步,并根据交易量水平扩展通道子应用实例。
PowerShell 下 mvnd 编译参数报错
PowerShell 下含 = 的 -D 参数会被空格拆分,必须加引号:
# 错误 — 会被拆分
mvnd compile -Dmaven.test.skip=true
# 正确 — 加引号
mvnd compile "-Dmaven.test.skip=true"详见 项目构建。
通道对接
开源版已支持哪些支付通道
已对接 12 个国内支付通道:
- 直连通道(
channel-one)— 支付宝、微信、抖音、银联商务 - 聚合通道(
channel-two)— 拉卡拉、海科融通、斗拱(汇付天下)、乐刷、随行付、河马付(杉德)、Adapay、富友
详见 特色功能 - 通道总数与分布。
如何新增一个支付通道
- 在对应通道子应用(直连走
channel-one,聚合走channel-two)的daxpay-channel-impl下实现 SDK 调用与签名/验签 - 在主应用
daxpay-channel注册通道策略与配置数据 CRUD - 在
ChannelEnum补充通道枚举
新增通道只需实现 SDK 调用并注册策略,不影响主链路。
channel-one 和 channel-two 有什么区别
两者架构完全相同,区别在于承载的通道集合:
channel-one— 对接支付宝、微信等直连通道(官方 SDK)channel-two— 对接拉卡拉、富友等聚合通道(聚合 SDK)
主应用通过 daxpay.channel.one.base-url / daxpay.channel.two.base-url 路由,子应用编号固定不可改名。
通道子应用的 Java 版和 Go 版怎么选
channel-one 同时提供 Java(Spring Boot)与 Go(Gin)两套完全对等的实现,端口、路由、响应契约一致:
- Java 版 — 生态完整,通道官方 SDK 现成,适合快速对接
- Go 版 — 更高吞吐、更低内存占用,全部自研 HTTP 签名对接(无第三方 SDK)
按团队技术栈与性能诉求选用,两者二选一,端口冲突不可同时启动。
通道子应用必须独立部署吗
是的。通道子应用独立部署是 DaxPay 的核心设计 —— 将第三方 SDK 隔离到子应用,避免 SDK 依赖污染主应用,支持独立升级与弹性伸缩。主应用通过 @HttpExchange 声明式 HTTP 客户端调用子应用,链路 AES-GCM 加密。
功能边界
是否支持分账 / 提现
分账与结算是后续规划能力,当前开源版尚未实现。提现(代付)同理。这些属于商业版的增强方向。
是否支持国际支付(PayPal / Stripe)
国际支付通道(PayPal / Stripe 等)为后续规划,当前开源版聚焦国内支付通道。预留了 境外卡支付 枚举与扩展点。
沙箱环境怎么用
DaxPay 采用部署级沙箱隔离:
- 测试 / 开发环境配置
daxpay.platform.config.sandbox-enabled=true,允许沙箱联调 - 生产环境必须配置
sandbox-enabled=false,启动时会强制将所有activeEnv=sandbox的产品重置为prod,保证生产数据纯净
生产环境隔离
沙箱联调请走独立的测试环境部署,生产数据库严禁从测试环境导入数据。详见 配置说明。
是否支持多商户 / 多商户隔离
支持。DaxPay 原生支持多商户模式:
- 运营端 + 商户端双入口,数据行级隔离(商户编号自动隔离)
- 单商户可配置多个支付应用,独立凭证与回调地址
二次开发
能否修改源码用于自己的项目
可以。基于 LGPL v3.0,你可以自由修改、使用源码。若你修改了 DaxPay 库本身(而非通过接口调用),需以 LGPL 协议开源你的修改;若仅通过接口调用或动态链接,你的业务代码无需开源。
前端如何对接后端接口
前端通过 RESTful HTTP 接口对接主应用(端口 9999),接口请求 / 响应支持 RSA 签名防篡改,认证基于 Sa-Token(token name: Accesstoken)。详细接入方式见 接口文档。
如何新增一种界面语言(i18n)
- 后端 — 资源文件在
common-i18n/src/main/resources/i18n/{locale}/,按业务模块拆分,新增语种需同步维护zh-CN/en-US/zh-TW/zh-HK/ja-JP/ko-KR - 前端(Web/H5) — 10 语种,新增 key 需全语种同步
- 小程序 — 仅中英(小程序端条件编译剔除繁体 / 日韩 / 东盟)
详见各端 i18n 规范。
数据库表结构在哪?如何初始化
SQL 脚本位于 dax-pay-open/_config/sql/,全新安装顺序为 tables.sql(建表)→ datas.sql(初始数据)。仓内另提供升级脚本 update-tables.sql → update-datas.sql 与菜单种子 iam_perm_menu.sql。
注意
全量 tables.sql / datas.sql 不在仓库内(体积大),需从飞书安装包或历史版本获取。仓内 README.md 有说明。
未找到答案?欢迎到 GitHub Issues 提问或加入 交流群 讨论。