微信支付服务商模式:报「sub_mch_id 与 sub_appid 不匹配」,八成是绑定关系配错了
给一个客户做完直连商户支付,改成服务商(ISV)模式,配置改完、密钥换成服务商的、代码里补上 sub_mchid,结果一下单就报错。
这类报错里签名算法出问题的比例不高,多数是「商户号 — APPID 绑定关系」没配到正确的位置,或者配在了错的后台。下面按报错逐条对,前半段先分清 sp_* 和 sub_*。
适用范围
- 服务商(ISV/合作伙伴)给多个子商户(特约商户)做小程序 / 公众号 / Native 支付。
- 接口以微信支付 v3 为主,含合单支付场景。
- 不适用:直连商户模式;「红色连线」的二清模式(政策上不允许采用,有需求的第三方走银行渠道商模式接入)。
- 服务商分普通服务商和银行服务商,除资金清算能力不同外,账号模型与使用方式没有区别。
先分清 sp_* 与 sub_*
| 字段 | 含义 | 绑定要求 |
|---|---|---|
sp_mchid | 服务商在微信支付侧的唯一标识,所有接口调用都要带,用于确认服务商身份 | — |
sp_appid | 服务商在开放平台(移动应用)或公众平台(公众号/小程序)申请的标识 | 必须与服务商商户号 sp_mchid 绑定,否则支付会校验失败 |
sub_mchid | 子商户(特约商户)在服务商下的唯一标识 | 子商户进件两种方式:服务商平台进件、接口进件 |
sub_appid | 子商户在开放平台/公众平台申请的标识 | 必须与子商户号 sub_mchid 绑定 |
社区里的一句话总结:凡是 sub_xxx,都是商家的——商家的小程序、商家的商户号、商家的 openid;服务商平台自己的都是 sp_xxxx。
错配基本都发生在把 sp_* 和 sub_* 混用,或者绑定关系配在了子商户后台而不是服务商后台。
报错逐条对照
除特别标注社区经验外,以下归因以官方文档口径为主。
1)appid和mch_id不匹配,请检查后再试
归因:下单传的 sp_appid 未与服务商商户号绑定。
修:绑定服务商商户号与 AppID 账号。
2)sub_mch_id与sub_appid不匹配 / sub_appid与sub_mch_id不匹配
归因:服务商没给该子商户号绑定对应的 sub_appid。
修:在【服务商后台】配置——服务商为子商户配置 AppID(sub_appid)。
注意:特约商户(子商户)后台里配的绑定关系对服务商模式无效,要去服务商后台配。
3)服务商模式下 Native 下单返回「受理关系不可用」
归因:服务商与子商户之间没有授权「服务商 Native 支付」权限,授权完成后才能为该子商户下单。
4)商户号该产品权限未开通,请前往商户平台>产品中心检查后重试(合单场景)
归因:子单里所有子商户号都需开通并授权服务商相应场景的单笔支付产品权限。
5)合单下单 appid和mch_id不匹配,请检查后再试
归因:服务商商户号需绑定 combine_appid。
6)小程序合单下单 appid与openid不匹配
归因:下单传的 openid 必须从 combine_appid 下获取,不能用其他 appid 下取的 openid。
7)小程序合单下单 sub_appid与sub_openid不匹配
归因:sub_openid 必须从 sub_appid 下获取。
社区口径补充:openid 与 appid 配对、sub_openid 与 sub_appid 配对,二选一传,别错位。
8)小程序合单调起支付「下单账号与支付账号不一致,请核实后再支付」
归因:下单传的 openid/sub_openid 所属用户,必须和实际调起支付的用户一致。
9)合单 重复下单且结算信息不一致
归因:同一合单订单号重复下单,且子单的结算信息 settle_info 不一致。
10)查询合单订单报「订单不存在」
排查方向:
- 合单订单号是否属于当前调用接口的商户号,跨商户号不能查;
- 是否调错接口——合单要用查询合单订单接口,不能用普通查单接口。
11)签名类报错 SIGNERROR / 签名失败
归因:通用签名问题,见站内 #7188《接口签名校验失败:多数问题不在算法,而在签名原串》。
绑定关系去哪儿查
以下为官方口径的后台路径。
sp_appid:服务商平台【产品中心 -> APPID账号管理 -> 我关联的APPID账号】。
sub_mchid:服务商平台【合作伙伴功能 -> 商户基础服务 -> 开发参数配置】;或调查询申请单状态接口从 sub_mchid 拿。
sub_appid:
- 服务商平台【合作伙伴功能 -> 开发参数配置 -> 对应子商户号点「开发配置」 -> 特约商户APPID配置】;
- 子商户登录商户平台【产品中心 -> APPID账号配置 -> 服务商为我关联的APPID账号】。
容易被忽略的坑
- 提交绑定了
sub_appid,支付接口就一定要传sub_appid;不传反而不匹配。 - 银行/从业机构服务商的「绑定 APPID 配置」API 只支持新增、不支持修改:要改必须先登录服务商后台手工删除后重新配置,再重新新增。且可绑定的公众号/小程序/开放平台应用需与特约商户或渠道公司名字相同。
- 小程序若触发了发货信息管理(订单发货管理),会出现支付不了的情况;把订单信息录入那边完善后即恢复。(社区帖经验,未逐项复现。)
- 第三方开发小程序用微信支付共有 3×3=9 种组合;其中「红色连线」为二清模式,政策上不允许采用,有需求的第三方要走银行渠道商模式接入。
- 银行服务商错误码表几个补充项:
INVALID_REQUEST:校验公众号和服务商关系 → appid 与 mchid 无绑定关系;校验服务商和子商户关系 → 子商户号信息有误;SIGNERROR→ 签名校验失败;- 「录入权限 → 暂无权限」;
- 「需要证书 → 获取客户端证书序列号失败/证书校验失败」。
官方文档
- 开发必要参数说明:https://pay.weixin.qq.com/doc/v3/partner/4013080340
- Native 支付常见问题:https://pay.weixin.qq.com/doc/v3/partner/4013352076
- 小程序合单支付常见问题:https://pay.weixin.qq.com/doc/v3/partner/4013462619
- 绑定 APPID 配置(V2,银行/从业机构):https://pay.weixin.qq.com/doc/v2/institution/4011985217
注:本文参数与报错归因以官方文档口径为主,未在真实生产环境逐条实测;不同产品(JSAPI/Native/小程序/合单)与商户类型(普通服务商/银行服务商/渠道商)的报错文案可能略有差异,以自己后台提示为准。