项目部署

GMPay Edge 部署实践记录:使用 Cloudflare Workers 搭建加密货币支付网关

2026-07-30 #Cloudflare#Workers#GMPay Edge#USDT#USDC#加密货币支付#部署记录
早风依旧
正在加载歌曲信息……
私有音源
0:00 0:00

上一篇记录了 GMShop Edge 数字商品商城的部署。这篇继续记录 GMPay Edge,用它给商城提供加密货币支付能力。

项目仓库:

1
https://github.com/GMWalletApp/gmpay-edge

GMPay Edge 是一个运行在 Cloudflare Workers 上的自托管支付网关。它负责创建支付订单、显示收银台、检查链上或第三方平台入账,并通过 Webhook 把支付结果通知给商城。

我最终配置了两种收款方式:

1
2
USDT · TRON / TRC20
USDC · Base

只需要填写公开收款地址。任何时候都不要把钱包助记词或私钥写入后台、GitHub 或 Cloudflare 环境变量。

一、它和 GMShop Edge 的关系

这两个项目虽然名字相近,但作用完全不同。

1
2
GMShop Edge:数字商品商城
GMPay Edge:加密货币支付网关

最终结构是:

1
2
3
4
5
6
7
8
9
10
11
12
13
用户在 GMShop Edge 下单
↓
商城通过 GMPay API 创建支付订单
↓
GMPay Edge 显示收银台
↓
用户选择 USDT TRC20 或 USDC Base
↓
GMPay Edge 检测到账
↓
Webhook 通知商城
↓
商城更新订单并自动交付

二、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
2
gmpay-edge-webhooks-dlq
gmpay-edge-payments-dlq

7. 构建和部署命令

保持默认:

1
bun run build
1
bun run deploy

确认资源没有和 GMShop Edge 混用后,点击“部署”。

五、确认部署成功

我这次部署成功后,日志中显示了以下绑定:

1
2
3
4
5
env.CACHE            KV Namespace
env.WEBHOOK_QUEUE gmpay-edge-webhooks
env.PAYMENT_QUEUE gmpay-edge-payments
env.DB gmpay-edge
env.FILES gmpay-edge-files

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
2
3
4
5
6
Workers 和 Pages
→ gmpay-edge
→ 设置
→ 域和路由
→ 添加
→ 自定义域

填写:

1
gmpay.mcpq.cc

然后在 GMPay Edge 后台修改两项设置。

1. 应用地址

进入:

1
2
系统设置
→ 认证配置

填写:

1
https://gmpay.mcpq.cc

2. Allowed Hosts

进入:

1
2
系统设置
→ 访问控制

一行一个:

1
2
gmpay.mcpq.cc
gmpay-edge.963107397.workers.dev

保存后通过下面的地址进入后台:

1
https://gmpay.mcpq.cc/admin

保留原始 workers.dev 地址,方便自定义域名异常时进入后台排错。

八、项目当前内置的支付网络

当前版本默认内置:

1
2
3
4
5
6
7
8
TRON
Ethereum
Base
BNB Smart Chain
Polygon
TON
Aptos
Solana

还可以通过只读 API 检查 Binance、OKX 和 OKPay 的入账。

当前版本没有默认内置 Arbitrum,因此不能只在后台随便填写一个 Arbitrum RPC 就当成完整支持。需要修改网络目录、代币合约和相关配置后再测试。

九、配置 USDT TRC20 收款

进入:

1
2
3
支付运营
→ 收款方式
→ 新建

填写:

1
2
3
4
5
名称:USDT_trc20
类型:链上网络
网络:TRON
币种:USDT
收款地址:自己的 TRON 地址

最低和最高金额可以暂时留空。

创建完成后启用该收款方式。

TRON 地址通常以 T 开头。填写前一定要确认它确实支持 USDT TRC20,不要把其他网络的充值地址混进来。

十、配置 USDC Base 收款

再次新建收款方式:

1
2
3
4
5
名称:USDC base
类型:链上网络
网络:Base
币种:USDC
收款地址:自己的 Base 0x 地址

最低和最高金额同样可以留空。

创建后启用。

Base 使用 EVM 地址格式,地址通常以 0x 开头。但地址格式相同不代表网络相同,付款人必须选择:

1
USDC → Base

不能从 Arbitrum、Ethereum、Polygon 或其他网络直接转入。

十一、创建给商城使用的 API 凭证

进入 GMPay Edge:

1
2
3
开放集成
→ API 凭证
→ 新建

名称填写:

1
GMShop Edge

权限全部勾选:

1
2
3
4
orders:create
orders:read
orders:update
assets:read

创建完成后会显示:

1
2
PID
Secret

Secret 只显示一次,关闭窗口后不能再次查看,只能轮换生成新密钥。这里要立即保存到密码管理器中,不能提交到 GitHub,也不要放到公开文章截图里。

十二、在 GMShop Edge 中添加 GMPay 渠道

进入商城后台:

1
https://shop.mcpq.cc/admin

找到:

1
2
3
支付配置
→ 支付渠道
→ 新建

提供商选择:

1
GMpay

填写:

1
2
3
4
5
6
渠道名称:USDT / USDC 加密货币支付
基础地址:https://gmpay.mcpq.cc
PID:刚才生成的 PID
Secret:刚才生成的 Secret
百分比手续费:0
固定手续费:0

基础地址只填写域名,不要附加 /admin 或具体接口路径。

商城订单币种

这里填写的是商品标价币种,不是最后收到的币种。

商品以人民币标价时填写:

1
CNY

商品以美元标价时填写:

1
USD

GMPay Edge 会根据汇率计算需要支付多少 USDT 或 USDC。

默认 Token 和 Network

因为我同时启用了:

1
2
USDT · TRON
USDC · Base

所以这两项保持为空:

1
2
默认 Token:留空
默认 Network:留空

这样买家进入收银台后,可以自行选择两种收款方式。如果强制填写默认网络,收银台可能只直接进入指定币种和网络。

保存后点击渠道测试,确认状态显示健康,再启用支付渠道。

十三、Webhook 不需要手动填写

商城创建 GMPay 订单时,会自动把自己的 notify_url 提交给 GMPay Edge。

支付状态发生变化后,GMPay Edge 通过 Webhook Queue 异步回调 GMShop Edge。商城验证签名后更新订单状态,并继续执行自动交付。

因此正常对接时不需要在 GMPay Edge 中手动写商城回调地址,也不要把回调地址直接替换成 NapCat 或其他通知接口,否则商城可能无法收到支付结果。

需要额外做 QQ 群通知时,应使用独立的中转 Worker 或其他旁路通知方案,不要破坏商城原有回调链路。

十四、支付流程

1
2
3
4
5
6
7
8
9
10
1. 用户在 shop.mcpq.cc 创建订单
2. GMShop Edge 调用 GMPay API
3. GMPay Edge 创建支付订单
4. 用户打开收银台
5. 用户选择 USDT TRC20 或 USDC Base
6. GMPay Edge 扫描链上到账
7. Payment Queue 处理支付状态
8. Webhook Queue 回调商城
9. GMShop Edge 把订单改为已支付
10. 商城执行自动交付

十五、费用和免费额度

GMPay Edge 可以先在 Cloudflare 免费套餐中部署。个人使用、测试和低订单量阶段通常够用,但支付网关会每分钟执行 Cron,并通过 Queue 扫描订单,所以要比普通静态网站更关注资源用量。

重点观察:

  • Workers 请求和 CPU 时间
  • D1 读取与写入
  • Payment Queue 操作次数
  • Webhook Queue 操作次数
  • R2 存储和请求

R2 超出免费额度后可能产生账单。具体免费额度和价格会调整,应以 Cloudflare 官方最新价格页面为准。

十六、安全注意事项

  1. 只填写公开收款地址,不填写助记词和私钥。
  2. API Secret 只保存到安全位置,不放进文章和截图。
  3. Binance、OKX 等只读接入只授予查询所需权限,不要开放提币权限。
  4. 正式营业前分别测试一笔 USDT TRC20 和 USDC Base 小额订单。
  5. 确认付款网络和收款网络完全一致。
  6. 定期备份 D1、R2 和运行时配置。
  7. 留意 Webhook 失败记录和死信 Queue。
  8. 项目升级前先备份,并重新跑一笔真实支付测试。

十七、最终部署结果

1
2
3
4
5
6
7
8
支付网关:https://gmpay.mcpq.cc
Worker:gmpay-edge
D1:gmpay-edge
KV:gmpay-edge-cache
R2:gmpay-edge-files
Payment Queue:gmpay-edge-payments
Webhook Queue:gmpay-edge-webhooks
Cron:每分钟执行

当前启用的收款方式:

1
2
USDT · TRON / TRC20
USDC · Base

最终完成的对接结构:

1
2
3
4
5
GMShop Edge
↓ GMPay API
GMPay Edge
├─ USDT TRC20 收款地址
└─ USDC Base 收款地址

这样商城和支付网关都运行在 Cloudflare 上,不需要额外维护 VPS、Docker、反向代理和传统数据库。后续主要工作就是完善商品、邮件、备份、监控和真实订单测试。

评论
分享

评论