给 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.cctv15.net/posts/jeepay-aba-channel/
作者
董锐
发布于
2026-08-10
许可协议
CC BY-NC-SA 4.0
相关文章智能推荐
1
订阅制服务的用量计量和三通道支付
个人上线的系统一套跑在 GCP 上的订阅计费:支付宝 / PayPal / USDT 三条通道,重构了原实现里用量统计对不上账的部分。只写计量和通道边界,不写业务名和域名。
2
海外园区宿舍管理系统:给上万人混住的园区做一套住得下、查得清的平台
个人上线的系统印尼工业园区 8 栋楼、近 3,000 床位、上万名中方与印尼籍员工混住。市面上的开源宿舍系统没有一个能用,因为约束根本不同。这是我从建模到上线做完的一套。
3
用 Rust 写一套直播平台:推流、鉴权、回放,也能当在线教育用
个人上线的系统面向个人、私域和小团队的自建直播平台。RTMP 推流、HLS/FLV 拉流、房间权限、录制回放、实时弹幕——把这几样凑齐,它就不只是直播,也是一套能用的在线教育平台。
4
实时多人对战服务端:把规则层和网络层彻底拆开
个人上线的系统一个四人实时对局平台的服务端设计。核心决定只有一个——规则引擎不认识 socket,于是测试、AI 和断线重连全都变简单了。
5
云资源自助交付平台:把「申请一台机器」做成不用找人的事
个人上线的系统对接 GCP / AWS API 做计算实例的自动开通、回收与生命周期管理,用户在自助控制台就能开关机、重装、重置凭据。做这套的动机来自运维本职——重复劳动应该被消灭。
随机文章随机推荐
Profile Image of the Author
董锐
网络 / 系统工程师。身份底座、跨境网络、信息化交付。
公告
这是项目履历站,配合简历看。中英文 PDF 在「关于我」页可下载。
分类
标签
站点统计
文章
16
分类
3
标签
76
总字数
20,278
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Local
博客版本
Firefly v6.16.6
文章许可
CC BY-NC-SA 4.0