web網站java實現微信第三方登錄分享(微信開放平臺)

這篇文章給大家分享一下微信的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內部可以提示點擊右上角分享,如何判斷對應環境可以查看我的另外一篇文章-->鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章