六、本地支付联调前配置

第 5 章已经确认 web-pay 能在本地启动并登录运营平台。本章先在运营平台里创建商户和应用,把 saas-starter 后面调用 web-pay 所需的支付身份准备好;第 7 章再把这些值写入 SaaS 配置并启动 saas-starter

重要

🎯 本章目标: 在 web-pay 运营平台中创建商户和应用,记录 mchNoappIdAppSecret,并在资料齐全时配置支付宝 / 微信参数和支付通道。身份信息必须完成,支付通道可以等官方资料齐全后再补。

6.1 配置关系

本地联调时的关系是:

saas-starter 业务订单
        │
        ▼
saas-starter 使用 mchNo + appId + AppSecret 调用 web-pay
        │
        ▼
web-pay 根据应用和支付通道参数请求微信 / 支付宝
        │
        ▼
支付平台回调 web-pay,web-pay 再通知 saas-starter

所以本章不是再启动服务,而是在运营平台里确认“哪个 SaaS 应用有权用哪个商户身份收款”。

备注

📌 如果第 5 章已经创建过商户、应用、支付参数和支付通道,本章可以当作复核清单来过一遍。重点确认记录值准确,而不是重复创建一套新商户或新应用。

需要先分清 3 类身份:

身份 从哪里来 用在哪里
web-pay 商户号 mchNo web-pay 运营平台商户列表 saas-starter 调用 web-pay 时标识收款商户
web-pay 应用 appId / AppSecret web-pay 运营平台应用列表 saas-starter 调用 web-pay 时签名和鉴权
微信 / 支付宝商户资料 微信支付商户平台、支付宝开放平台 web-pay 代表真实商户请求支付平台

重要

🎯 先把三类身份拆开记录。 mchNoappIdAppSecret 是 SaaS 调用 web-pay 的身份;微信 / 支付宝资料是 web-pay 调支付平台的身份。它们会在同一条支付链路里同时出现,但来源和用途不同。

web-pay 支付参数和支付通道两层关系

6.2 创建商户

浏览器打开运营平台:

http://localhost:8002

使用第 5 章的初始化账号登录后进入:

商户管理 -> 商户列表 -> 新建

小技巧

🎯 先创建商户,再创建应用。 商户代表“谁在收款”,应用代表“哪个业务系统要调用 web-pay”。

新增商户时重点填写这些字段:

字段 建议填写
商户名称 你的公司
登录名 6-18 位,字母开头,例如 demo001
商户简称 收银台和订单里更短的展示名
联系人姓名 负责人姓名
联系人手机号 真实可用手机号,格式为 11 位
商户类型 普通商户
状态 启用

web-pay 商户号和微信商户号不要混用

ZHCPAY

保存成功后,回到商户列表记录商户号:

要记录 在哪里看 后面用途
商户号 mchNo 商户列表的「商户号」列 创建应用时要带上它;后面 saas-starter 调用 web-pay 时也要填它

这个商户号是 web-pay 自己生成的商户身份,可以理解成 web-pay 内部识别“哪个商户在收款”的编号。后面 saas-starter 发起支付时会把 mchNo 传给 web-pay,web-pay 再根据这个商户号找到对应的应用、支付参数和支付通道。

警告

⚠️ 两个“商户号”不是同一个东西。 mchNo 是 web-pay 运营平台里的商户号;微信支付商户号来自微信支付商户平台。两者填错会让后面排查很痛苦。

6.3 创建应用

商户创建完成后,继续给商户创建应用。可以从两个入口进入:

商户管理 -> 商户列表 -> 应用配置

也可以直接进入:

商户管理 -> 应用列表

重要

🎯 应用是 SaaS 调用 web-pay 的身份。 后面 saas-starter 发起支付时,会带着这里的应用 AppId 和 AppSecret 请求 web-pay。

点击「新建」后重点填写:

字段 建议填写
商户号 从商户列表带入;如果是直接进入应用列表,就填写刚才创建的商户号
应用名称 当前 SaaS 或业务系统名称,例如 SaaS Starter
状态 启用
私钥 AppSecret 点击「随机生成私钥」生成
备注 可写这个应用对应哪个业务项目

「私钥 AppSecret」非常重要。它不是支付宝或微信的密钥,而是 web-pay 给这个业务应用使用的签名密钥。后面 saas-starter 请求 web-pay 创建订单、查询订单、接收回调结果时,会用它来签名或校验签名。

危险

🔐 AppSecret 只给后端使用。 它不能写进前端 .env,也不要出现在公开截图、公开文档或聊天记录里。

点击「随机生成私钥」后,保存前先把 AppSecret 记录到你自己的本地私密记录里。不要放到前端 .env、公开文档、截图或聊天群里。

web-pay 应用身份和 AppSecret 使用关系

ZHCPAY

保存后,回到应用列表记录这些值:

要记录 在哪里看 后面用途
商户号 mchNo 应用列表的「商户号」列,应与 6.2 记录的一致 saas-starter 调用 web-pay 时标识商户
应用 AppId appId 应用列表的「应用AppId」列 saas-starter 调用 web-pay 时标识具体业务应用
应用私钥 AppSecret 新建应用时点击「随机生成私钥」得到 saas-starter 请求签名和验签

警告

⚠️ 这 3 个值要对应同一个应用,不要把 A 商户的 mchNo 和 B 应用的 appId 混在一起。

6.4 记录 SaaS 支付身份

把 6.2 和 6.3 记录的值先写到第 3 章准备的 saas-starter-deploy-info.md 里。第 7 章执行 saas-starter/env-scripts/rename-saas-service.sh 时,脚本会询问这 3 项并直接写入 saas-starter 的后端配置:

要记录 第 7 章脚本提示项
商户号 mchNo Zhcpay 商户号
应用 AppId appId Zhcpay AppID
应用私钥 AppSecret Zhcpay AppSecret

重要

📌 这里记录的是给 SaaS 后端用的调用身份。 第 7 章脚本会把它们写入 saas-starter 后端配置,让 SaaS 能创建 web-pay 支付订单并校验 web-pay 通知。

警告

⚠️ 特别注意这 2 个值必须来自同一个应用:

ZHCPAY_APP_ID=刚才记录的应用AppId
ZHCPAY_APP_SECRET=刚才记录的应用AppSecret

警告

⚠️ 不要把 B 应用的 appId、C 应用的 AppSecret 混在一起。混用后最常见的结果是:创建支付订单失败、验签失败、收银台没有可用通道,或者回调能进 web-pay 但通知不到业务系统。

如果后面已经启动过 SaaS 后端,重新运行第 7 章的配置脚本后,还需要停止并重新启动 SaaS 后端,让新的配置生效。

6.5 可选配置支付宝参数

如果你已经有支付宝开放平台资料,进入应用的支付配置后,在「支付宝官方」卡片点击「填写参数」。

备注

📌 支付宝参数是支付联调准备项,不是进入第 7 章的硬门槛。如果暂时没有真实应用资料,先保证 6.2 到 6.4 的 web-pay 商户和应用身份已经记录完整。

备注

📌 这里填写的是支付宝开放平台应用资料。 本教程主流程演示网站应用收款,所以优先填网站应用对应的 AppID、应用私钥和支付宝公钥。

这一步的目的:把支付宝开放平台中的应用身份和签名信息保存到 web-pay。保存后,web-pay 才知道调用支付宝接口时该用哪个 AppID、哪个私钥签名,以及该用哪个支付宝公钥校验返回结果。

重点字段按下面理解:

字段 填写什么 目的
状态 选择 启用 告诉 web-pay 这个支付宝配置可以被使用
环境配置 本地真实付款测试选 生产环境;只连支付宝沙箱时选 沙箱环境 决定 web-pay 请求支付宝正式接口还是沙箱接口
应用 AppID 支付宝开放平台应用的 AppID 标识当前支付宝应用
应用私钥 你自己生成的应用私钥 web-pay 用它给支付请求签名
支付宝公钥 支付宝开放平台提供的支付宝公钥 web-pay 用它校验支付宝通知和接口响应
接口签名方式 推荐选 RSA2 使用支付宝当前推荐的签名算法
公钥证书 如果你使用证书模式就上传证书;普通公钥模式选择不使用证书 决定验签时使用证书还是普通公钥
是否开启加密 按支付宝应用配置保持一致 如果支付宝侧开启接口内容加密,这里也要开启并填写密钥

保存后先不要急着付款测试,还需要继续到「支付通道配置」里启用具体的支付宝付款方式。

ZHCPAY

6.6 可选配置微信参数

如果你已经有微信支付商户平台资料,回到支付参数配置页,在「微信支付官方」卡片点击「填写参数」。

备注

📌 微信参数也可以后补。没有商户号、APPID、API 密钥或证书文件时,不要先随便填占位值;占位值会让后面排查变得更像“配置成功但支付失败”。

备注

📌 这里填写的是微信支付商户平台和微信应用资料。 微信多种支付方式共用一套商户密钥和证书,但每种支付产品仍要在官方平台单独开通。

这一步的目的:把微信支付商户平台和微信应用里的信息保存到 web-pay。保存后,web-pay 才能向微信支付创建订单、查询订单,并在支付成功回调时完成验签。

重点字段按下面理解:

字段 填写什么 目的
状态 选择 启用 告诉 web-pay 这个微信支付配置可以被使用
微信支付商户号 微信支付商户平台的商户号 标识收款商户
微信应用 APPID 公众号、小程序或开放平台应用的 APPID 标识发起支付的微信应用
应用 AppSecret 微信应用后台的 AppSecret 某些微信支付场景需要配合 APPID 使用
微信支付 API 版本 按你的商户配置选择 V2V3 决定 web-pay 使用哪套微信支付签名和证书规则
APIv2 密钥 微信支付商户平台配置的 APIv2 Key V2 接口签名和部分兼容场景会用到
APIv3 秘钥 微信支付商户平台配置的 APIv3 Key V3 接口解密回调和敏感数据时会用到
序列号 商户 API 证书序列号 微信支付用它识别你当前使用哪张商户证书
API 证书 / 证书文件 / 私钥文件 从微信支付商户平台下载的商户证书文件 web-pay 用它们完成请求签名
微信侧公钥 ID / 微信侧公钥证书 微信支付平台证书或公钥配置 web-pay 用它校验微信支付返回的数据
微信转账版本 保持和微信支付平台要求一致,截图中选择 新版202501 只影响微信转账相关能力,普通收款场景先按当前配置保存

新手可以先记住一个判断方法:

  • 商户号、APPID、AppSecret 用来说明“我是谁”。

  • API 密钥、证书、序列号用来证明“请求确实是我发的”。

  • 微信侧公钥或平台证书用来确认“返回结果确实是微信发的”。

如果只是先跑通收款,优先保证商户号、APPID、APIv3 密钥、商户证书、商户私钥、平台公钥 / 证书这些核心信息正确。保存成功后,再去启用具体的微信支付通道。

微信证书文件要特别保管。运营平台这里要上传的 4 个文件分别是:

危险

🔐 这 4 个文件非常重要。 它们不是普通附件,而是后端请求微信支付、校验回调和完成安全接口调用时要读取的证书 / 私钥文件。

文件 上传到哪个字段 作用
apiclient_cert.p12 API证书(apiclient_cert.p12) V2 退款等安全接口可能会用到
apiclient_cert.pem 证书文件(apiclient_cert.pem) 商户证书身份校验
apiclient_key.pem 私钥文件(apiclient_key.pem) 后端发起 V3 请求签名
pub_key.pem 微信侧公钥证书(pub_key.pem) 后端校验微信支付回调签名

本地测试时,这些文件通过运营平台上传后会保存到:

tmp/local-test/upload/private/cert

正式上线后,也要把这 4 个文件上传到云服务器的私有证书目录。当前生产配置默认使用:

/www/wwwroot/zhcpay/uploads/private/cert

如果你后面改过 isys.oss.file-private-path,就以线上实际配置的私有目录为准。无论本地还是线上,微信 API 密钥、证书序列号、证书文件和私钥文件都不能暴露或公开,不要提交到公开仓库,不要放进前端目录,也不要出现在公开截图里。

ZHCPAY ZHCPAY

6.7 可选启用支付通道

支付参数保存后,点击页面顶部的「下一步」进入「支付通道配置」。

重要

🎯 支付窗口决定用户能看到什么付款方式。 支付参数配置正确只是“后端具备能力”,通道开启后收银台才会展示对应入口。

列表里的每一行都是一种支付方式:

支付方式代码 支付方式名称 适合场景
ALI_QR 支付宝二维码 用户用支付宝扫码付款,适合本地联调和电脑网页收款
ALI_PC 支付宝 PC 网站 用户在电脑浏览器跳转到支付宝付款
ALI_WAP 支付宝 WAP 用户在手机浏览器里打开付款
ALI_APP 支付宝 APP 手机 App 内调起支付宝付款
WX_NATIVE 微信扫码 用户用微信扫码付款,适合本地联调和电脑网页收款
WX_JSAPI 微信公众号 用户在微信内网页付款
WX_APP 微信 APP 手机 App 内调起微信付款
WX_H5 微信 H5 手机浏览器内调起微信支付

警告

⚠️ 官方未开通,这里开启也不会生效。 这里的「启用」只是 web-pay 内部开关,真正能不能收款还要看微信 / 支付宝官方产品权限。

本地从零开始测试时,建议先只启用最容易验证的通道:

  • 测支付宝扫码:配置并启用 ALI_QR

  • 测微信扫码:配置并启用 WX_NATIVE

点击某一行右侧的「配置」后,在弹出的通道卡片里确认:

字段 建议 目的
状态 确认为 已启用 表示这个通道已经可以被 web-pay 使用
费率 按实际费率填写,例如 0.6 代表 0.6% 用于系统展示或内部记录通道成本
启用开关 打开 让收银台真正展示这个付款方式

小技巧

💡 不要一次性把所有通道都打开。每个通道对应的支付宝 / 微信产品权限、APPID 类型、域名要求都可能不同。先用二维码通道跑通一条完整支付链路,确认能下单、付款、回调、改订单状态后,再逐个打开其他通道,排查会简单很多。

ZHCPAY ZHCPAY ZHCPAY

6.8 配置完成后检查

离开运营平台前,先把下面这些信息整理到自己的本地私密记录里。后面第 9 章会反复用到。

要确认 应该是什么状态 是否必达
商户号 mchNo 已从商户列表记录 必达
应用 AppId appId 已从应用列表记录 必达
应用私钥 AppSecret 已在新建应用时记录 必达
saas-starter-deploy-info.md 已记录同一组 mchNoappIdAppSecret,供第 7 章配置脚本填写 必达
支付参数 支付宝或微信资料齐全时保存并启用 可后补
支付通道 至少启用 ALI_QRWX_NATIVE 可后补

web-pay 配置完成后的本地记录检查

备注

📌 如果你现在还没有微信或支付宝真实资料,也可以先继续整理第 8 章的 web-pay 线上部署。等官方资料齐全后,再回到本章补支付参数和支付通道,然后进入第 9 章做真实支付闭环。

重要

本章完成标准: 至少要完成商户、应用、mchNoappIdAppSecret 的记录。支付宝 / 微信参数与通道属于支付联调前置项,资料齐全时再配置即可。

参见

➡️ 下一步进入第 7 章,把这里记录的 mchNoappIdAppSecret 写入 saas-starter,先验证 SaaS 自己能本地启动、连接业务库并创建匿名会话。