這篇文章給大家分享一下微信的web第三方登錄
首先說明一下,此處登錄時微信開放平臺的第三方登錄,和微信公衆平臺不一樣,兩個平臺貌似是兩撥人開發的,雖然雙方最後的用戶唯一標識都是openId,但是是不互通的。如果開發平臺想和公衆平臺相互通,兩個平臺得互相綁定,然後獲取唯一識別unionId.
廢話不多說先上文檔微信web第三方登錄
還是先獲取appid和secret,填寫回調
獲取code,在這一步中好多人按照文檔的提示修改了對應的參數然後還是提示scope參數錯誤,這是因爲沒有仔細看文檔,見下圖,權限是需要獲取的,登入開放平臺自己去申請
然後可以打開網頁後其實這個鏈接就直接可以用於登錄,js實現如下,修改appid和回調地址即可
navigateTo("https://open.weixin.qq.com/connect/qrconnect?appid="+wechatAppId+"&redirect_uri="+encodeURIComponent(wechatRedirectURI)+"&response_type=code&scope=snsapi_login&state=2#wechat_redirect");
或者開發者想在自己的頁面內彈出二維碼(見下圖)
獲取到code,老樣子傳到後臺通過接口調用獲取你需要的信息(實現代碼如下)
@Override
public Map<String, Object> getAccessToken(String code){
Map<String, Object> map = new HashMap<>();
try{
String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="+appid+"&secret="+secret+"&code="+code+"&grant_type=authorization_code";
String result = HttpClientUtils.get(url);
this.logger.error("獲取微信accessToken回調數據"+result);
JSONObject jsStr = JSONObject.fromObject(result);
this.logger.error("獲取微信accessToken回調數據"+jsStr.toString());
String accessTokenWechat = jsStr.getString("access_token");
String openid = jsStr.getString("openid");
map.put("access_token",accessTokenWechat);
map.put("openid",openid);
this.logger.error("獲取微信accessToken="+accessTokenWechat+";openId="+openid);
}catch(Exception e){
this.logger.error("獲取微信accessToken失敗", e);
}
return map;
}
/**
* 獲取用戶信息
* @param accessToken
* @param openId
* @return
*/
@Override
public Map<String, Object> getUserInfoByCode(String accessToken,String openId) {
Map<String,Object> map = new HashMap<>();
try{
String url = "https://api.weixin.qq.com/sns/userinfo?access_token="+accessToken+"&openid="+openId;
String result = HttpClientUtils.get(url);
JSONObject jsStr = JSONObject.fromObject(result);
String nickname = jsStr.getString("nickname");
String sex = jsStr.getString("sex");
String province = jsStr.getString("province");
String city = jsStr.getString("city");
String country = jsStr.getString("country");
String headimgurl = jsStr.getString("headimgurl");
String unionid = jsStr.getString("unionid");
map.put("nickname",nickname);
map.put("sex",sex);
map.put("province",province);
map.put("city",city);
map.put("country",country);
map.put("headimgurl",headimgurl);
map.put("unionid",unionid);
map.put("openid",openId);
this.logger.error("獲取微信信息成功nickname="+nickname);
}catch(Exception e){
this.logger.error("獲取微信信息失敗", e);
}
this.logger.error("獲取微信信息失敗");
return map;
}
關於web網站的分享功能,在除了微信和qq內部,我們可以使用將當前頁面url生成二維碼提示用戶掃碼分享;在微信qq內部可以提示點擊右上角分享,如何判斷對應環境可以查看我的另外一篇文章-->鏈接