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

微信浏览器打开第三方链接通常需要用户手动点击,但在Java后台可以通过构建URL并发送到前端,让前端通过JavaScript的window.location.href属性跳转。这里是一个简化的步骤说明: 1. **创建URL**:首先,你需要构建一个完整的URL,包括协议(http或https)、域名、路径和查询参数,例如: ```java String url = "https://www.example.com?param1=value1&param2=value2"; ``` 2. **响应转发**:如果你在一个Web应用中,可以将这个URL作为一个HTTP响应返回给前端。比如在Spring MVC中,你可以这样做: ```java @GetMapping("/openWechatLink") public void redirectToWechatLink(Model model) { model.addAttribute("url", url); // 转发到一个视图,前端JS会从model获取url return new RedirectView(url); } ``` 3. **前端处理**:然后在HTML页面中,你可以使用模板引擎(如Thymeleaf或JSP)来动态插入URL,或者直接在JavaScript中设置`window.location.href`: ```javascript <%-- JSP示例 --%> <a href="${url}" target="_blank">打开微信链接</a> <%-- 或者JavaScript示例 --%> <script> window.location.href = '<%= request.getAttribute("url") %>'; </script> ``` 4. **兼容微信内置浏览器**:为了支持微信内置浏览器,还需要确保链接携带适当的User-Agent头信息,以便识别为微信浏览器。 请注意,这只是一个基础的示例,实际应用可能需要处理更多情况,比如微信的JS-SDK授权、加密参数传递等。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值