bomaos-shop 拆解:Java 单模块发卡的支付分包与 GPL-3.0 边界

波猫商店 bomaos-shop 是一个 Java 写的个人商城/发卡平台(个人站长卖卡密、兑换码、虚拟商品的网店程序),Spring Boot 加 Layui 后端的单模块项目,卖点之一是支付渠道多。GPL-3.0 协议,约 260+ star。

是什么

业务面:商品、订单、卡密(代码里的 carmi 包)、内容、设置、前台接待等模块各自成套;支持手动与全自动发货,带无限层级的分层批发模式(按购买量分档定价)、优惠券系统、商品自定义购买备注字段、微信订单消息通知和邮件发送,前台有卡片式商品展示和白天/黑夜/暗黑多套 Layui 主题,后台可自定义站点标题、关键字、logo 和首页公告弹窗。支付渠道 README 列了一串:v 免签、易支付、YunGouOS、虎皮椒、payjs、微信官方扫码、微信 H5、支付宝当面付、支付宝网站、Paypal、epusdt(USDT TRC-20)等。没做到的:单商户模型,不是多商家平台;README 本身不给部署步骤,只有外链文档。注意 README 里混有作者另一收费版本的广告内容,读的时候自行过滤,本文只按仓库代码说话。

技术栈与部署

以 pom.xml 为准(README 徽标还停留在 Spring Boot 2.2.2 和 1.0.1 版,实际是 2.7.13 和 2.0.4,徽标滞后):Java 8,Spring Boot 2.7.13,MyBatis-Plus 3.5.3.1,Druid 连接池,Shiro 做权限,Hutool 和 POI 处理 Excel,前端是 Layui 加 Beetl 模板。配置按 dev/test/prod 三个 profile 分文件,服务端口 8085,数据库 MySQL 8(jdbc:mysql 连 bomaos-shop 库,建库脚本在仓库 sql/bomaos-shop.sql)。README 没写构建命令;仓库自带 Dockerfile 和 docker-compose.yaml,两条路都通:

# 传统方式(按 Spring Boot 惯例推断,README 未明写)
mvn clean package -DskipTests
java -jar target/bomaos-shop-*.jar

# 容器方式:把 sql/bomaos-shop.sql 复制为 mysql/db/init.sql
docker compose up -d   # 起 mysql8 + app,端口 8085

值得抄的三点

一、支付网关一个渠道一个包。common/core/pays 下面 alipay、wxpay、payjs、paypal、epay、epusdt、xunhupay、yungouos、budpay、jiepay、mqpay 十一个目录,每个渠道自带 controller/service/entity,回调入口各自独立。回调验签、跳转、对账各自闭环,好处直观:换渠道、排查回调就是进一个目录的事,grep 层面隔离干净。代价是每个渠道各写各的单号与状态机,没有强制统一的抽象接口,新增渠道容易各自跑偏——抄这个思路时建议先补一层基类把下单、验签、通知三步定死。

二、单模块项目里的分包纪律。products、orders、carmi、content、settings、reception 每个业务包都是 controller/service/mapper/entity/vo 全套,公共配置、异常、Shiro、工具收在 common/core,后台账号体系在 common/system。不用 Maven 多模块也能把边界画清楚,对小团队单体是务实的结构参考。

三、卡密导入走 Excel。carmi 包下单独有 excel 目录(Excel、ExcelType、基于 POI 的流式工具类),配合 pom 里的 hutool-poi,卡密批量导入导出是发卡系统的刚需动作,这里给了一套 Java 侧现成做法,比手工粘贴文本框可靠得多。

别踩的坑

一、Druid 监控页。application.yml 开了 /druid/* 的 stat-view-servlet,而 dev 配置里 login-username、login-password 都是空值——照 dev 配置上线,等于把 SQL 统计和 URI 监控挂在公网上。上线前关掉它或设账号密码。

二、版本信息口径乱。README 徽标、README 正文版本号与 pom.xml 对不上,compose 文件默认 spring.profiles.active=dev,且把数据库密码 root 直接写在环境变量里覆盖配置。以仓库文件为准,别信徽标;上线至少切 prod profile 并改掉 compose 里的明文密码。

三、栈偏老。Java 8 加 Spring Boot 2.7.x,在新 JDK 上编译的兼容性 README 没写,得自己试;官方 Docker 镜像用的就是 maven:3.8.1-jdk-8-slim 和 openjdk:8u212-jre,想升 JDK 先动这两个基础镜像。

许可证

GPL-3.0 有传染性:只要你把修改后的版本分发出去(打包给他人、预装在设备里出售都算),修改部分必须同样以 GPL-3.0 开源,不能闭源转售。纯自用部署不分发,不触发这条义务;想拿它做商业 SaaS 的,先分清「分发」和「服务」的界限。

© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容