Appearance
支付接入方案
一期推荐路线
11API 一期建议采用:
- 支付页独立
- 支付成功生成兑换码
- 用户回到主站控制台兑换
New API继续负责额度与令牌
不要一开始就把支付和 New API 强耦合在一起。
推荐链路
text
pay.11api.top 下单
-> 支付完成
-> 生成兑换码
-> 用户在 11api.top/console/redemption 兑换
-> 用户在 11api.top/console/token 创建 key为什么推荐兑换码
- 支付系统故障不会影响 API 服务
- 对账更简单
- 退款更容易处理
- 活动码、渠道码、赠送码都能统一管理
数据模型建议
至少要有这些业务表:
orderspayment_webhooksredeem_batchesredeem_codeswallet_ledgerrefund_requests
一期状态设计
订单状态
pendingpaidfulfilledrefundedclosed
这里的 paid 表示已经确认收款但还没有完成履约。授权额度订单只有在 New API 原生兑换码同步成功后才进入 fulfilled;同步失败保留 paid + fulfillment_status=sync_failed,后台重试,不发本地假码。
兑换码状态
unusedusedfrozenexpired
接入方式建议
方案 A:独立支付页 + webhook
推荐指数最高。
支付服务负责:
- 创建订单
- 接收回调
- 发放兑换码
- 发邮件
主站负责:
- 展示兑换入口
- 兑换额度
- 创建 token
方案 B:卡密系统
更快上线,适合先小规模卖。
方案 C:自动充值到账
适合二期再做,复杂度高于兑换码模式。
上线顺序
- 先让
pay.11api.top能出订单 - 再让后台能生成兑换码
- 最后再做自动邮件和发票流程
当前项目已经落地的骨架
仓库内置了 pay-service,已经接入 docker-compose 与 pay.11api.top。
当前可直接使用:
- 套餐展示页
- 创建订单接口
- 订单状态查询
epay收银台跳转epay异步回调验签- mock 支付成功回调
- 自动调用 New API 原生兑换码接口发码
- 后台人工标记到账
已有接口
1. 健康检查
bash
curl https://pay.11api.top/api/health2. 创建订单
bash
curl --request POST \
--url https://pay.11api.top/api/orders \
--header 'Content-Type: application/json' \
--data '{
"planId": "growth",
"email": "user@example.com",
"contact": "telegram:@demo"
}'3. 模拟支付成功
在服务器执行:
bash
cd /opt/11api/deploy
./scripts/mock-pay-order.sh <order_no>4. 查询订单和兑换码
bash
curl "https://pay.11api.top/api/orders/<order_no>?lookupToken=<lookup_token>"lookupToken 会在创建订单成功时返回一次,后端只保存哈希。不要只靠订单号公开查询订单;订单详情可能包含邮箱、付款状态、人工收款指引和兑换码同步状态。
真实支付模式
试营业早期如果使用 manual,支付页会在创建订单后展示一份可复制付款信息:金额、订单号、转账备注、联系方式、处理步骤和可选二维码。上线前用下面命令验证:
bash
cd /opt/11api/deploy
./scripts/smoke-manual-checkout.sh如果要直接商用,建议把 .env 设置为:
bash
PAY_PROVIDER=epay
PAY_DEFAULT_METHOD=alipay
EPAY_GATEWAY_URL=https://你的易支付网关
EPAY_PID=你的商户号
EPAY_KEY=你的商户密钥
EPAY_SITENAME=11API支付完成后,epay 会回调:
text
https://pay.11api.top/api/webhooks/epay/notify支付返回页会落到:
text
https://pay.11api.top/return正式接支付时怎么替换
后面只需要把正式支付平台的回调,替换到当前 mock webhook 的同类处理逻辑:
- 验签
- 幂等处理
- 标记订单已支付
- 发放兑换码
- 通知用户回主站兑换
也就是说,一期现在已经把“订单 -> 回调 -> 兑换码”这条主链搭起来了,后续只是替换支付渠道,不需要重做整套业务结构。