web网站java实现微信第三方登录分享(微信开放平台)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_31929931/article/details/84486955

这篇文章给大家分享一下微信的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内部可以提示点击右上角分享,如何判断对应环境可以查看我的另外一篇文章-->链接

猜你喜欢

转载自blog.csdn.net/qq_31929931/article/details/84486955