微信三方登陆和授权
来源:互联网 发布:php 过滤二维数组重复 编辑:程序博客网 时间:2024/06/05 20:23
1.基于开放平台的三方登陆
登陆微信开放平台,然后在“管理中心”添加一个网战应用,通过后拿到网站对应的appId和appSecret并配置网站的回调域名,回调域名是配置扫码后,微信的跳转页面,此时,会带上一个code值,如我配置的回调域名为:www.test.com那么在我用微信扫码登陆之后,会自动跳转到:www.test.com?code=XXXXX&state=XXX,此处我们需要code值,可以在域名对应的页面里初始化的时候抓取到code,并调用自己写的接口来获取用户信息,至此,微信扫码登陆完成。
微信扫码登陆二维码URL:https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect 替换其中appid和redirect_uri然后复制当前URL到自己的网站上对应的位置,当用户点击URL时,会弹出二维码,用微信扫码后,自动登录网站。更详细说明请参照开放平台上对应的API文档。
后端使用java编写:
微信扫码登陆二维码URL:https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect 替换其中appid和redirect_uri然后复制当前URL到自己的网站上对应的位置,当用户点击URL时,会弹出二维码,用微信扫码后,自动登录网站。更详细说明请参照开放平台上对应的API文档。
后端使用java编写:
/** * 微信登陆回调用接口 * @param code 微信授权后自动携带的参数 * @param state * @param response * @param request */@RequestMapping(value = "/auth",method = RequestMethod.GET)public void fromWechat(String code, String state, HttpServletResponse response, HttpServletRequest request){ Optional.ofNullable(code).ifPresent(c -> { String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="+ RobotTools.appId+ "&secret="+RobotTools.appSecret+"&code="+code+"&grant_type=authorization_code"; String res = RobotTools.doGet(url); if(res.contains("access_token")){ JSONObject jsonObject = JSONObject.fromObject(res); String accessToken = jsonObject.getString("access_token"); String optionId = jsonObject.getString("openid"); String userUrl = "https://api.weixin.qq.com/sns/userinfo?access_token="+accessToken+"&openid="+optionId; String userInfo = RobotTools.doGet(userUrl); JSONObject userJson = JSONObject.fromObject(userInfo); String nickname = userJson.getString("nickname"); String headUrl = userJson.getString("headimgurl"); String unionId = userJson.getString("unionid"); //用户唯一标识,同一用户id相同 User user = this.getUser(headUrl,nickname,unionId,request); try { response.sendRedirect("http://www.test.com/account/login?token="+user.getToken()); }catch (IOException e){ e.printStackTrace(); } } });}
此处获取到用户信息后,可以直接返回用户信息给前段,不一定需要做跳转处理,具体看需求。
逻辑是:根据微信返回给我们的code,由前段ajax发起请求,先获取accesstoken和openId再获取微信的用户信息。
需要注意:对于微信返回过来的图片url,我们最好单独存放到自己的服务器,防止以后微信用户修改了图片后,在我们的网站上抓取的图片也被修改。
需要注意:微信开放平台提供的三方登陆目前只支持web端扫码登陆,原生的IOS和安卓登陆,暂不支持移动端h5的登陆。
2.微信服务号授权
登陆微信服务号(已授权),点击接口权限,找到网页授权,配置回调域名,配置规则在微信设置页有详细的解释。
服务号授权主要用来对一些挂在服务号下的三方网站的授权登陆,在配置好上面的回调域名后,将官方文档提供的高级接口URL:https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
放置在微信自定义菜单跳转链接URL中,其中需要注意:appId对应着服务号ID,redirect_uri是经过加密处理的回调域名或其域名下的子文件页面,scope有两种:snsapi_base和snsapi_userinfo前者用来做静默授权,后者用来做非静默授权,如果想要获取用户信息,只能使用第二种;
服务号授权主要用来对一些挂在服务号下的三方网站的授权登陆,在配置好上面的回调域名后,将官方文档提供的高级接口URL:https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
放置在微信自定义菜单跳转链接URL中,其中需要注意:appId对应着服务号ID,redirect_uri是经过加密处理的回调域名或其域名下的子文件页面,scope有两种:snsapi_base和snsapi_userinfo前者用来做静默授权,后者用来做非静默授权,如果想要获取用户信息,只能使用第二种;
处理逻辑大致与开放平台登陆一直,用户点击链接后,在redirect_uri对应的页面中初始化发送后台请求获取用户信息。
/** * 微信服务号授权登陆 * @return */@RequestMapping(value = "/auth2",method = RequestMethod.GET)public ApiResult<User> auth2(String code,HttpServletRequest request,HttpServletResponse response){ if(StringUtils.isEmpty(code)){ log.warn("微信授权失败,code为空"); return ApiResult.fail("微信授权失败,code为空"); } String accessUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="+RobotParam.fzzsAppId+ "&secret="+RobotParam.fzzsSecret+"&code="+code+"&grant_type=authorization_code"; String resultAccess = RobotTools.doGet(accessUrl); JSONObject jsonObject = JSONObject.fromObject(resultAccess); String accessToken = jsonObject.getString("access_token"); String openId = jsonObject.getString("openid"); String userUrl = "https://api.weixin.qq.com/sns/userinfo?access_token="+accessToken+"&openid="+openId; String userInfo = RobotTools.doGet(userUrl); JSONObject userJsonObject = JSONObject.fromObject(userInfo); String unionId = userJsonObject.getString("unionid"); if(StringUtils.isEmpty(unionId)){ log.warn("微信授权失败,获取微信用户信息失败"); return ApiResult.fail("微信授权失败,获取微信用户信息失败"); } String headUrl = userJsonObject.getString("headimgurl"); String nickname = userJsonObject.getString("nickname"); User user = this.getUser(headUrl,nickname,unionId,request); return ApiResult.success(user);}
阅读全文
1 0
- 微信三方登陆和授权
- windows(win8)的telnet服务的开启和授权登陆
- 第三方授权登陆
- 微信授权登陆
- QQ授权登陆
- android 淘宝登陆授权
- Android 微信授权登陆
- java微信授权登陆
- MongoDB-3.2.0 授权登陆
- 微信授权登陆步骤
- shiro学习和使用实例(2)——登陆认证和授权
- shiro学习和使用实例(2)——登陆认证和授权
- CentOS-6.5快速搭建HTTP服务器和仅供授权用户登陆的FTP服务器
- iOS开发:集成微信支付和微信授权登陆
- android之微信最新版的sdk接入微信授权登陆和数据回调
- 破解iTunes 登陆 PC授权 设备授权 购买安装协议。
- web.config 文件对登陆用户授权
- android linkedin 登陆授权及分享
- [李景山php] DDoS攻击进阶 混合攻击
- java 类型信息 笔记
- 1045 回文数
- Linux基础概念
- [置顶] TensorFlow 安装及问题解决
- 微信三方登陆和授权
- ECharts-JavaScript图表库学习记录
- vim安装和配置
- php网站开发
- 声明一个变量为null
- 我的个人网站上线啦!欢迎访问:www.riba2534.cn
- 习题3-8 循环小数(Repeating Decimals, ACM/ICPC World Finals 1990, UVa202)
- Longest Palindromic Substring 算法总结
- 常用数据库知识(二)