微信账号和系统账号绑定

news/2025/1/12 16:04:33/

微信开发接口文档:https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Authorized_Interface_Calling_UnionID.html

获取用户个人信息(UnionID机制)

接口说明

此接口用于获取用户个人信息。开发者可通过OpenID来获取用户基本信息。特别需要注意的是,如果开发者拥有多个移动应用、网站应用和公众帐号,可通过获取用户基本信息中的unionid来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号,用户的unionid是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。请注意,在用户修改微信头像后,旧的微信头像URL将会失效,因此开发者应该自己在获取用户信息后,将头像图片保存下来,避免微信头像URL失效后的异常情况。

请求说明

http请求方式: GET
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID

在这里插入图片描述

返回说明
正确的Json返回结果:{
"openid":"OPENID",
"nickname":"NICKNAME",
"sex":1,
"province":"PROVINCE",
"city":"CITY",
"country":"COUNTRY",
"headimgurl": "https://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0",
"privilege":[
"PRIVILEGE1",
"PRIVILEGE2"
],
"unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL"}

在这里插入图片描述
在这里插入图片描述

<div class="layadmin-user-login-box layadmin-user-login-body layui-form" id="bind-account"><div class="layui-form-item"><label class="layadmin-user-login-icon layui-icon layui-icon-username"></label><input type="text" name="username" id="username" lay-verify="required" placeholder="用户名" class="layui-input"></div><div class="layui-form-item"><label class="layadmin-user-login-icon layui-icon layui-icon-password"></label><input type="password" name="password" id="password" lay-verify="required" placeholder="密码" class="layui-input"></div><div class="layui-form-item"><button class="layui-btn layui-btn-fluid" id="bind-login" onClick="bindLogin()">确 定</button></div>
</div>
//确认绑定微信且登录
function bindLogin(){var account = $('#username').val().trim();var password = $('#password').val().trim();if(account == ""){layer.msg('请输入账号!', {icon: 5});return;}if(password == ""){layer.msg('请输入密码!', {icon: 5});return;}//获取url中的key参数   //跳转微信绑定页面时候带来的参数var paramKey = window.location.search.substring(1).substring(4);if(paramKey == ""){layer.alert('请求错误,点击确定跳转至登录页重新登录!', {icon: 2,end :function(){location.href = 'login.html';}});return;}var param ={"account":account,"password":password};$.post("login/wxBindLogin.do",param,function(data){if(data.code== "failed"){layer.msg('绑定失败,请重试!',{icon: 5});}else if(data.code== "success"){location.href = 'index.jsp';}else{layer.msg('参数错误!',{icon: 2});}$("#bind-login").text("确定");$("#bind-login").css("color","#fff");});
}
//绑定微信且执行登录
@ResponseBody
@RequestMapping("/wxBindLogin")
public Object wxBindLogin(HttpServletRequest request,HttpServletResponse response){JSONObject jsonObj = new JSONObject();try {String account = WebUtil.decode(request.getParameter("account"));String password = WebUtil.decode(request.getParameter("password"));redisUtil.setDb(6);//在上一个扫码登入的时候,存入redis缓存中String code = (String)redisUtil.get("code");//非法请求直接返回if(StringUtils.isBlank(account) || StringUtils.isBlank(password)){jsonObj.put("code", "failed");return jsonObj;}//请求微信通过code获取access_tokenString accessToken = getUrlInfo("https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code="+code+"&grant_type=authorization_code");//将请求结果字符串转jsonJSONObject accessTokenJson = JSONObject.fromObject(accessToken);String access_token = (String)accessTokenJson.get("access_token");//接口调用凭证,登录后右上角展示数据需要该值去获取String openid = (String)accessTokenJson.get("openid");//授权用户唯一标识String unionid = (String)accessTokenJson.get("unionid");//用户统一标识(微信登录不需要该字段,但后面如果拓展其他功能可能需要)//验证成功,开始执行登陆方法User newUser = new User();newUser.setAccount(account);newUser.setOpenid(openid);//更新授权用户唯一标识newUser.setUnionid(unionid);//更新用户统一标识//把openid和unionid存到数据库中loginService.updatePWD(newUser);//根据access_token和openid获取用户昵称和头像用作右上角显示String wxInfo = getInfo("https://api.weixin.qq.com/sns/userinfo?access_token="+access_token+"&openid="+openid);//将请求结果字符串转jsonJSONObject wxInfoJson = JSONObject.fromObject(wxInfo);String nickname = (String)wxInfoJson.get("nickname");//普通用户昵称String headimgurl = (String)wxInfoJson.get("headimgurl");//用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空HttpSession session = request.getSession();session.setAttribute("wxusername", nickname);session.setAttribute("wxuserimg", headimgurl);jsonObj.put("code", "success");//删除redis中的key信息redisUtil.setDb(6);redisUtil.del("code");				} catch (Exception e) {jsonObj.put("code", "failed");e.printStackTrace();}return jsonObj;
}
//调用接口
private String getInfo(String URL) {// 创建Httpclient对象CloseableHttpClient httpclient = HttpClients.createDefault();CloseableHttpResponse response = null;String resultString = null;try {// 创建uriURIBuilder builder = new URIBuilder(URL);URI uri = builder.build();// 创建http GET请求HttpGet httpGet = new HttpGet(uri);// 执行请求response = httpclient.execute(httpGet);// 判断返回状态是否为200if (response.getStatusLine().getStatusCode() == 200) {resultString = EntityUtils.toString(response.getEntity(),"UTF-8");}} catch (Exception e) {e.printStackTrace();} finally {try {if (response != null) {response.close();}httpclient.close();} catch (IOException e) {e.printStackTrace();}}return resultString;
}

http://www.ppmy.cn/news/637092.html

相关文章

同一个浏览器登录不同账号_亚马逊账号安全问题,小白一直关心的防关联操作(真正解决)...

2019-11-21更新,最近已经有更成熟的技术出来了,大家可以用超级浏览器,软件名和链接我放在文末,这个超级浏览器就是一个保护伞的意思,你要登后台的时候,就用先登陆它,就会跟本地环境隔离。 找了半天没有适合开头的图片,就继续用昨天那张吧 因为这个也是经典问题,网络上…

git 切换提交账号

查看本地仓库提交代码账号和邮箱 进入仓库目录&#xff08;即带有.git文件夹的目录&#xff09; 方法一 打开git命令行&#xff08;git bash here&#xff09; &#xff0c;执行以下命令 git config user.name git config user.email方法二 进入.git文件夹&#xff0c;打开co…

oracle创建视图多表关联,Oracle创建两表关联查询的视图

在项目开发中&#xff0c;有时候会用到多表查询&#xff0c;有很多种方法&#xff0c;比如关联&#xff0c;比如视图&#xff0c;但对于查询来说&#xff0c;视图查询是最快的&#xff0c;如果你的数据库的字段信息很多&#xff0c;那查询就得整表查&#xff0c;比如两表查询&a…

小程序关联服务号

需求 小程序关联服务号通知方式业务分析 综述 1.1 需求背景 小程序通知是采用微信订阅信息推送的形式&#xff0c;订阅信息分为长期模板和一次性模板&#xff0c;目前长期性订阅消息仅向政务民生、医疗、交通、金融、教育等线下公共服务开放&#xff0c;一次性订阅信息只能满足…

BAT账号相关1:腾讯开放平台和QQ互联开发者审核步骤

BAT账号相关1&#xff1a;腾讯开放平台和QQ互联开发者审核步骤 服务QQ: 腾讯开放平台800013811 只有QQ互联资质和腾讯开放平台资质是公用的&#xff0c;您在QQ互联创建的应用&#xff1a; 涉及到QQ分享的问题是需要您咨询QQ登录的&#xff1a; 1、注册并审核【腾讯开放平…

手机qq如何绑定qq邮箱服务器,如何配置和绑定QQ个人邮箱

1.在系统设置中配置QQ邮箱服务器 ①系统设置—邮件设置—服务器设置&#xff0c;QQ个人邮箱的配置方式如下图&#xff0c;保存成功。 2.在浏览器上登录QQ邮箱 ①点击邮箱主页中的“设置”&#xff0c; ②在“邮箱设置”中点击“账户” ③在“账户”列表中下拉至“POP3/IMAP/SMT…

source tree 关联gitlab/github账号 实现项目管理

首先在本地生成 ssh key 在终端输入 &#xff1a; ssh-keygen -t rsa -C "你的gitlab账户名称" 比如 ssh-keygen -t rsa -C "zhansanqq.com" 记住账户是什么样的就是填什么 查询ssh的生成情况 cd /Users/tangjinquan/.ssh/ 可以看到如下的文件 将你…

如何防止亚马逊账户关联?

什么是关联▼ 亚马逊规定&#xff0c;一个卖家只能拥有一个店铺。而"关联"是指亚马逊通过技术手段&#xff0c;获取卖家相关信息&#xff0c;通过匹配关联因素&#xff0c;判断多个店铺账号是否属于同一卖家。 关联的后果▼ 后果&#xff11;&#xff0d;相同站点…