这篇文章给大家分享一下微信的web第三方登录
首先说明一下,此处登录时微信开放平台的第三方登录,和微信公众平台不一样,两个平台貌似是两拨人开发的,虽然双方最后的用户唯一标识都是openId,但是是不互通的。如果开发平台想和公众平台相互通,两个平台得互相绑定,然后获取唯一识别unionId.
废话不多说先上文档微信web第三方登录
还是先获取appid和secret,填写回调
获取code,在这一步中好多人按照文档的提示修改了对应的参数然后还是提示scope参数错误,这是因为没有仔细看文档,见下图,权限是需要获取的,登入开放平台自己去申请
然后可以打开网页后其实这个链接就直接可以用于登录,js实现如下,修改appid和回调地址即可
navigateTo("https://open./connect/qrconnect?appid="+wechatAppId+"&redirect_uri="+encodeURIComponent(wechatRedirectURI)+"&response_type=code&scope=snsapi_login&state=2#wechat_redirect");
或者开发者想在自己的页面内弹出二维码(见下图)
获取到code,老样子传到后台通过接口调用获取你需要的信息(实现代码如下)
@Overridepublic Map<String, Object> getAccessToken(String code){Map<String, Object> map = new HashMap<>();try{String url = "https://api./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*/@Overridepublic Map<String, Object> getUserInfoByCode(String accessToken,String openId) {Map<String,Object> map = new HashMap<>();try{String url = "https://api./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内部可以提示点击右上角分享,如何判断对应环境可以查看我的另外一篇文章-->链接