JAVA实现微信授权登录(详解)
第一步:(前期设置)登录微信公众号接口测试平台设置信息
登录微信公众号接口测试平台
登录成功后可以看到测试用的appid和appsecret,稍后再后台我们要用到这两个ID,如下图
紧接着需要设置网页授权(体验接口权限表 —》 网页服务 —》网页帐号 —》 网页授权获取用户基本信息)
没有域名的话可以用内网穿透动态解析一个域名
NATAPP链接
注册登录成功后可以看到下图,选择免费隧道
购买免费的隧道之后,可以直接按照官方的一分钟教程完成内网穿透,这样我们就拿到了我们的域名
这个地方有一个坑,就是mac电脑通过natapp下载之后,新建一个natapp目录,将压缩包移入解压,需要在新建一个config.ini文件,内容:
#将本文件放置于natapp同级目录 程序将读取 [default] 段
#在命令行参数模式如 natapp -authtoken=xxx 等相同参数将会覆盖掉此配置
#命令行参数 -config= 可以指定任意config.ini文件
[default]
authtoken= #对应一条隧道的authtoken
clienttoken= #对应客户端的clienttoken,将会忽略authtoken,若无请留空,
log=none #log 日志文件,可指定本地文件, none=不做记录,stdout=直接屏幕输出 ,默认为none
loglevel=ERROR #日志等级 DEBUG, INFO, WARNING, ERROR 默认为 DEBUG
http_proxy= #代理设置 如 http://10.123.10.10:3128 非代理上网用户请务必留空
将得到的authtoken填进去,authtoken在这个里
然后打开终端,进入该目录下,先执行
chmod a+x natapp
再执行
./natapp
运行成功就是下面这个界面了
⚠️:我们的端口号要与项目的端口号一致,例如:我们项目的端口号是8080,那么natapp中也要设置为8080
设置步骤:
第二步:代码实现微信授权。
简单来说,微信授权分为四步:
1.授权登录接口。
2.用户点击授权。
3.微信授权回调接口。
4.在回调接口中获取openid、access_token、获取用户信息。
第一步:先上工具类AuthUtil
public class AuthUtil {public static final String APPID = "wxf80f3f5e8c5a06bb";public static final String APPSECRET = "49ec132fa089a70916a4d90ff46bce90";//回调地址public static final String backUrl="http://zchhai.natappfree.cc/api/callBack";//如果你没有在application.yml文件中设置 context-path: /api,那么api就去掉
// public static final String backUrl="http://localhost:8080/callBack";public static JSONObject doGetJson(String url) throws ClientProtocolException, IOException{JSONObject jsonObject = null;// 创建HttpClient实例HttpClient client = HttpClientBuilder.create().build();// 根据URL创建HttpGet实例HttpGet get = new HttpGet(url);// 执行get请求,得到返回体HttpResponse response = client.execute(get);System.out.println(response);//从response里面拿自己想要的结果HttpEntity entity = response.getEntity();if(entity != null){String result = EntityUtils.toString((HttpEntity) entity,"UTF-8");jsonObject = jsonObject.fromObject(result);}//把链接释放掉
// HttpGet.releaseConnection();return jsonObject;}
}
第二步:WxAuthorizeController的微信授权接口
/*** Tea微信登录接口* @throws IOException */@IgnoreAuth@RequestMapping("/health-service/wxlogin")public void wx(HttpServletRequest request, HttpServletResponse response) throws IOException {//第一步:引导用户进入授权页面同意授权,获取codeStringBuilder builder = new StringBuilder("https://open.weixin.qq.com/connect/oauth2/authorize?appid=");builder.append(AuthUtil.APPID);builder.append("&redirect_uri=");builder.append(URLEncoder.encode(AuthUtil.backUrl));//开发文档要求转换builder.append("&response_type=code");builder.append("&scope=snsapi_userinfo");builder.append("&state=STATE#wechat_redirect");//授权页面地址//将StringBuilder转换成StringString url=builder.toString();//重定向到授权页面response.sendRedirect(url);}/*** Tea微信登录接口回调*/@RequestMapping(value="/callBack")public Response wxcallback(@RequestParam("code") String code, Model model)throws IOException {System.out.println("code:" + code);//获取code后,请求以下链接获取access_tokenStringBuilder builder = new StringBuilder("https://api.weixin.qq.com/sns/oauth2/access_token?appid=");builder.append(AuthUtil.APPID);builder.append("&secret=");builder.append(AuthUtil.APPSECRET);builder.append("&code=");builder.append(code);builder.append("&grant_type=authorization_code");//通过网络请求方法来请求上面这个接口//将StringBuilder转换成StringString url=builder.toString();JSONObject jsonObject = AuthUtil.doGetJson(url);System.out.println("==========================jsonObject" + jsonObject);//从返回的JSON数据中取出access_token和openid,拉取用户信息时用String token = jsonObject.getString("access_token");String openid = jsonObject.getString("openid");// 第三步:刷新access_token(如果需要)// 第四步:拉取用户信息(需scope为 snsapi_userinfo)StringBuilder builder1 = new StringBuilder("https://api.weixin.qq.com/sns/userinfo?access_token=");builder1.append(token);builder1.append("&openid=");builder1.append(openid);builder1.append("&lang=zh_CN");//通过网络请求方法来请求上面这个接口//将StringBuilder转换成StringString infoUrl=builder1.toString();JSONObject userInfo = AuthUtil.doGetJson(infoUrl);System.out.println("userInfo=======" + userInfo);//第1种情况:使用微信用户信息直接登录,无需注册和绑定
// model.addAttribute("info",userInfo);
// return "wx/wxtest1";
////第2种情况:查看数据库是否存在相对应用户try {WxUser wxuser = new WxUser();wxuser = wxService.findnameByopenId(openid);System.out.println("wxuser=======" + wxuser);if (wxuser != null) {//已绑定model.addAttribute("info",userInfo);model.addAttribute("name", wxuser.getName());Response response = new Response("已授权成功",1,true);return response;} else {//未绑定model.addAttribute("openid", openid);model.addAttribute("info",userInfo);Map<String, Object> dataMap = new HashMap<>();dataMap.put("openid", openid);dataMap.put("info", userInfo);Response response = new Response();response.setResponse(true,"授权成功",200,dataMap);return response;}} catch (Exception e) {e.printStackTrace();}Response response = new Response("授权失败",1,true);return response;}/*** 微信登录成功后将用户信息插入数据库*/@RequestMapping(value="/health-service/addwxuser")public Response addWXuser(@RequestParam("openid") String openid,@RequestParam("name") String name,@RequestParam("sex") String sex,@RequestParam("city") String city,@RequestParam("urlimg") String urlimg){int count = wxService.addWxuser(openid,name,sex,city,urlimg);if(count>0){Response response = new Response("添加成功",1,true);return response;}Response response = new Response("添加失败",-1,false);return response;
// return "wx/success";//跳转绑定成功页面}
参数如下
最后
我们在微信开发者工具中进行接口验证
1.进入开发者工具选择公众号网页
2.在上面的地址了输入我们的微信登录接口
如果没有出现这个页面点击右上角的清缓存按钮,清除这两个
在重头开始就行了
3.授权之后我们就能看到我们的用户信息了
到此微信授权登录就好了,就可以进行用户信息添加到我们的数据库中了。
JAVA实现微信授权登录(详解)相关推荐
- Java对接微信公众平台详解
Java对接微信公众平台详解 1.公众平台概述 1.1 公众平台概述 1.2 入门指引 2.对接流程 2.1 接入概述 2.2 填写服务器配置 2.3 接口域名说明 2.4 获取Access toke ...
- Java版本微信授权登录(升级版)
前面写了一遍文章<Java版本微信授权登录(测试版)>,可以当做入门的基础文章,这里继续做一点深入,主要解决的是,如何在本地开发中微信授权以后跳转到本地启动的项目中. 我们知道了微信公众平 ...
- Java版本微信授权登录(测试版)
这篇文章是对微信授权登录的一个测试版本,并不能直接在生产上使用,对于在生产上正式使用将会在下一篇中描述. 一,首先需要以下两个数据 appID和appsecret 如何获取这两个数据,请先登录微信公众 ...
- PHP+laravel 微信开发工具授权登录详解
微信小程序登录流程时序 废话不多说,直接上代码: html 代码 <button open-type="getUserInfo" bindtap="login&qu ...
- 微信小程序授权登录详解
文章目录 流程 wx.login() auth.code2Session 实战 前端代码 后端代码 流程 说明 调用 wx.login() 获取 临时登录凭证code ,并回传到开发者服务器. ...
- Java实现GitHub第三方登录详解
GitHub第三方登录实现效果如下: 实现流程如下: 1.注册一个GitHub账号 2.注册一个授权的网站保存一个你的Client ID和Client Secret 3.准备一个页面,有一个链接跳转到 ...
- 微信h5登录php,vue实现微信授权登录步骤详解
这次给大家带来vue实现微信授权登录步骤详解,vue实现微信授权登录的注意事项有哪些,下面就是实战案例,一起来看一下. 背景 vue前后端分离开发微信授权 场景 app将商品分享到微信朋友圈或者分享给 ...
- java如何实现微信授权登录
要在 Java 中实现微信授权登录,需要按照以下步骤操作: 在微信开放平台(https://open.weixin.qq.com/)申请微信登录的第三方平台资格,并获取相应的 AppID 和 AppS ...
- 微信授权登录(java实现)
微信公众平台开发文档 微信授权登录获取用户信息有2种方式: 1.静默授权获取用户信息. 2.非静默授权弹出授权界面,用户确认之后获取用户信息(这种方法能够获取到更多信息). 开发前准备: 1.获取到A ...
- 硅谷课堂 12_公众号消息和微信授权登录
硅谷课堂第十二天-公众号消息和微信授权登录 文章目录 硅谷课堂第十二天-公众号消息和微信授权登录 一.公众号普通消息 1.实现目标 2.消息接入 2.1.公众号服务器配置 2.2.验证来自微信服务器消 ...
最新文章
- 防抖 节流_关于防抖和节流
- 10分钟学会如何使用Shiro
- MongoDB 教程五: MongoDB固定集合和性能优化
- php安装redis扩展模块,[教程]为PHP安装phpRedis扩展模块
- Oracle GoldenGate理论
- 这就是为什么IT人没有女朋友的原因!!
- iOS学习-UITextField设置placeholder的颜色
- 详解用Navicat工具将Excel中的数据导入Mysql中
- FishC笔记—15 讲 字符串:格式化
- oppo9s刷机教程_OPPO R9s R9sk刷机教程 OPPO R9s R9sk卡刷升级教程
- Matlab学习手记——输出到MathType公式编辑器
- 写于即将23岁的前端转正前夕
- echarts折线图 - 区域图 -如何设置填充色
- android 聊天气泡背景图片,聊天气泡背景图片拉伸设置
- (转)东方美人吉他谱及演奏(中川砂仁)
- 泰坦尼克号 数据重构 + 可视化
- 斐讯N1的OpenWrt设置(含N1当主路由兼AP模式)
- Java实现21点多人游戏(期末作业)
- 玩具or工具?普元信息低代码平台给出了说法
- java练习题之华氏摄氏度与摄氏度的转化。
热门文章
- win10计算器rsh_Win10系统有哪些计算器快捷键
- 20135202闫佳歆——家庭作业汇总
- Win10 + vs2017 编译并配置tesseract-5.0.0-alpha 遇到的问题
- Equitrac智能打印管理软件中文版
- Python读取视频方法
- 计算机 二进制 知识,[转载]计算机知识--二进制,十进制,十六制算法
- 铅蓄电池首批规范企业名单出炉 多家上市公司入围
- C++设计模式:UML工具及常用符号
- Python单例模式的多种实现方式
- kux文件怎么打开 苹果手机如何观看kux视频