一、背景
這段時(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è)微信
用戶(hù)小程序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ū)分用戶(hù)的唯一性,
因?yàn)橹灰峭粋€(gè)微信開(kāi)放平臺(tái)賬號(hào)下的應(yīng)用、網(wǎng)站、公眾號(hào),其unionid是唯一的。換句話(huà)說(shuō):同一用戶(hù)對(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)獲取該用戶(hù)的unionid。無(wú)需用戶(hù)授權(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)
填寫(xiě)郵箱 -> 密碼 -> 填寫(xiě)機(jī)構(gòu)名稱(chēng) -> 地區(qū)及所在地 -> 認(rèn)證個(gè)人信息(姓名和身份證號(hào))-> 綁定管理員
PS: 基本的賬號(hào)注冊(cè)流程,沒(méi)啥特別好說(shuō)的
③ 綁定小程序
填寫(xiě)小程序登錄賬號(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"> 獲取頭像昵稱(chēng) </button>
<button wx:else open-type="getUserInfo" bindgetuserinfo="getUserInfo"> 獲取頭像昵稱(chēng) </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)需要證人,但是如果你是同一主體的話(huà)可以暫時(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/2502294.html