支付通道对接
本文是从部署到第一笔支付第五、六步的展开,覆盖支付宝(直连)与微信支付(直连)两个主力通道从通道侧准备到密钥配置的完整细节,含沙箱与生产环境的差异说明。
其他通道(云闪付、抖音等)的对接流程同构:创建通道商户 → 在通道商户详情配置密钥 → 验证,具体参数见支付通道各篇。
通用链路
环境快照(重要)
通道商户创建时按支付产品当时的环境固化沙箱 / 生产快照,此后不随产品切换改变,环境不匹配的通道商户会被路由排除。先在「接入配置 → 支付产品配置」切好环境,再创建通道商户;沙箱与生产要各建一套通道商户。详见从部署到第一笔支付 - 第三步。
两个通道的创建入口与表单对比:
| 通道 | 创建表单字段 | 密钥配置位置 |
|---|---|---|
| 支付宝(直连) | 通道商户名称 + 支付宝商家用户 ID(2088 开头的 PID) | 通道商户详情 → 应用管理 → 应用卡片「管理」→ 密钥配置 |
| 微信支付(直连) | 通道商户名称 + 微信支付商户号(mchId) | 通道商户详情 → 基础管理 → 直连密钥配置 |
创建通道商户的入口都在商户工作台 → 通道商户 → 创建通道商户(两步向导:选产品 → 填通道信息)。
支付宝(直连)
通道侧准备
- 注册支付宝开放平台账号,创建网页/移动应用,获得应用 ID(AppId);
- 用支付宝官方密钥工具生成 RSA2 密钥对(公钥模式),应用公钥配置到开放平台,支付宝公钥从开放平台「开放平台密钥」页面获取;
- 沙箱联调使用开放平台「沙箱环境」页提供的沙箱应用与沙箱买家账号,无需企业认证。
应用管理与密钥配置
支付宝直连的密钥按「应用」维度组织:进入通道商户详情 → 应用管理分组 → 应用管理,先登记支付宝应用(应用名称、支付宝应用 ID、应用类型),再在应用卡片的「管理」→ 密钥配置页签中配置凭据:
基础配置(认证方式二选一):
| 认证方式 | 需配置的字段 | 说明 |
|---|---|---|
公钥(public_key) | 应用ID、支付宝公钥、应用私钥 | 配置最简单,联调首选 |
证书(cert) | 应用ID、应用公钥证书、支付宝公钥证书、支付宝根证书(三个 .crt 文件上传)、应用私钥 | 部分接口(如转账)要求证书模式 |
通信密钥(可选):AES 密钥,从开放平台控制台获取,仅部分接口报文加解密使用。
最常见的配错点
「支付宝公钥」填的是开放平台展示给你、用于验签支付宝报文的公钥,不是你自己生成的「应用公钥」。两者填反是联调失败的最常见原因。证书模式则需与开放平台侧「接口加签方式」的设置保持一致。
网关地址无需配置:系统按通道商户的环境自动选择支付宝网关(沙箱 / 生产),界面无网关字段。密钥是否正确在支付调试发起交易时验证(本通道暂无「连接测试」按钮)。
支持的支付方式
alipay_qr 扫码、alipay_jsapi(含小程序)、alipay_pc、alipay_h5、alipay_app、alipay_barcode 付款码,共 6 种。
微信支付(直连)
微信没有沙箱环境
微信官方不提供沙箱联调环境(支付宝才有)。上线主线的沙箱流程只适用于支付宝(直连);微信通道商户只能以生产环境创建,联调时用小额真实支付验证,验证通过后可直接投入使用。
通道侧准备
从微信商户平台获取以下凭据(位置:账户中心 → API 安全):
| 凭据 | 获取位置 | 对应字段 |
|---|---|---|
微信支付商户号 mchId | 商户平台首页 | 创建通道商户时填写 |
| API V3 密钥 | API 安全 → 设置 APIv3 密钥 | API V3 密钥 |
API 证书 apiclient_cert.pem + 私钥 apiclient_key.pem | API 安全 → 申请 API 证书 | API 证书 / API 证书私钥 |
| 证书序列号 | 证书对应序列号 | 证书序列号 |
支付公钥 pub_key.pem + 公钥 ID | 商户平台「支付公钥」(新商户) | 支付公钥 / 支付公钥 ID |
直连密钥配置
进入通道商户详情 → 基础管理 → 直连密钥配置抽屉,字段分「接口密钥」与「支付证书 / 支付公钥」两组:
| 分组 | 字段 | 必填 |
|---|---|---|
| 接口密钥 | API V3 密钥 | 是 |
| 支付证书 | API 证书(apiclient_cert.pem)、证书序列号 | 是 |
API 证书私钥(apiclient_key.pem) | 否(留空表示保留原值) | |
| 支付公钥 | 支付公钥(pub_key.pem)、支付公钥 ID | 是 |
两套凭据的背景
微信 2024 年后新发放的商户使用「支付公钥」替代「平台证书」,老商户仍可用证书体系。本系统按「商户证书 + 序列号 + 支付公钥」组合装配 SDK 凭据:证书用于商户侧签名,支付公钥用于验签微信侧报文。按商户平台实际提供的材料如实填写即可,编辑时留空的密文表示保留原值。
支付应用(微信)
微信的 wxAppId 不在密钥里,而在应用维度单独登记:商户工作台 → 支付配置 → 支付应用(微信)(或支付管理 → 支付应用)。每条记录登记应用名称、应用类型、微信 AppId 与 AppSecret。
应用类型与支付方式的强绑定关系:
| 支付方式 | 要求的应用类型 |
|---|---|
wechat_jsapi / 统一收银台(微信内打开) | 公众号(场景强绑 openId,需网页授权) |
wechat_mini 小程序支付 | 小程序 |
wechat_app APP 支付 | 移动应用 |
wechat_qr / wechat_h5 / wechat_barcode | 兼容以上类型 |
因此做微信 JSAPI 或小程序收款前,必须先在「支付应用(微信)」登记对应类型的应用,否则路由无法解析。
转账场景补配(仅微信转账需要)
微信商家转账要求报文携带转账场景。配置位置:通道商户详情 → 交易配置 → 转账场景:
- 转账场景 ID:在微信商户平台「商家转账」产品中报备的场景(如
1000-xxx); - 转账发起应用:发起转账时报文中携带的 appId 对应的支付应用。
只做收款不使用转账时无需配置。
域名校验文件
微信/支付宝在配置域名归属与二维码规则时,会抓取支付网关域名下的校验文件核对归属。文件内容上传到系统即可,支付网关 Nginx 已内置反代(文件存库由后端动态返回,无需手工往服务器放文件):
场景一(商户级):商户自己公众号/小程序的域名验证(微信授权回调)
- 微信公众平台按提示下载校验文件(形如
MP_verify_PjhdRxpB8FhG06Fr.txt); - 上传到系统:商户端 → 业务配置 → 域名校验文件(运营也可在商户工作台「域名校验文件」页代为上传);
- 适用公众号「网页授权域名 / JS 接口安全域名」与小程序「业务域名」验证;仅接受
MP_verify_*.txt。
场景二(平台级):收银台/聚合小程序「扫普通链接二维码」规则校验文件
- 在微信小程序后台配置普通链接二维码规则(本系统三类码前缀:
/m/*码牌、/cm/*统一收银台、/am/*聚合支付),或在支付宝开放平台配置「关联普通二维码」; - 平台下载的校验文件(微信为随机名 .txt,支付宝为 .html)由运营在 支付管理 → 接入配置 → 域名校验文件 上传;
- 校验文件会对域名根路径与
/m/、/cm/、/am/目录下的同名请求原样应答(平台抓取不重定向)。
上传后在对应平台完成域名/规则配置即可生效。
支持的支付方式
wechat_qr 扫码、wechat_jsapi、wechat_h5、wechat_app、wechat_mini 小程序、wechat_barcode 付款码,共 6 种。
通道商户详情分组总览
创建通道商户后,从列表「管理」进入详情,分组结构:
| 分组 | 支付宝(直连) | 微信(直连) |
|---|---|---|
| 基础管理 | 基础信息 | 基础信息、直连密钥配置 |
| 交易配置 | 转账场景、转账发起应用 | 转账场景、转账发起应用 |
| 应用管理 | 商户应用(应用 ID + 密钥配置)、能力绑定 | 应用绑定、能力绑定 |
常见问题
| 现象 | 原因与处理 |
|---|---|
| 支付宝报「密钥错误 / 验签失败」 | 支付宝公钥与应用公钥填反;或认证方式与开放平台「接口加签方式」不一致 |
| 支付宝转账报权限不足 | 转账类接口需证书模式,公钥模式无法调用;同时检查产品权限 |
| 微信报「证书序列号不匹配」 | 序列号与上传的 apiclient_cert.pem 不是同一份,重新从商户平台下载 |
| 微信 JSAPI 报「缺少 appid / openid」 | 未在「支付应用(微信)」登记公众号类型应用,或未获取用户 openId |
| 微信内打开支付页白屏 / 提示域名未验证 | 域名验证文件未上传或 Nginx 未反代 /MP_verify_*.txt |
| 发起支付报「通道商户环境不匹配」 | 通道商户环境快照与产品当前环境不一致,按正确顺序重建通道商户 |
相关链接
- 从部署到第一笔支付:上线主线(含沙箱验证全流程)
- 业务系统对接:密钥验证之后的系统接入
- 完整上线指南 - 支付能力开通:生产环境开通主线与路由/支付应用/风控的生产要点
- 支付通道:全部通道的参数索引