喜欢的老哥给个鸡腿,点个赞啥的,下面的内容来自deepseek
项目地址:
- 服务端(Cloudflare Workers + D1):https://github.com/im-webb/vmq-cf-worker
- 监控端(Android / Kotlin):https://github.com/im-webb/vmq-monitor-android
两个项目README 里有截图、部署命令和常见问题。
这是什么
一套「个人收款码 + 手机监听通知」的免签收款系统。服务端是 V免签(vmqphp)的 TypeScript / Workers 重写,监控端是 Kotlin 原生 Android App。
适合的场景:自己的小站想收几块、几十块,但没有或不想接微信/支付宝的商户资质。钱直接进你自己的个人收款码,不经过任何第三方支付网关,也没有资金池。
流程:
用户扫码付款
↓
微信/支付宝到账通知
↓
Android 监控端监听通知 → 识别平台和金额 → 签名 → POST /appPush
↓
Workers 按金额匹配订单 → 标记已支付 → 回调你的 notify_url
和原版 V免签的区别
| 原版 V免签 | 本项目 | |
|---|---|---|
| 服务端 | PHP + MySQL + VPS | Cloudflare Workers + D1 |
| 后台 | PHP 页面 | React + shadcn SPA |
| 监控端 | 安卓挂机软件 | Kotlin 原生 App |
| 部署成本 | 需要服务器和数据库 | 免费额度内零成本 |
上游以 MIT 发布,本项目是重写,不是简单套壳。已经接过易支付的商城,改个网关地址和通讯密钥就能用。
服务端做了什么
- 全部跑在 Cloudflare:Workers + D1 + Assets,不用买 VPS,也不用维护 MySQL
- 兼容易支付协议:新接口
/api/order/create、/api/order/status;旧版/submit.php也还能用 - 双通道回调:服务端异步回调(8 次退避重试)+ 浏览器回跳兜底
- 金额池防串单:同一金额同一时间只允许一笔待支付订单
- React + shadcn 后台 SPA,深色模式;
/setup初始化,没有默认密码 - 通道管理、收款码上传、监控端心跳(60 秒无心跳自动拒单)
- 服务端支持微信 / 支付宝 / QQ / 数字人民币
- README 里附了一份「AI Agent 指南」:安装、配置、对接、例行体检都有可整段复制的提示语
部署五步:
git clone https://github.com/im-webb/vmq-cf-worker.git
cd vmq-cf-worker
pnpm install
wrangler d1 create vmq
cp wrangler.example.jsonc wrangler.local.jsonc # 填 database_id
pnpm db:remote
pnpm run deploy
部署完打开 /setup 创建管理员、设置后台别名和站点名,然后在「通道管理」加通道、传收款码。
注意两点:
- 必须写
pnpm run deploy,pnpm deploy是 pnpm 自己的命令,不会执行本项目脚本 - 防抢注可以先设
SETUP_TOKEN,再用/setup?token=...打开
监控端做了什么
Kotlin 原生实现,minSdk 24(Android 7.0+),targetSdk 34:
- 监听通知栏到账通知,识别平台和金额,签名后上报
- 前台服务 +
PARTIAL_WAKE_LOCK+ 开机自启 - 推送失败落 SQLite,指数退避重试,进程被杀也不丢单
- 5 秒窗口去重,
A → B → A这种交错场景也不会漏判 - 通讯密钥 AES-GCM 加密存储;地址固定 HTTPS,不允许明文降级
- 扫码 / 相册 / 手工录入三种绑定方式,相册不申请存储权限
- 不收集用户数据,没有统计和崩溃上报 SDK
已知限制:
- 必须手动授予「通知使用权」,否则收不到通知
- 建议加入电池优化白名单;部分国产 ROM 还要允许自启动/后台运行
- 在系统里「强行停止」会导致通知监听失效,要去设置里关掉再打开
- 手机要长期在线,适合小站,不适合高并发或高可用场景
技术栈
- 服务端:TypeScript、Cloudflare Workers、D1、React 19、Vite、Tailwind、shadcn/ui
- App:Kotlin、AGP 8.2、SQLite、zxing-android-embedded、Robolectric
- 许可:MIT
适合谁
- 有自己的小站/个人项目,想收小额款项
- 有闲置 Android 手机可以长期挂机
- 不想买 VPS、不想维护 PHP/MySQL
- 能接受「手机通知」这条链路本身的可用性限制
几点说明
- 部署后尽快完成
/setup,后台别名不要用admin,通讯密钥不要外泄 - 收款码图片以 base64 存在 D1,单张约 1.4MB 上限,普通收款码够用;大图建议改 R2
notify_url必须是域名,不能用裸 IP- 仅供个人学习与自用
截图:




欢迎提 issue / PR,觉得有用可以点个 star。有问题帖子里问,我尽量回。
