13 Commits
Author SHA1 Message Date
qianyuandClaude Fable 5.1 0e0f73e2c7 多收款账号:API 动态添加币安账号,订单按账号隔离轮询与匹配
- 新增 accounts 表与接口:POST /api/v1/accounts(用只读接口试拉流水校验,失败 ERR_BINANCE)、
  GET /api/v1/accounts/{id}、POST .../verify、.../disable、.../enable;Secret 以 AES-256-GCM 加密存储,密钥由 API_AUTH_KEY 派生
- 订单增加 account_id(旧库自动补列,默认 default);唯一金额按账号分配;Matcher 按账号各自轮询、缓存与匹配,
  无待核销订单的账号不调币安接口;回填(claim)只在订单所属账号的流水里找
- 收银页按订单所属账号展示 UID / 收款链接 / 二维码;订单与回调体新增 account_id,订单响应新增 receive_link / receive_email
- Go / Python SDK 同步(AccountID、账号方法);协议文档 §2.6;e2e 覆盖多账号隔离、回填、停用与默认账号保护

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-04 09:39:48 +08:00
qianyubtcandClaude Fable 5.1 28048b0ea8 部署文档:使用可复现构建并说明如何核对线上版本
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-03 11:08:41 +08:00
qianyubtcandClaude Fable 5.1 81bd37d900 修复体验首页说明卡消失;收银页与结果页增加返回入口
问题:上一提交把结果卡片移到页面顶部时,脚本匹配到了结果块内层的 {{end}},
导致外层 {{if .Done}} 把后面的说明卡一并包住——没有结果时首页说明整体不显示,
有结果时「再体验一次」按钮被挤到说明卡之后。

修复:重写结果块为完整独立结构置顶,说明卡恢复独立;体验订单的收银页底部
增加「返回体验首页」链接。新增回归测试覆盖首页说明、结果页按钮与返回入口。

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-03 11:04:48 +08:00
qianyubtcandClaude Fable 5.1 d1f7c703b5 收银页与体验结果页:整页级支付成功提示
- 收银页到账后隐藏付款区,显示大绿勾、「支付成功」、实收金额,手机震动提示,
  3 秒倒计时自动返回商家并提供「立即返回」按钮;无 return_url 时提示可关闭页面
- 状态接口增加 actual_amount 字段
- 体验站结果页改为置顶的成功卡片,显示实收金额与实际命中的确认方式

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-03 10:54:57 +08:00
qianyubtcandClaude Fable 5.1 47e25b645c 体验页:到账确认方式选择折叠为进阶入口,默认即生产流程
默认不再要求访客选择,直接走唯一金额 + 可选备注 + 回填兜底的真实流程;
想专门体验备注码或回填订单编号的用户可展开进阶区选择。

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-03 10:44:47 +08:00
qianyubtcandClaude Fable 5.1 a749e9b989 收银页三种付款方式、内置体验页、反代支持与部署文档
收银页(/pay/{token})
- 三种付款方式按设备自动切换:桌面端扫码(由 RECEIVE_LINK 服务端生成收款二维码,
  不再需要上传图片)、手机端一键唤起币安 App(通用链接)、手动按 UID 转账兜底
- 三种到账确认方式(唯一金额 / 备注码 / 回填订单编号)在网关内始终同时生效

体验页(/demo,DEMO_ENABLED 开启,默认关闭)
- 选择金额档位与币种一键下单;可选择要体验的到账确认方式,收银页引导随之变化,
  结果页显示实际命中方式;按 IP 限流,金额仅限 DEMO_AMOUNTS 档位;根路径跳转 /demo

反向代理
- 新增 TRUST_PROXY:开启后限流按 CF-Connecting-IP / X-Real-IP / X-Forwarded-For 取真实访客 IP

部署
- docs/deploy.md:VPS 选型(须能直连币安 API)、systemd、Caddy、Cloudflare Tunnel
- deploy/ 下提供 bpaygate.service、Caddyfile、cloudflared.yml 模板

其他
- 新增依赖 github.com/skip2/go-qrcode(纯 Go)
- 新增体验页与三模式的测试用例

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-03 10:41:59 +08:00
qianyubtcandClaude Fable 5.1 ce83c5e0c2 修复收银页异步请求相对路径导致支付成功后不自动变绿
问题:收银页模板里二维码、状态轮询、订单编号回填三处使用相对路径
(src="qr"、fetch("status")、fetch("claim"))。页面地址 /pay/{token} 没有尾斜杠,
浏览器会把相对路径解析为 /pay/qr、/pay/status、/pay/claim,全部 404。
后果:付款到账后网关已核销订单,但收银页永远停留在「等待支付」,回填入口也不可用。

修复:三处改为带 token 的绝对路径 /pay/{token}/qr|status|claim。
新增 TestCashierAbsolutePaths 回归测试,跨语言 e2e 增加状态接口可达断言。

顺带修正 README 中 Python 示例的类名(BPayGate 被整体改名误替换为 BinancePayTool)。

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-03 10:09:37 +08:00
qianyubtcandClaude Opus 4.8 cea0d401b2 README 调整邀请链接文案
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-02 14:35:00 +08:00
qianyubtcandClaude Opus 4.8 9d03a7ff42 README 添加币安邀请链接与支持本项目小节
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-02 14:33:13 +08:00
qianyubtcandClaude Fable 5 8689e7314c README 添加 CI 与 License 徽章
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-02 14:25:19 +08:00
qianyubtcandClaude Fable 5 eb762c1e11 清理未使用的哑变量与调试方法
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-02 14:22:42 +08:00
qianyubtcandClaude Fable 5 f87ec65541 BinancePayTool v0.1.0:币安支付个人收款网关(Go 核心 + 四语言 SDK)
- Go 服务端:唯一金额/备注码/回填订单编号三路匹配、托管收银页、HMAC 回调七级重试、SQLite 单二进制
- SDK:Go / Java / PHP / Python,共享签名测试向量(docs/test_vectors.json)
- 跨语言 e2e(真实二进制 × Python SDK × mock 币安)、GitHub Actions CI、Dockerfile
- 协议文档 docs/protocol.md、调研与实测结论 docs/research.md

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-02 14:09:32 +08:00
qianyu e4275368ea Initial commit 2026-09-02 14:08:43 +08:00