2026-08-14 · dev2 云机 · 供长官照做
操作步骤来自微信支付官方文档;落位路径来自本项目settlement/deploy真实配置,非通用建议。
已完成:JSAPI 支付权限 ✅ · 商户号与服务号 APPID 已关联 ✅(wx0bd8d0601bcc2d62)
路径:商户平台 → 产品中心 → 开发配置 → 支付授权目录 → 添加
填写规则(错一条就调不起支付)
- 必须 https:// 开头
- 域名必须已 ICP 备案
- 结尾必须有 /
- 大小写与实际页面完全一致
- 不支持 IP 形式
- 一个商户号最多 5 个
可以只配到域名(如 https://xxx.tongban.love/),不校验后面的多级目录 —— 所以不用等我们的页面做好。
建议测试域名和生产域名一次都加上,省得以后再跑一趟。
设置后约 5 分钟生效。
出处:配置JSAPI支付授权目录-4013287088
路径:账户中心 → 账户设置 → API安全 → APIv3密钥 → 设置
🔴 设完永远看不到,只能重设 —— 填之前必须先存好。
🔴 不设这个,微信根本不会给我们发支付回调(官方原文),等于收不到钱到账通知。
怎么生成(让运维在自己电脑上跑,别用有意义的词):
LC_ALL=C tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 32
🔴 本文初版给的是 openssl rand -base64 24 | tr -d '/+=' | cut -c1-32,是错的:
base64 里的 + / 被删掉后长度就不足 32 位了。本机真跑 200 次,131 次不足位(65%)。
(root 2026-08-14 抓出并给出上面的正确写法)
出处:配置APIv3密钥-4012072195
路径:同页 → 商户API证书 → 申请证书
🔴 私钥文件只能下载这一次,丢了只能重新申请。
顺带:同页把 微信支付公钥 也下了,记下 公钥 ID。
⚠️ 旁边可能有「平台证书」——别选它,那个 5 年要换一次,多一道运维负担。
出处:申请商户API证书-4012072428、开发必要参数说明-4013070756
| 类型 | 具体 | 形态 |
|---|---|---|
| 文本 | 商户号 mchid |
一串数字 |
| 文本 | appid(= wx0bd8d0601bcc2d62) |
已知 |
| 文本 | APIv3 密钥 | 32 位字符串 |
| 文本 | 商户 API 证书序列号 | 一串十六进制 |
| 文本 | 微信支付公钥 ID | 一串标识 |
| 文件 | 商户 API 证书私钥 apiclient_key.pem |
文件,🔴 只能下载一次 |
| 文件 | 微信支付公钥 pub_key.pem |
文件 |
~/reports/ 和 ~/reports/shared/ —— 这两个目录有对外的下载页,放进去等于公开发布我(AI)不需要看到任何密钥的值,只需要知道"变量名叫什么、配好了没有"。
由运维本人从下载证书的那台电脑,直接 scp / ssh 传到服务器。不经过任何第三方(不走微信传输、不走网盘、不走中转机)。
结算服务的配置机制(settlement/deploy/env.production.template 有完整说明):
配置文件是 /opt/tongban-settlement/deploy/.env.production,不入仓,权限 600,由 compose 的 env_file 注入容器。
文本类 → 写进 .env.production,建议变量名(批 B 会照这个实现,先定下来免得来回改):
WECHATPAY_MCHID=商户号
WECHATPAY_APPID=wx0bd8d0601bcc2d62
WECHATPAY_APIV3_KEY=那 32 位
WECHATPAY_CERT_SERIAL_NO=证书序列号
WECHATPAY_PUBLIC_KEY_ID=公钥ID
WECHATPAY_PRIVATE_KEY_PATH=/app/wxpay/apiclient_key.pem
WECHATPAY_PUBLIC_KEY_PATH=/app/wxpay/pub_key.pem
WECHATPAY_NOTIFY_URL=回调地址(批 B 定好路径后给)
文件类 → 放宿主机目录,只读挂进容器(PEM 是多行,不适合塞进环境变量):
mkdir -p /opt/tongban-settlement/deploy/wxpay
chmod 700 /opt/tongban-settlement/deploy/wxpay
# 放入 apiclient_key.pem 和 pub_key.pem 后:
chmod 600 /opt/tongban-settlement/deploy/wxpay/*.pem
compose 里给 settlement-api 加一条只读挂载(批 B 实施时我来加):
- ./wxpay:/app/wxpay:ro
⚠️ 现有 compose 已有 ../data:/app/data 挂载,别把密钥放进 data —— 那个目录装的是业务归档文件。
商户 API 证书私钥只能下载一次。 服务器上那份如果随机器一起没了,只能重新申请证书、序列号变了、系统配置全要改。
所以:运维必须离线再存一份(加密 U 盘或公司密码管理器),不要只存在服务器上,也不要存在个人网盘。
APIv3 密钥同理 —— 设完商户平台看不到了,只有你们自己存的那份。
微信支付没有沙箱(官方原文:APIv3 暂未提供独立的沙箱测试环境和测试参数;且"支付回调建议通过生产环境验证")。
这意味着:测试环境用的是同一套真实商户号和真实密钥,联调就是真扣钱。 所以
- 测试服务器上的 .env.production 同样要 600 权限,不能因为"是测试机"就松
- 联调金额用 0.01 元,测完走退款
- 授权目录里那条测试域名,上线稳定后建议删掉(最多 5 个,也避免测试域名长期可发起支付)
| 情况 | 处置 |
|---|---|
| 怀疑 APIv3 密钥泄露 | 商户平台重设。⚠️ 重设前先发系统维护公告、暂停相关业务,改完技术侧同步更新并验证 |
| 私钥文件泄露或丢失 | 商户平台重新申请证书;序列号会变,配置要同步改 |
跟我说一句「三件都办好了」即可,任何值都不要发给我。
下一步是公众平台侧的配置(网页授权域名 —— 拿用户 openid 要用),那部分不涉及密钥,我到时候再一步步讲。