一、背景
這段時(shí)間,公司方面一直在運(yùn)營(yíng)微信號(hào)和兩個(gè)小程序。
在每個(gè)應(yīng)用的入口除了賬密登錄,還有一個(gè)微信快速登錄。目前是使用openId的方式來(lái)進(jìn)行業(yè)務(wù)邏輯處理的。但是這樣就存在一個(gè)問(wèn)題:因?yàn)榉謱俨煌膽?yīng)用,導(dǎo)致同一個(gè)微信
用戶小程序1和小程序2所返回的openid是不一樣的。
顯然,這是很不合理的!就解決方案來(lái)說(shuō):
① 可以把倆個(gè)openId都存儲(chǔ)起來(lái),然后進(jìn)行比對(duì)。但是會(huì)隨著應(yīng)用增多所保存的openid也逐漸增加
② 針對(duì)于此,官方給出的方案是使用 unionid
二、什么是unionid
2.1、什么是unionid
簡(jiǎn)單來(lái)說(shuō),如果開(kāi)發(fā)者擁有多個(gè)移動(dòng)應(yīng)用、網(wǎng)站應(yīng)用、公眾號(hào)應(yīng)用等情況下,可以通過(guò)unionid來(lái)區(qū)分用戶的唯一性,
因?yàn)橹灰峭粋€(gè)微信開(kāi)放平臺(tái)賬號(hào)下的應(yīng)用、網(wǎng)站、公眾號(hào),其unionid是唯一的。換句話說(shuō):同一用戶對(duì)同一個(gè)微信
開(kāi)放平臺(tái)下的不同應(yīng)用,其unionid是相同的。
2.2、如何獲取unionid
綁定了開(kāi)發(fā)者賬號(hào)的小程序,可以通過(guò)以下途徑獲取unionid
① 開(kāi)發(fā)者使用wx.login + jscode2session來(lái)獲取該用戶的unionid。無(wú)需用戶授權(quán)
② 小程序端調(diào)用云函數(shù)時(shí),可在云函數(shù)中通過(guò)Cloud.getWXContet獲取unionid
2.3、綁定小程序到微信開(kāi)放平臺(tái)
① 注冊(cè)微信開(kāi)放平臺(tái)
登錄到微信開(kāi)放平臺(tái):
② 注冊(cè)賬號(hào)
填寫郵箱 -> 密碼 -> 填寫機(jī)構(gòu)名稱 -> 地區(qū)及所在地 -> 認(rèn)證個(gè)人信息(姓名和身份證號(hào))-> 綁定管理員
PS: 基本的賬號(hào)注冊(cè)流程,沒(méi)啥特別好說(shuō)的
③ 綁定小程序
填寫小程序登錄賬號(hào)及密碼,最后小程序管理員確認(rèn)掃碼即可。大致如下:
三、unionid獲取的整個(gè)流程
3.1、小程序中進(jìn)行微信登錄
微信可以快速登錄相關(guān)代碼:
<!-- 微信快捷登錄 --> <view class="xa-wechat-login-panel"> <button class="xa-wechat-login-btn" bindtap="wechatLogin"> <image class="xa-wechat-login-logo" src="../login;></image> </button> </view> <view class="container"> <view class="userinfo"> <block wx:if="{{!hasUserInfo}}"> <button wx:if="{{canIUseGetUserProfile}}" bindtap="getUserProfile"> 獲取頭像昵稱 </button> <button wx:else open-type="getUserInfo" bindgetuserinfo="getUserInfo"> 獲取頭像昵稱 </button> </block> <block wx:else> <image bindtap="bindViewTap" class="userinfo-avatar" src="{{u}}" mode="cover"></image> <text class="userinfo-nickname">{{u}}</text> </block> </view>
Java
3.2、向后端發(fā)起驗(yàn)證請(qǐng)求
wechatLogin(){ const that = this; wx.login({ success (res) { if ) { /* 發(fā)起網(wǎng)絡(luò)請(qǐng)求 */ debugger; ); } else { con('登錄失敗!' + res.errMsg) } } }) },
Java
3.3、后端發(fā)起網(wǎng)絡(luò)請(qǐng)求
public R wechatFastLogin(WeichatFastLoginVO weichatFastLoginVO) { String url = null; try { url = u("APPID", appId).replace("SECRET", secret) .replace("JSCODE", weic()); logger.info("獲取微信登錄憑證校驗(yàn)Url:" + url); } catch (Exception e) { logger.info("獲取微信登錄憑證校驗(yàn)失敗:" + url); } /* 發(fā)送get請(qǐng)求獲取WXUserAccessToken */ String respRlt = H(url, null); WxUserAccessTokenDTO wxUserAccessTokenDTO = JSONObject.parseObject(respRlt, WxU); if (null == wxUserAccessTokenDTO) { return R.error("微信未登錄,請(qǐng)先登錄微信!"); } else if (null != wxU() && wxU() != 0) { return R.error("微信未登錄,請(qǐng)先登錄微信!"); } else if (null == wxU() || wxU().isEmpty()) { return R.error("微信未登錄,請(qǐng)先登錄微信!"); } String openId = wxU(); ... /* unionid存在于wxUserAccessTokenDTO,可進(jìn)行自定義相關(guān)業(yè)務(wù)邏輯處理 */
}
Java
四、注意事項(xiàng)
4.1、一定要加入微信開(kāi)放平臺(tái)
4.2、微信公眾平臺(tái)需認(rèn)證
微信公眾平臺(tái)需要證人,但是如果你是同一主體的話可以暫時(shí)不做認(rèn)證。認(rèn)證費(fèi)用大約為300元。
4.3、關(guān)聯(lián)不同主體時(shí)
當(dāng)你要關(guān)聯(lián)不同主體的微信公眾號(hào)、小程序時(shí),必須要先進(jìn)行認(rèn)證處理。
1.《微信公眾號(hào)平臺(tái)登錄專題之微信公眾平臺(tái)接入指南》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識(shí),僅代表作者本人觀點(diǎn),與本網(wǎng)站無(wú)關(guān),侵刪請(qǐng)聯(lián)系頁(yè)腳下方聯(lián)系方式。
2.《微信公眾號(hào)平臺(tái)登錄專題之微信公眾平臺(tái)接入指南》僅供讀者參考,本網(wǎng)站未對(duì)該內(nèi)容進(jìn)行證實(shí),對(duì)其原創(chuàng)性、真實(shí)性、完整性、及時(shí)性不作任何保證。
3.文章轉(zhuǎn)載時(shí)請(qǐng)保留本站內(nèi)容來(lái)源地址,http://f99ss.com/gl/2566887.html