给 Jeepay 加一条东南亚支付通道

789 字
4 分钟
给 Jeepay 加一条东南亚支付通道

Jeepay 是一套面向互联网企业的开源支付系统,支持普通商户、服务商模式和多应用接入,Java + Spring Boot + Vue 的经典栈。它的通道抽象做得不错,但内置实现全是国内的——微信、支付宝、云闪付。

我需要的是东南亚的 ABA Pay,所以得自己接一条。

先想清楚:改哪里,不改哪里#

二开开源项目最容易犯的错,是图省事直接在核心流程里 if (channel == "ABA")。这么干第一次很快,但上游一发新版本你就再也合不回去了。

所以第一步是把边界划清楚:

  • 不动:订单状态机、商户/应用体系、对账主流程、管理后台框架
  • 只加:一个新的通道实现,塞进 Jeepay 已有的通道 SPI 里

Jeepay 的支付通道是按「一个通道 = 一组实现类」组织的,只要按它的接口把该实现的实现了,上层完全感知不到你是新加的。这就是它抽象做得好的地方。

要实现的三件事#

一条支付通道能跑通,本质上只有三件事:

1. 下单 — 把 Jeepay 的统一订单参数翻译成渠道要的格式,调渠道接口,拿回一个可以给用户扫的二维码或跳转链接。这一步的难点通常在签名算法,每家都不一样。

2. 异步回调 — 渠道支付成功后回调你的服务器。这里有三个点必须做对:

  • 验签:不验签的回调等于把订单状态接口裸奔在公网上
  • 幂等:渠道会重复推送,同一笔订单收到两次成功通知不能加两次钱
  • 金额校验:回调里的金额必须和本地订单金额一致才算数

3. 查单 / 对账 — 回调不是可靠的(网络抖动、你的服务重启都可能丢)。所以必须有一条主动查单的兜底路径,以及日终对账。只依赖回调的支付系统,迟早会丢单。

关于「测试环境」#

支付这块最麻烦的不是写代码,是没法随便测。渠道的沙箱环境往往和生产行为不一致,而生产环境每测一笔都是真金白银。

我的做法是在通道实现和真实渠道之间放一层 bridge,本地开发时 bridge 指向一个可以手动构造各种回调(成功、失败、重复推送、金额不符)的桩服务。这样上面那三个必须做对的点,全都能在本地覆盖到。

部署#

Docker Compose 起。仓库里维护了几套 compose 文件对应不同环境,这样本地、测试、生产之间的差异是显式写在文件里的,而不是靠某个人记得改哪个环境变量。


支付相关的具体参数、密钥配置和渠道文档细节这里不展开。这篇主要想说的是二开的边界怎么划——这个思路换到任何一个成熟开源项目上都适用。

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

给 Jeepay 加一条东南亚支付通道
https://dr.free--china.com/posts/jeepay-aba-channel/
作者
董锐
发布于
2026-08-10
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
董锐
网络 / 系统工程师。身份底座、跨境网络、信息化交付。
公告
这是项目履历站,配合简历看。中英文 PDF 在「关于我」页可下载。
分类
标签
站点统计
文章
8
分类
3
标签
35
总字数
7,284
运行时长
0
最后活动
0 天前
站点信息
构建平台
Local
博客版本
Firefly v6.16.6
文章许可
CC BY-NC-SA 4.0