第一步:(前期设置)登录微信公众号接口测试平台设置信息

登录微信公众号接口测试平台
登录成功后可以看到测试用的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实现微信授权登录(详解)相关推荐

  1. Java对接微信公众平台详解

    Java对接微信公众平台详解 1.公众平台概述 1.1 公众平台概述 1.2 入门指引 2.对接流程 2.1 接入概述 2.2 填写服务器配置 2.3 接口域名说明 2.4 获取Access toke ...

  2. Java版本微信授权登录(升级版)

    前面写了一遍文章<Java版本微信授权登录(测试版)>,可以当做入门的基础文章,这里继续做一点深入,主要解决的是,如何在本地开发中微信授权以后跳转到本地启动的项目中. 我们知道了微信公众平 ...

  3. Java版本微信授权登录(测试版)

    这篇文章是对微信授权登录的一个测试版本,并不能直接在生产上使用,对于在生产上正式使用将会在下一篇中描述. 一,首先需要以下两个数据 appID和appsecret 如何获取这两个数据,请先登录微信公众 ...

  4. PHP+laravel 微信开发工具授权登录详解

    微信小程序登录流程时序 废话不多说,直接上代码: html 代码 <button open-type="getUserInfo" bindtap="login&qu ...

  5. 微信小程序授权登录详解

    文章目录 流程 wx.login() auth.code2Session 实战 前端代码 后端代码    流程 说明 调用 wx.login() 获取 临时登录凭证code ,并回传到开发者服务器. ...

  6. Java实现GitHub第三方登录详解

    GitHub第三方登录实现效果如下: 实现流程如下: 1.注册一个GitHub账号 2.注册一个授权的网站保存一个你的Client ID和Client Secret 3.准备一个页面,有一个链接跳转到 ...

  7. 微信h5登录php,vue实现微信授权登录步骤详解

    这次给大家带来vue实现微信授权登录步骤详解,vue实现微信授权登录的注意事项有哪些,下面就是实战案例,一起来看一下. 背景 vue前后端分离开发微信授权 场景 app将商品分享到微信朋友圈或者分享给 ...

  8. java如何实现微信授权登录

    要在 Java 中实现微信授权登录,需要按照以下步骤操作: 在微信开放平台(https://open.weixin.qq.com/)申请微信登录的第三方平台资格,并获取相应的 AppID 和 AppS ...

  9. 微信授权登录(java实现)

    微信公众平台开发文档 微信授权登录获取用户信息有2种方式: 1.静默授权获取用户信息. 2.非静默授权弹出授权界面,用户确认之后获取用户信息(这种方法能够获取到更多信息). 开发前准备: 1.获取到A ...

  10. 硅谷课堂 12_公众号消息和微信授权登录

    硅谷课堂第十二天-公众号消息和微信授权登录 文章目录 硅谷课堂第十二天-公众号消息和微信授权登录 一.公众号普通消息 1.实现目标 2.消息接入 2.1.公众号服务器配置 2.2.验证来自微信服务器消 ...

最新文章

  1. 防抖 节流_关于防抖和节流
  2. 10分钟学会如何使用Shiro
  3. MongoDB 教程五: MongoDB固定集合和性能优化
  4. php安装redis扩展模块,[教程]为PHP安装phpRedis扩展模块
  5. Oracle GoldenGate理论
  6. 这就是为什么IT人没有女朋友的原因!!
  7. iOS学习-UITextField设置placeholder的颜色
  8. 详解用Navicat工具将Excel中的数据导入Mysql中
  9. FishC笔记—15 讲 字符串:格式化
  10. oppo9s刷机教程_OPPO R9s R9sk刷机教程 OPPO R9s R9sk卡刷升级教程
  11. Matlab学习手记——输出到MathType公式编辑器
  12. 写于即将23岁的前端转正前夕
  13. echarts折线图 - 区域图 -如何设置填充色
  14. android 聊天气泡背景图片,聊天气泡背景图片拉伸设置
  15. (转)东方美人吉他谱及演奏(中川砂仁)
  16. 泰坦尼克号 数据重构 + 可视化
  17. 斐讯N1的OpenWrt设置(含N1当主路由兼AP模式)
  18. Java实现21点多人游戏(期末作业)
  19. 玩具or工具?普元信息低代码平台给出了说法
  20. java练习题之华氏摄氏度与摄氏度的转化。

热门文章

  1. win10计算器rsh_Win10系统有哪些计算器快捷键
  2. 20135202闫佳歆——家庭作业汇总
  3. Win10 + vs2017 编译并配置tesseract-5.0.0-alpha 遇到的问题
  4. Equitrac智能打印管理软件中文版
  5. Python读取视频方法
  6. 计算机 二进制 知识,[转载]计算机知识--二进制,十进制,十六制算法
  7. 铅蓄电池首批规范企业名单出炉 多家上市公司入围
  8. C++设计模式:UML工具及常用符号
  9. Python单例模式的多种实现方式
  10. kux文件怎么打开 苹果手机如何观看kux视频