時(shí)間:2018年11月13號(hào)
最近, 公司抽風(fēng), 項(xiàng)目中需要為我們小程序中"服務(wù)的商戶"開(kāi)通微信支付功能.
與同事們研究決定,還是申請(qǐng)為微信服務(wù)商比較靠譜~
但是~ 不靠譜的事來(lái)了. 廢話不多說(shuō). 一步步的來(lái).
第一步: 申請(qǐng)為服務(wù)商 (有重點(diǎn)!!!!!!!統(tǒng)一下單坑點(diǎn)之一)
? ? ? ? ? ? ? ?先去公眾平臺(tái)申請(qǐng)一個(gè)服務(wù)號(hào)(只有服務(wù)號(hào)才可以支付和申請(qǐng)商戶號(hào),必須是認(rèn)證過(guò)的.300元)
? ? ? ? ? ? ? ?注意:保存好appId 與 appSecret ?統(tǒng)一下單中的appId指的是這個(gè)!!!!!!!!!
? ? ? ? ? ? ? ?申請(qǐng)完成后, 點(diǎn)擊微信支付, 成為服務(wù)商,上傳資料. 審核.300元
? ? ? ? ? ? ? ?申請(qǐng)頁(yè)面如下:(這個(gè)是已經(jīng)申請(qǐng)好了的)
? ? ? ? ? ? ? ?在這里, 說(shuō)明一下. 微信支付服務(wù)商是從已經(jīng)認(rèn)證過(guò)的服務(wù)號(hào)里申請(qǐng)的, 默認(rèn)與該服務(wù)號(hào)綁定.微信亂七八糟的名字很多.這里的服務(wù)號(hào)指公眾號(hào).
? ? ? ? ? ? ? ? 申請(qǐng)小程序.交納300元認(rèn)證費(fèi).注意:此次說(shuō)明小程序主體信息與微信支付服務(wù)商主體信息一致(如果不一致請(qǐng)看官方坑爹文檔)
? ? ? ? ? ? ? ? 申請(qǐng)開(kāi)放平臺(tái)~ 再來(lái)300元~ 在開(kāi)放平臺(tái)把公眾號(hào)與小程序關(guān)聯(lián)起來(lái).
第二步:微信公眾號(hào)服務(wù)號(hào)冈绊、小程序與微信支付服務(wù)商的賬號(hào)準(zhǔn)備好之后, 接下來(lái)配置微信支付服務(wù)商賬號(hào).
? ? ? ? ? ? ? ?登錄微信商戶平臺(tái)
? ? ? ? ? ? ? ? 進(jìn)行配置 ? 賬戶中心->API安全->設(shè)置秘鑰
秘鑰這是個(gè)大坑~~~留著.繼續(xù)往下走.遇到了再回來(lái)
接下來(lái)是 ?服務(wù)商功能->特約商戶申請(qǐng)
商戶申請(qǐng)審批成功之后 (此時(shí)微信會(huì)給你郵箱發(fā)送特約商戶的商戶號(hào)和密碼,與一般支付的那種商戶號(hào)一樣,可以登錄) ?
特約商戶管理->配置(還在服務(wù)商賬號(hào)下)
這里的支付授權(quán)目錄必須要正確.(別忘記了微信支付服務(wù)商的支付目錄以及回調(diào)地址在服務(wù)商賬戶里設(shè)置!這里的回調(diào)是地址!是地址!是地址!和目錄是有區(qū)別的!!!)
特約商戶APPID配置.我們填寫之前申請(qǐng)好的小程序appID.否則無(wú)法取到官方所為的sub_openId
第三步: 統(tǒng)一下單
根據(jù)官方的文檔?https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_sl_api.php?chapter=9_1
去發(fā)起統(tǒng)一下單.?
然后就是各種的報(bào)錯(cuò)!
商戶ID與APPID不匹配
sub_openid ?and sub_appid not match
簽名失敗
等錯(cuò)誤.
首先~ 你得保證,你的簽名沒(méi)有問(wèn)題. 順序正確,沒(méi)有傳入空值,不存在大小寫錯(cuò)誤,在簽名驗(yàn)證工具中可以通過(guò).如果還是報(bào)錯(cuò)簽名失敗~回到第二步, 服務(wù)商設(shè)置秘鑰的那里. 來(lái)來(lái)回回的換吧~ 2到3次 基本就ok了
在這里, 對(duì)這個(gè)坑爹的參數(shù)表.做一下說(shuō)明(寫這文檔的人~~~我就!@#@$%@#@!##$%你了!)
看這文檔寫的, openId 我是傳還是不傳?! 我去年買了個(gè)表的.不會(huì)說(shuō)話嘛!
還有這個(gè)網(wǎng)頁(yè)授權(quán)獲取用戶信息,很有歧義好嘛!
服務(wù)商模式下, 小程序支付.openId 不傳! 不傳! 不傳! ?簽名的時(shí)候直接省略這個(gè)參數(shù)!
接下來(lái)說(shuō)sub_openid. ?坑啊~~~
這里尼瑪就不是什么sub_openId ?就尼瑪是openId啊!!!!!!!! 哪來(lái)的?! ?wx.login 獲得code 再通過(guò)code 換來(lái)的.
有人就高興了. wx.login拿的openId啊? 我早就獲得了~ ?錯(cuò)!!!!! 不是這個(gè)!!! 雖然方法一樣! 內(nèi)容一樣! 但是他給的確實(shí)是有問(wèn)題的!這一步的登錄不能省!繼續(xù)往下看.!(去年買了個(gè)大表的! 文檔你寫清楚啊! 既然目的都是OpenId 為什么要取兩次!你TM得告訴我這里不一樣啊!)
對(duì)于openId的解釋, 微信官方是說(shuō), 一個(gè)用戶與多個(gè)小程序有多個(gè)openId,用戶與一個(gè)小程序的openId唯一.
然后,經(jīng)過(guò)測(cè)試:
wx.login({
? ? ? success: function (login_success) {
? ? ? ? wx.getUserInfo({
? ? ? ? ? lang: 'zh_CN',
? ? ? ? ? success: function (getUserInfo_success) {
? ? ? ? ? ? var code = login_success.code;
? ? ? ? ? ? var encryptedData = getUserInfo_success.encryptedData;
? ? ? ? ? ? var iv = getUserInfo_success.iv;
? ? ? ? ? ? //在這里去換openId ?(之前我們項(xiàng)目中保存過(guò)一次小程序的openId ?這時(shí)候再去取的時(shí)候, 變了~~ )
?????????????}
? ? ? ?});
? ? ?})
至此 ?統(tǒng)一下單 算是OK了. 接下來(lái). 去排坑~ 調(diào)起支付~ 正在研究中~ 后期補(bǔ)全