微信銀行服務(wù)商對(duì)接避坑指南
Hello ,大家好,我是樓下小黑哥~
這篇文章主要梳理一下微信銀行服務(wù)商下幾個(gè)主要參數(shù)的概念、作用??偨Y(jié)一下對(duì)接過(guò)程中碰到相關(guān)設(shè)置的問(wèn)題。
那這些參數(shù),看起來(lái)挺簡(jiǎn)單的,但是有些場(chǎng)景下,需要在后臺(tái)增加相關(guān)配置。如果不配置的話,就會(huì)報(bào)各種錯(cuò)誤,無(wú)法喚起支付。
但是配置的話,對(duì)于第一次接觸的小伙伴,極度不友好。這些配置有些是可以在微信支付官網(wǎng)找到的,但是這個(gè)查找過(guò)程挺費(fèi)勁的。
所以這里總結(jié)一下,希望幫助到后續(xù)對(duì)接微信銀行服務(wù)商的小伙伴們。
ps:這篇文章主要是以銀聯(lián)微信的文檔為主,原則上網(wǎng)聯(lián)微信應(yīng)該是差不多的。
微信支付參數(shù)解釋
微信支付的交易請(qǐng)求將會(huì)涉及一些微信特有的參數(shù),像微信普通商戶(hù)交易請(qǐng)求,只涉及 appid 與 mch_id,這個(gè)參數(shù)概念比較簡(jiǎn)單,比較容易。
但是在微信銀行服務(wù)商版本,微信交易參數(shù)就很多,主要為以下七個(gè)參數(shù):
appid mch_id sub_appid sub_mch_id channel_id openid sub_openid
這五個(gè)參數(shù),概念其實(shí)比較簡(jiǎn)單,但是混雜一起就是比較繞,下面我們?cè)敿?xì)解釋一下。
appid
這里的 appid 銀聯(lián)文檔解釋為微信分配的公眾賬號(hào)ID,也就是微信公眾號(hào) appid。但是實(shí)際上我們使用的過(guò)程中發(fā)現(xiàn),這個(gè) appid 也可以是相同主體的微信小程序的 appid。
但是這里有個(gè)前提,我們必須在服務(wù)商后臺(tái)綁定這個(gè) appid。
綁定頁(yè)面如下:

其他限制如下:
服務(wù)商/渠道商/從業(yè)機(jī)構(gòu)可以關(guān)聯(lián)主體一致的 appid 帳號(hào),不支持關(guān)聯(lián)主體不一致的AppID帳號(hào);
服務(wù)商/渠道商/從業(yè)機(jī)構(gòu)最多可關(guān)聯(lián) 3 個(gè) appid 帳號(hào);
當(dāng)商戶(hù)號(hào)或 appid 帳號(hào)存在風(fēng)險(xiǎn)時(shí),包括但不限于帳號(hào)資料不全,有處罰單據(jù)未處理等,平臺(tái)可能會(huì)增加審核流程或限制新增關(guān)聯(lián)。
相關(guān)詳情可以查看服務(wù)商商戶(hù)號(hào)與AppID賬號(hào)關(guān)聯(lián)管理,地址如下:
https://kf.qq.com/faq/200520fueQrI200520aQf6Rr.html
mch_id 與 sub_mch_id
這兩個(gè)參數(shù)的概念比較簡(jiǎn)單,也沒(méi)有其他用法。
mch_id 就是微信分配給服務(wù)商的商戶(hù)號(hào),而 sub_mch_id 就是微信分配給服務(wù)商下特約商戶(hù)的商戶(hù)號(hào),兩者關(guān)系如下所示:

服務(wù)商每筆交易這兩個(gè)參數(shù)都是必送。
sub_appid
特約商戶(hù) appid 配置
sub_appid 銀聯(lián)文檔上是微信分配給服務(wù)商下的子商戶(hù)號(hào)的 appid。那這個(gè) appid 可以是公眾號(hào) appid,也可以小程序 appid。
綁定頁(yè)面如下:


子商戶(hù)可以綁定的相同主體的 appid ,也可以綁定不同主體的 appid。那綁定主體不一致的 appid,比較麻煩,詳情參考下面這個(gè)鏈接:
https://kf.qq.com/faq/190715yaYnYv1907153mmIbA.html
另外需要說(shuō)明一點(diǎn),sub_appid 不是必傳的參數(shù),交易過(guò)程中可以不用傳入這個(gè)參數(shù)。
如果不傳這個(gè) sub_appid,JSAPI 等微信交易喚起微信支付交易參數(shù)只會(huì)包含服務(wù)商的 appid,如果特約商戶(hù)需要在自己的公眾號(hào)或小程序內(nèi)進(jìn)行微信支付,使用微信 JSSDK 喚起微信支付將會(huì)報(bào)錯(cuò)。
這種情況微信交易必須上傳 sub_appid 。
此外,如果我們?cè)诤笈_(tái)綁定了子商戶(hù)的 appid,那交易過(guò)程中就必須上傳 sub_appid,否則微信交易就會(huì)出錯(cuò)。
支付目錄設(shè)置
微信 JSAPI 支付在微信環(huán)境內(nèi)喚起微信支付,我們需要提前設(shè)置『支付目錄』。
這個(gè)支付目錄其實(shí)就是商戶(hù)最后請(qǐng)求拉起微信支付收銀臺(tái)的頁(yè)面地址,如果商戶(hù)拉起微信支付收銀臺(tái)地址與后臺(tái)設(shè)置的不一樣,拉起的時(shí)候就彈出報(bào)錯(cuò),提示“當(dāng)前頁(yè)面的URL未注冊(cè)?!?/p>
服務(wù)商模式支付目錄設(shè)置可分為2種方式:
服務(wù)商為全體子商戶(hù)設(shè)置支付目錄
服務(wù)商為某一子商戶(hù)單獨(dú)設(shè)置支付目錄
服務(wù)商為全體子商戶(hù)設(shè)置支付目錄需要登錄【微信服務(wù)商平臺(tái)—>產(chǎn)品中心—>開(kāi)發(fā)配置】,設(shè)置后一般5分鐘內(nèi)生效。

這種模式適合不傳入 sub_appid 進(jìn)行交易的場(chǎng)景。
那服務(wù)商為某一子商戶(hù)單獨(dú)設(shè)置支付目錄需要登錄【微信服務(wù)商平臺(tái)—>服務(wù)商功能—>特約商戶(hù)管理】,設(shè)置后一般5分鐘內(nèi)生效。

微信相關(guān)參考文檔:
https://pay.weixin.qq.com/wiki/doc/apiv3_partner/open/pay/chapter2_1.shtml https://pay.weixin.qq.com/wiki/doc/api/jsapi_sl.php?chapter=7_9&index=7
channel_id
channel_id 是銀行服務(wù)商獨(dú)有的參數(shù),銀聯(lián)文檔解釋為微信支付分配給收單服務(wù)商 id,這個(gè)解釋其實(shí)比較抽象,比較難以理解這個(gè)參數(shù)的目的。
channel_id 還有一個(gè)另外一個(gè)名稱(chēng),渠道商 id。那微信特約商戶(hù)進(jìn)件的時(shí)候,就需要傳入 channel_id,表明這個(gè)特約商戶(hù)屬于哪個(gè)渠道商。
渠道商指的是幫助銀行拓展和運(yùn)營(yíng)特約商戶(hù)的公司,可以分為三種類(lèi)型:
普通類(lèi)渠道商,指無(wú)第三方支付牌照、拓展微信支付商戶(hù)的企業(yè) 支付機(jī)構(gòu)類(lèi)渠道商,指持有第三方支付牌照、拓展微信支付商戶(hù)的支付機(jī)構(gòu)。 銀行類(lèi)渠道商
銀行類(lèi)渠道商比較特殊,他指是拓展微信支付商戶(hù)的銀行主體,若子商戶(hù)是該銀行服務(wù)商自拓的商戶(hù),則渠道商為銀行自身,銀行需要在商戶(hù)平臺(tái)將自身進(jìn)件為直拓渠道。
若商戶(hù)為銀行下屬分行或者支行或者其他銀行拓展的,則需要將其下屬分行或者支行或者其他銀行進(jìn)件成為渠道商。
如某銀行總行 A(銀行服務(wù)商)有自拓子商戶(hù) B,有其分行 C 拓展的子商戶(hù) D,也有某信 用社 E 拓展的子商戶(hù) F,則子商戶(hù) B 的渠道是 A,子商戶(hù) D 的渠道是 C,子商戶(hù) F 的渠道是 E。
銀行 A 需要將自身、分行 C 以及信用社 E 進(jìn)件成為渠道商。

服務(wù)商每筆交易都必須上送 channel_id。
openid 與 sub_openid
openid 是微信體系內(nèi)的用戶(hù)標(biāo)識(shí),它與 appid 有一定的綁定關(guān)系,相同的用戶(hù)在不同 appid 下 openid 將會(huì)是不一樣的。
那這里的 openid 需要通過(guò)服務(wù)商主體 appid 登錄授權(quán)才能獲取,而 sub_openid 需要通過(guò)子商戶(hù)的 appid,即 sub_appid 登錄授權(quán)才能獲取。

微信文檔上描述,如果傳入 sub_openid ,那就必須傳入 sub_appid。
但是實(shí)際測(cè)試過(guò)程中發(fā)現(xiàn),發(fā)現(xiàn)以下幾個(gè)問(wèn)題,
一、傳入 sub_openid ,不傳入 sub_appid,并不會(huì)報(bào)錯(cuò),交易可以繼續(xù)進(jìn)行。并且這里傳入的 sub_openid 可以是任意 appid 下獲取的 openid,微信端并不校驗(yàn)這個(gè) sub_openid 有效性。
二、這套邏輯并不適用 openid 這個(gè)字段。openid 這個(gè)字段,一定要傳入 appid 下獲取的 openid 字段,否則交易將會(huì)返回『openid和appid不匹配』。
