WeChat Service-Provider Payment Fails with "受理机构必须传入sub_mch_id"
Symptom
In service-provider mode, initiating a payment fails with the WeChat error "受理机构必须传入sub_mch_id", even though the request body clearly carries a sub_mchid value.
Cause
The wording is misleading — it actually means WeChat rejected the "service provider ↔ sub-merchant" binding check, not that a field is missing.
The most common trigger is a configuration mistake: the provider's own merchant number was filled into the sub-merchant field, so sp_mchid and sub_mchid carry the same number — WeChat does not allow a provider to sub-contract itself.
How to confirm
Check the request body in the channel sub-app logs: sp_mchid == sub_mchid (and sp_appid == sub_appid) confirms a configuration problem rather than a code bug.
You can also check the merchant's qualification first: only merchants with a "Service Provider Platform" entry in the WeChat Pay merchant portal are service providers; without that entry it is an ordinary merchant.
Fix
Two cases, depending on the merchant's actual qualification:
- Ordinary merchant: it should not use the WeChat service-provider product — switch to WeChat direct mode
- Service provider: the sub-merchant field must carry the actual secondary merchant number bound during onboarding, never the provider's own number
See WeChat Pay for channel configuration.