歌词尚未加载
上一篇记录了 GMShop Edge 数字商品商城的部署。这篇继续记录 GMPay Edge,用它给商城提供加密货币支付能力。
项目仓库:
1 | https://github.com/GMWalletApp/gmpay-edge |
GMPay Edge 是一个运行在 Cloudflare Workers 上的自托管支付网关。它负责创建支付订单、显示收银台、检查链上或第三方平台入账,并通过 Webhook 把支付结果通知给商城。
我最终配置了两种收款方式:
1 | USDT · TRON / TRC20 |
只需要填写公开收款地址。任何时候都不要把钱包助记词或私钥写入后台、GitHub 或 Cloudflare 环境变量。
一、它和 GMShop Edge 的关系
这两个项目虽然名字相近,但作用完全不同。
1 | GMShop Edge:数字商品商城 |
最终结构是:
1 | 用户在 GMShop Edge 下单 |
二、GMPay Edge 会创建哪些 Cloudflare 资源
这次部署创建或绑定的资源如下:
| 类型 | 名称 | 作用 |
|---|---|---|
| Worker | gmpay-edge |
运行收银台、支付 API 和管理后台 |
| D1 | gmpay-edge |
保存订单、支付记录、API 凭证、Webhook 和系统设置 |
| KV | gmpay-edge-cache |
保存短期 RBAC、公开配置缓存和辅助数据 |
| R2 | gmpay-edge-files |
保存付款复核凭证、上传文件和导出文件 |
| Payment Queue | gmpay-edge-payments |
异步执行支付扫描和入账检查 |
| Webhook Queue | gmpay-edge-webhooks |
异步投递商户回调 |
| Payment DLQ | gmpay-edge-payments-dlq |
保存支付扫描多次失败的消息 |
| Webhook DLQ | gmpay-edge-webhooks-dlq |
保存 Webhook 多次失败的消息 |
| Cron Trigger | * * * * * |
每分钟触发订单扫描、过期处理和维护任务 |
和商城相比,GMPay Edge 多了一条独立的 Webhook Queue。支付扫描和商城回调不会挤在同一个队列里。
三、开始一键部署
Cloudflare 一键部署地址:
1 | https://deploy.workers.cloudflare.com/?url=https://github.com/GMWalletApp/gmpay-edge |
进入后登录 Cloudflare,并授权 GitHub。
我勾选了“创建专用 Git 存储库”,让 Cloudflare 在自己的 GitHub 账户中创建一份私有仓库并连接自动部署。
四、填写部署资源
1. 项目名称
1 | gmpay-edge |
2. KV 命名空间
选择“新建”,名称:
1 | gmpay-edge-cache |
3. D1 数据库
选择“新建”,名称:
1 | gmpay-edge |
位置选择:
1 | automatic |
读取复制关闭。支付系统以写入和状态更新为主,个人使用前期没有必要开启。
4. R2 存储桶
选择“新建”,名称:
1 | gmpay-edge-files |
我的 R2 位置选择了:
1 | APAC |
5. Webhook Queue
选择“新建”,名称:
1 | gmpay-edge-webhooks |
6. Payment Queue
选择“新建”,名称:
1 | gmpay-edge-payments |
两个死信队列由项目配置自动创建:
1 | gmpay-edge-webhooks-dlq |
7. 构建和部署命令
保持默认:
1 | bun run build |
1 | bun run deploy |
确认资源没有和 GMShop Edge 混用后,点击“部署”。
五、确认部署成功
我这次部署成功后,日志中显示了以下绑定:
1 | env.CACHE KV Namespace |
Worker 地址为:
1 | https://gmpay-edge.963107397.workers.dev |
同时成功注册:
- 每分钟一次的 Cron
- Webhook Queue 的 Producer 和 Consumer
- Payment Queue 的 Producer 和 Consumer
关于 workers_dev 和 Preview URLs 默认开启的警告可以先忽略,它们不会阻止部署成功。
六、初始化管理员
第一次部署完成后访问:
1 | https://gmpay-edge.963107397.workers.dev/install |
创建第一位管理员后,会自动进入:
1 | https://gmpay-edge.963107397.workers.dev/admin |
安装过程会创建:
- 第一位 root 管理员
- 内置角色和权限
- 运行时密钥
- 支付基础数据
- Telegram 默认设置
安装完成后不会自动创建真实收款方式,钱包地址仍然要自己添加。
七、绑定自定义域名
我给支付网关使用的域名是:
1 | gmpay.mcpq.cc |
进入:
1 | Workers 和 Pages |
填写:
1 | gmpay.mcpq.cc |
然后在 GMPay Edge 后台修改两项设置。
1. 应用地址
进入:
1 | 系统设置 |
填写:
1 | https://gmpay.mcpq.cc |
2. Allowed Hosts
进入:
1 | 系统设置 |
一行一个:
1 | gmpay.mcpq.cc |
保存后通过下面的地址进入后台:
1 | https://gmpay.mcpq.cc/admin |
保留原始 workers.dev 地址,方便自定义域名异常时进入后台排错。
八、项目当前内置的支付网络
当前版本默认内置:
1 | TRON |
还可以通过只读 API 检查 Binance、OKX 和 OKPay 的入账。
当前版本没有默认内置 Arbitrum,因此不能只在后台随便填写一个 Arbitrum RPC 就当成完整支持。需要修改网络目录、代币合约和相关配置后再测试。
九、配置 USDT TRC20 收款
进入:
1 | 支付运营 |
填写:
1 | 名称:USDT_trc20 |
最低和最高金额可以暂时留空。
创建完成后启用该收款方式。
TRON 地址通常以 T 开头。填写前一定要确认它确实支持 USDT TRC20,不要把其他网络的充值地址混进来。
十、配置 USDC Base 收款
再次新建收款方式:
1 | 名称:USDC base |
最低和最高金额同样可以留空。
创建后启用。
Base 使用 EVM 地址格式,地址通常以 0x 开头。但地址格式相同不代表网络相同,付款人必须选择:
1 | USDC → Base |
不能从 Arbitrum、Ethereum、Polygon 或其他网络直接转入。
十一、创建给商城使用的 API 凭证
进入 GMPay Edge:
1 | 开放集成 |
名称填写:
1 | GMShop Edge |
权限全部勾选:
1 | orders:create |
创建完成后会显示:
1 | PID |
Secret 只显示一次,关闭窗口后不能再次查看,只能轮换生成新密钥。这里要立即保存到密码管理器中,不能提交到 GitHub,也不要放到公开文章截图里。
十二、在 GMShop Edge 中添加 GMPay 渠道
进入商城后台:
1 | https://shop.mcpq.cc/admin |
找到:
1 | 支付配置 |
提供商选择:
1 | GMpay |
填写:
1 | 渠道名称:USDT / USDC 加密货币支付 |
基础地址只填写域名,不要附加 /admin 或具体接口路径。
商城订单币种
这里填写的是商品标价币种,不是最后收到的币种。
商品以人民币标价时填写:
1 | CNY |
商品以美元标价时填写:
1 | USD |
GMPay Edge 会根据汇率计算需要支付多少 USDT 或 USDC。
默认 Token 和 Network
因为我同时启用了:
1 | USDT · TRON |
所以这两项保持为空:
1 | 默认 Token:留空 |
这样买家进入收银台后,可以自行选择两种收款方式。如果强制填写默认网络,收银台可能只直接进入指定币种和网络。
保存后点击渠道测试,确认状态显示健康,再启用支付渠道。
十三、Webhook 不需要手动填写
商城创建 GMPay 订单时,会自动把自己的 notify_url 提交给 GMPay Edge。
支付状态发生变化后,GMPay Edge 通过 Webhook Queue 异步回调 GMShop Edge。商城验证签名后更新订单状态,并继续执行自动交付。
因此正常对接时不需要在 GMPay Edge 中手动写商城回调地址,也不要把回调地址直接替换成 NapCat 或其他通知接口,否则商城可能无法收到支付结果。
需要额外做 QQ 群通知时,应使用独立的中转 Worker 或其他旁路通知方案,不要破坏商城原有回调链路。
十四、支付流程
1 | 1. 用户在 shop.mcpq.cc 创建订单 |
十五、费用和免费额度
GMPay Edge 可以先在 Cloudflare 免费套餐中部署。个人使用、测试和低订单量阶段通常够用,但支付网关会每分钟执行 Cron,并通过 Queue 扫描订单,所以要比普通静态网站更关注资源用量。
重点观察:
- Workers 请求和 CPU 时间
- D1 读取与写入
- Payment Queue 操作次数
- Webhook Queue 操作次数
- R2 存储和请求
R2 超出免费额度后可能产生账单。具体免费额度和价格会调整,应以 Cloudflare 官方最新价格页面为准。
十六、安全注意事项
- 只填写公开收款地址,不填写助记词和私钥。
- API Secret 只保存到安全位置,不放进文章和截图。
- Binance、OKX 等只读接入只授予查询所需权限,不要开放提币权限。
- 正式营业前分别测试一笔 USDT TRC20 和 USDC Base 小额订单。
- 确认付款网络和收款网络完全一致。
- 定期备份 D1、R2 和运行时配置。
- 留意 Webhook 失败记录和死信 Queue。
- 项目升级前先备份,并重新跑一笔真实支付测试。
十七、最终部署结果
1 | 支付网关:https://gmpay.mcpq.cc |
当前启用的收款方式:
1 | USDT · TRON / TRC20 |
最终完成的对接结构:
1 | GMShop Edge |
这样商城和支付网关都运行在 Cloudflare 上,不需要额外维护 VPS、Docker、反向代理和传统数据库。后续主要工作就是完善商品、邮件、备份、监控和真实订单测试。
评论