主题
支付通道总览
加第一个通道之前,先绑手机验证器
不绑就加不了通道,这是故意的。往下看「为什么」。
它在哪
后台 → 站点管理 → 支付通道
先理解这几件事
一个通道 = 一个收款账号
同一家(比如 Stripe)可以建多个通道:一个沙箱测试用、一个正式收款用。 买家在结算页看到的是已启用的那些。
沙箱 / 正式
每个通道有一个「环境」开关:
| 环境 | 用什么密钥 | 会真的扣钱吗 |
|---|---|---|
| 沙箱 | pk_test_ / sk_test_ | 不会,用测试卡号 |
| 正式 | pk_live_ / sk_live_ | 会 |
沙箱订单照常计入报表
这是刻意的:上线前会清测试数据、停用沙箱通道, 在那之前把沙箱单藏起来只会让整个仪表盘一片 0,让人以为报表坏了。
上线前一定要:停用沙箱通道 + 清掉测试订单。
通道只能停用,不能删
为什么不给删
老订单里记着「这笔钱是从哪个通道收的」。删掉通道之后, 那些老订单就退不了款了 —— 系统不知道该用哪套密钥去调退款接口。
要换收款账号:新建一个通道,把旧的停用。旧订单仍然能正常退款。
第 1 步:绑定手机验证器(TOTP)
第一次进这个页面时,会要求你先绑定。
- 手机上装一个验证器 App:Google Authenticator、Microsoft Authenticator、 1Password、Authy 都行
- 后台会显示一个二维码,用 App 扫
- 把 App 上显示的 6 位数字填回后台,点确认
绑定之后不能改绑
后台没有改绑入口,这是刻意的 —— 能改绑就意味着攻击者也能改绑, 那这道锁等于没有。
所以扫码那一步一定要做对:
- 用一个你不会弄丢的手机
- 验证器 App 支持云备份的话(1Password / Authy),打开它
- 或者把二维码下面那串密钥文本抄下来,锁进密码管理器
手机丢了的话,只能让能 SSH 上服务器的人手工清掉数据库里的那条记录。
为什么支付通道要单独加一道锁
后台账号一旦被盗,攻击者最先做的就是把收款账号改成自己的 —— 而这件事在报表上几天都看不出来(订单照常、金额照常,只是钱进了别人口袋)。
系统在改支付通道时会发紧急推送告警,但通知是事后的, 挡不住"进后台先把通知关掉再改收款账号"。所以要在动作发生的那一刻验一次。
每次改支付通道都要输一次 6 位码
不只是第一次绑定。新增、修改、启用/停用通道都要。
验证码一码一用(用过的 90 秒内不能再用),防止被截获后重放。
第 2 步:新建通道
点对应支付方式的「新增」按钮,填的字段由那家决定:
通用字段:
| 字段 | 说明 |
|---|---|
| 环境 | 沙箱 / 正式 |
| 前台展示名 | 买家在结算页看到的名字,留空用默认 |
| 限定收货国家 | 留空 = 所有国家都能用这个通道。填了就只对这些国家显示 |
| 排序 | 结算页上的先后顺序,小的在前 |
| 启用 | 关掉的话买家看不到它 |
密钥保存后会变成圆点
那是掩码。改别的字段时不用重新填一遍密钥,系统认得出掩码。 要换密钥就直接贴新的进去。
第 3 步:配回调(webhook)
这一步不做的话,买家付了钱订单还是「待付款」
必须做。 详见 回调(webhook)是什么。
顺序很重要:先在后台把通道建出来并保存 → 在列表里点「复制」拿到回调地址 → 再去支付平台粘上。因为地址里带着通道 ID,而 ID 是保存之后才有的。
地址不用自己拼
通道列表里有一列**「回调地址(webhook)」,后面就是复制**按钮,点一下就好。 配置密钥的弹窗里也有同一个地址 —— 你正好要在那儿填 Webhook 密钥。
第 4 步:用沙箱走一遍完整流程
不要跳过这一步。要走完整条:
加购 → 结算 → 选这个支付方式 → 付款 → 跳回来 → 订单变成「已付款」→ 收到订单确认邮件任何一环卡住都在这一步解决,不要拿真实买家去试。
第 5 步:换正式密钥
沙箱和生产是同一条通道上的一个开关
不是两条通道。一个支付方式只能建一条(再建会报「已配置过 xxx」), 所以你切换「环境」时看到的密钥框内容是一样的 —— 这是正常的, 不是页面出错。
回调地址也从头到尾不变(地址里的数字是通道 ID)。
沙箱跑通之后:
- 去支付平台的正式环境建应用/拿 live 密钥
- 在正式环境里再配一次 webhook,地址填同一个(沙箱阶段用的那个)
- 回后台打开那条通道 → 环境切到「生产」 → 密钥框会自动清空并弹红色提示 → 填 live 的值 → 保存(要过 TOTP)
- 点「测试连接」,确认它回的是「(生产)」
- 清掉测试订单
最容易漏的:正式环境的 webhook 没配
沙箱配过了就以为完事了 —— 但沙箱和正式是两套独立的 webhook 配置, 地址虽然一样,签名密钥/Webhook ID 是各自生成的,必须各配一次。
漏了的话:上线后买家付了钱,订单全是「待付款」,半小时后被自动关单。
为什么切环境会把密钥清空
不清的话,框里显示的掩码 ••••••1234 看着是填好的, 而系统对密钥的规则是「空或掩码 = 不修改」—— 结果是通道标着生产、握着沙箱密钥,每一笔真实付款的回调都验签失败, 订单永远停在待付款,而后台一切正常。前后端都做了强制。
常见问题
结算页没有任何支付方式
- 通道启用了吗
- 「限定收货国家」是不是填了,而买家的国家不在里面
- 密钥填对了吗(沙箱环境填了 live 密钥这类)
买家付完钱跳回来显示「支付处理中」
这是正常的。 支付结果页会轮询几秒 —— 从 Stripe/PayPal 跳回来时,webhook 常常还没到。
如果一直转圈超过一分钟,那就是 webhook 没配好,去 webhook 那篇查。