0 字
1 分钟阅读

Supay 3.0:一个文件跑起来的个人收款网关

2026-10-24
2026-10-24
仓库 · 发行版下载gitee.com/yansaker/supay

它解决的是什么场景#

自己卖点东西、接个单、发张卡,想在线上收钱常常卡在两处:一是接不进正规支付服务商,二是就算接进了,也得留一台设备 7×24 盯着到账。Supay 是把这两件事一起解决的个人收款聚合网关——收款渠道配进后台,前台出收银台,用户下单付款,到账由监听端确认并异步回调你的系统。

它对外走的是标准易支付接口协议,官网自述「5 分钟快速接入」:原本按易支付写的发卡站、商户系统,把网关地址换成自己的 Supay 域名就能切过来,业务代码不用动。

3.0 最大的变化:交付变成一个文件#

3.0.0(2026-10-24 发布)把收银台、管理后台、下单接口全部编译进同一个可执行文件,运行时不再依赖 Node,也不需要单独放一份前端静态目录。

2.x3.0
依赖MySQL + Redis仅 MySQL 5.7+
前端需单独放置静态目录内嵌在二进制里
对外端口80809090
初始化改配置文件网页安装向导,或环境变量

系统要求只剩两条:Linux x86_64,一个 MySQL 实例。发行版的 supay-3.0.0-linux-amd64.tar.gz 约 14MB,解压出来是一份带执行权限的 supay-go-linux-amd64 加一个环境变量模板;二进制是静态编译的,服务器不需要再装 Go 环境。原来要同时伺候 Redis 的那份运维负担直接消掉了。

功能版图#

后台按模块拆开,官网自述的几块能力都在界面上:

模块覆盖内容
收款渠道支付宝/微信个人码、免挂支付、易支付接口,支付宝当面付与微信 Native(一单一码、自动确认),以及收钱吧、拉卡拉、付呗、富友、星驿付等码牌收款;多分组自动轮询、智能选码
收银台默认、票务、简约三套模板,后台 pay_template 一键切换,也能用 ?style=ticket 单次覆盖
下单与回调submit.php 表单跳转、/v1/gateway/submit 返回收银台地址两种接法;异步通知 + 主动查单
订单管理Web 后台订单台,人工确认收款、给已支付订单补发回调、对账查询
设备监控Android 端后台运行、心跳检测、收款码状态实时监测
通知支付结果异步回调商户,另有邮件与 APP 多渠道事件提醒
安全MD5 签名验证、JWT 鉴权、后台安全入口、HTTPS 全链路

两条路都要过的最后一步:安装向导#

不管用面板还是命令行,启动二进制后都打开 http://服务器IP:9090/setup/,填 MySQL 信息,先「测试连接」确认账号可用,再「开始安装」按需建库、建表、写入初始数据。安装信息落在二进制同目录的 supay-config.json(权限 600),装完向导自动锁定、/setup 接口自动关闭,之后只提供状态查看;成功页会展示一次初始管理员账号。

向导只建表、不清数据,可以重复执行。想换数据库时,停服删掉 supay-config.json 再重启就能重新进向导。关掉「自动创建数据库」的话,目标库必须已经存在,且这个账号对它有建表权限。

宝塔面板:填六个字段就起来#

习惯可视化操作就走这条路,全程不碰 SSH。先在「数据库」建库 supay、字符集 utf8mb4(也可以跳过,让向导自动建库);再到「文件」进 /www/wwwroot/ 新建 supay 目录,上传 tar 包解压,得到 supay-go-linux-amd64(包内已带执行权限,面板提示权限不足就把文件权限改成 755)。然后「网站 → Go 项目 → 添加项目」按这张表填:

字段填写
项目名supay
项目路径/www/wwwroot/supay/supay-go-linux-amd64
启动命令/www/wwwroot/supay/supay-go-linux-amd64
运行用户root;用 www 要保证该目录可写(安装配置就写在这里)
项目端口9090
放行端口开启

宝塔的 Go 项目表单只有这几项、没有环境变量输入框,所以数据库不用提前注入,直接在上面那个安装向导里填就行。域名与 HTTPS 走「网站 → 反向代理」:新建一个指向 http://127.0.0.1:9090 的代理站点并申请 SSL 证书,再去后台「支付配置」把服务器域名填成这个 HTTPS 域名,支付回调取的就是这一项。

面板上的「放行端口」只管本机防火墙,阿里云、腾讯云等还要自己到控制台的安全组放行 9090(入方向规则);只走反向代理的话,放行 80/443 就够。另外进程必须由面板启动——自己用 nohup 或命令行拉起来的进程面板识别不了,列表会一直显示「停止」;停止重启用项目列表里的按钮,别在 SSH 里 kill,否则面板状态和实际不一致。

命令行:环境变量 + systemd#

用配置管理或容器接管的话,走环境变量更干净:数据库相关变量存在,安装向导就自动锁定,适合统一注入。变量固定这几项:

DB_HOST=127.0.0.1
DB_USER=supay
DB_PASSWORD=你的密码
DB_NAME=supay
JWT_SECRET=你的随机密钥
GIN_MODE=release

把二进制注册成 systemd 服务并配上自动重启,崩了 3 秒自愈;Nginx 只在你要绑域名和 HTTPS 时才需要,反代到本机 9090 即可。

跑起来之后有哪些页面#

公开侧四个入口:/ 官网首页、/pay 下单承接页、/pay/order/订单号 收银台、/setup 安装向导(装完自动关闭)。管理后台一个模块一路径:

类别路径
后台 · 交易dashboard 概览 · orders 订单 · channels 支付渠道 · pay-config 支付配置 · users 用户
后台 · 接入与系统api-docs 接口文档 · app-config 手机端配置 · email 邮件通知 · settings 系统设置 · about 关于

登录入口是 /admin/login/安全入口。没配入口时任意路径都能进登录页,配置之后必须带正确的入口路径——扫描器找不到门,是最省事的一道遮挡。

到账怎么确认#

渠道类型决定了要不要挂机:支付宝当面付、微信 Native 这类官方接口是一单一码,平台自己就能确认;免挂支付走第三方接口,支付宝那条还支持对账单自动确认;用个人收款码,就让配套的 Supay 手机端监听(Android,当前 1.3.0,仓库发行版下 app-release.apk)来收消息。

手机监听很轻:后台「APP 配置」生成二维码,手机扫一次完成初始化,之后到账消息由手机接收并回传,订单自动确认,App 侧带心跳检测与更新检查,1.2.0 起还把运行日志里的非监听消息过滤掉了,看日志更清爽。不想让服务器或备用机一直开着的场景,就靠它兜住。

升级与备份#

升级就是覆盖一个文件:备份 supay-config.json 和数据库,停服,用新二进制覆盖旧文件,再启动。宝塔用户在项目列表里「停止 → 覆盖 supay-go-linux-amd64 → 启动」三步,命令行用户同样先停再换。表结构在启动时做幂等增量迁移,不会清空数据,小版本更新不必先导出再导入。

二进制里不含任何密钥,数据库密码和 JWT_SECRET 只从环境变量或 supay-config.json 读取;GIN_MODE=release 时不会加载 .env。supay-config.json 是明文密码文件,权限保持 600,目录只让服务账号可读,别提交进仓库。

部署后先做这四件事#

  1. 初始管理员账号只在安装成功页显示一次,登录后立刻到「系统设置」改密码,并把安全入口 admin_entry 配上;
  2. 到「支付渠道」填好收款码与凭据,启用要用的通道;
  3. 到「APP 配置」用二维码初始化手机端监听;
  4. 首次进后台会停在「免责声明」页,勾选确认后各模块才展开。

对接商户系统时按后台「接口文档」拼参数,签名用 MD5、与标准易支付对齐;发货判定以异步通知或主动查单为准,同步跳转只作为支付完成后的引导。个人码模式下收银台展示金额可能带 0.01 元的识别偏移(防撞单),对账以下单金额为准——这是接口文档里写明的正常现象。

适合谁#

  • 想在自己机器上收钱,又嫌正规接入手续太重的个人开发者和小店;
  • 已经有发卡、接单、预约类站点,只缺一个能自己控的收款网关和订单台;
  • 用惯宝塔但不想被插件生态绑住,希望收款台是自己一个文件、自己一台机器;
  • 只有一台低配 VPS,不希望为了收款再额外拉一个 Redis 或单独部署前端。

不想开服务器也有一条路:Supay 的免服务器版本挂在一键部署中心,用 EdgeOne 加一个免费 PostgreSQL 库,填自己的 Token 就能部署,截至发稿项目页标注已部署 84 次。要把数据完全留在自己机器上时,再回到这篇的 3.0 单文件版。

本文标题:Supay 3.0:一个文件跑起来的个人收款网关
本文链接:https://blog.coosspadger.cn/posts/supay-3-single-binary-payment-gateway
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!