微信公众号授权(java后端)

2023-11-08

一.授权开发的流程(详情的东西请以官网为准,在此就不多说了):具体而言,网页授权流程分为四步:
1、引导用户进入授权页面同意授权,获取code
2、通过code换取网页授权access_token(与基础支持中的access_token不同)
3、如果需要,开发者可以刷新网页授权access_token,避免过期
4、通过网页授权access_token和openid获取用户基本信息(支持UnionID机制)

二.(1)公用网络请求工具类:

public class WXAuthUtil {
    public static final String APPID = "****";
    public static final String APPSECRET = "*****";
    private static final String TOKEN = "itxzz";

    public static JSONObject doGetJson(String url) throws ClientProtocolException, IOException {
        JSONObject jsonObject = null;
        DefaultHttpClient client = new DefaultHttpClient();
        HttpGet httpGet = new HttpGet(url);
        HttpResponse response =client.execute(httpGet);
        HttpEntity entity = response.getEntity();
        if (entity != null) {
            //把返回的结果转换为JSON对象
            String result = EntityUtils.toString(entity, "UTF-8");
            jsonObject = JSON.parseObject(result);
        }

        return jsonObject;
    }

}

(2).微信登录的实现类(里面包含引导action和确认登录后的回调函数):

@RestController
public class WXLoginController {
    private static final Logger logger = Logger.getLogger(WXLoginController.class);

    /**
     * 公众号微信登录授权
     *
     * @param request
     * @param response
     * @return
     * @throws ParseException
     * @parameter  
     */
    @RequestMapping(value = "/wxLogin", method = RequestMethod.GET)
    public String wxLogin(HttpServletRequest request, HttpServletResponse response) throws ParseException, IOException {
        //这个url的域名必须要进行再公众号中进行注册验证,这个地址是成功后的回调地址
        String backUrl = "http://itxzz.51vip.biz:12845/callBack";
        // 第一步:用户同意授权,获取code
        String url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + WXAuthUtil.APPID
                + "&redirect_uri=" + URLEncoder.encode(backUrl)
                + "&response_type=code"
                + "&scope=snsapi_userinfo"
                + "&state=STATE#wechat_redirect";
        //logger.info("forward重定向地址{" + url + "}");
        response.sendRedirect(url);
        return  "redirect:"+url;//必须重定向,否则不能成功
    }
    /**
     * 公众号微信登录授权回调函数
     * @param modelMap
     * @param req
     * @param resp
     * @return
     * @throws ServletException
     * @throws IOException
     */
    @RequestMapping(value = "/callBack", method = RequestMethod.GET)
    public ModelAndView callBack(ModelMap modelMap, HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  /*
   * start 获取微信用户基本信息
   */
        String code = req.getParameter("code");
        //第二步:通过code换取网页授权access_token
        String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + WXAuthUtil.APPID
                + "&secret=" + WXAuthUtil.APPSECRET
                + "&code=" + code
                + "&grant_type=authorization_code";
        JSONObject jsonObject = WXAuthUtil.doGetJson(url);
        String openid = jsonObject.getString("openid");
        String access_token = jsonObject.getString("access_token");
        String refresh_token = jsonObject.getString("refresh_token");
        //第五步验证access_token是否失效;展示都不需要
        String chickUrl = "https://api.weixin.qq.com/sns/auth?access_token=" + access_token + "&openid=" + openid;
        JSONObject chickuserInfo = WXAuthUtil.doGetJson(chickUrl);
        System.out.println("chickuserInfo"+chickuserInfo);
        if (!"0".equals(chickuserInfo.getString("errcode"))) {
            // 第三步:刷新access_token(如果需要)-----暂时没有使用,参考文档https://mp.weixin.qq.com/wiki,
            String refreshTokenUrl = "https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=" + openid + "&grant_type=refresh_token&refresh_token=" + refresh_token;
            JSONObject refreshInfo = WXAuthUtil.doGetJson(chickUrl);
            access_token = refreshInfo.getString("access_token");
        }

        // 第四步:拉取用户信息(需scope为 snsapi_userinfo)
        String infoUrl = "https://api.weixin.qq.com/sns/userinfo?access_token=" + access_token
                + "&openid=" + openid
                + "&lang=zh_CN";
        JSONObject userInfo = WXAuthUtil.doGetJson(infoUrl);
        System.out.println("JSON-----" + userInfo.toString());
        System.out.println("名字-----" + userInfo.getString("nickname"));
        System.out.println("头像-----" + userInfo.getString("headimgurl"));
      /*
       * end 获取微信用户基本信息
       */
            //获取到用户信息后就可以进行重定向,走自己的业务逻辑了。。。。。。
            //接来的逻辑就是你系统逻辑了,请自由发挥
        ModelAndView modelAndView = new ModelAndView("index.html");
        return modelAndView;
    }

}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

微信公众号授权(java后端) 的相关文章

  • 数据库恢复技术

    数据库恢复技术和并发控制技术 事务 故障 1 事物内部的故障 2 系统故障 3 介质故障 4 计算机病毒 恢复的实现技术 1 数据存储 2 登录日志文件 各故障对应的恢复策略 1 事物故障的恢复 2 系统故障的恢复 3 介质故障的恢复 检查
  • 【华为机试刷题笔记】HJ14-字符串排序

    题目描述 给定 n 个字符串 请对 n 个字符串按照字典序排列 数据范围 1 n 1000 1 leq n leq 1000 1 n 1000 字符串长度满足
  • uniapp map 请求接口之后数据不渲染问题

    uniapp map 请求接口之后数据不渲染问题 我先说我遇到的问题 我使用uniapp 的 map 组件 组件所有绑定数据都有一个初始化 之后在 mounted 中请求服务器数据 不过在 map 组件里面没有渲染请求到的数据 使用 set
  • 千兆网线做法和网线接法注意事项

    据市场调查 目前千兆网线已经很 普遍了 但很多朋友对千兆网线水晶头接法还不是很了解 在制作网线的过程中会遇到各式各样的问题 有时会造成无法打开网页 在动手之前 我们要对于网线的制作有一个正确的认识 从而制作出我们需要的网线 网线由一定距离长
  • 区块链系列-----加密算法汇总

    背景 区块链背景下 对密码学技术要求需要有很深的研究 笔者以java语言为例 搜罗各种加密算法的相关使用 github地址 https github com niyuelin1990 mycrypto 简介 搜罗各种加密算法 电子邮件传输算
  • docker使用指南

    1 安装docker 使用如下命令可以安装docker 安装成功后docker version可以查看到docker的client和server信息 sudo apt install docker docker io y 为普通用户添加权限
  • mysql json类型最大长度限制_MySQL json 数据类型

    必须要5 7以上版本才能使用 写在开头 mysql json 的功能很强大 只是用来当一个储存数据的字段 就没什么意义了 使用proto做交互的话 只要JSON 写得好 用proro Unmarshal 就可以很方便的转换类型 可以精简很多
  • github 项目的基本结构以及git的使用方法

    github 项目的基本结构以及git的使用方法 介绍 根据README md 一般都在下面 阅读规则 每个团队根据队伍内部技术人员配置选择课题 课题在docs 目录下 对于docs 下非本组选择的课题文件不要进行任意修改 docs 下课题
  • 转onnx包问题

    pip install onnx 1 7 0 i https pypi tuna tsinghua edu cn simple 其实这一步已经可以了 pip install coremltools YOLOv5的pytorch模型文件转换为
  • redis的事务和watch机制

    这里写目录标题 第一章 redis事务和watch机制 1 1 redis事务 事务的三大命令 语法 开启事务 multi 语法 执行事务 exec 语法 取消事务 discard 1 2 redis事务的错误和回滚的情况 1 3 watc
  • Es6数组新增方法与字符串新增方法和新增数据类型

    1 数组新增方法 map方法 将数组中每一个元素依次取出 进行遍历 返回一个新的数组 let movies id 1 name 大话西游 author xxxx imgUrl http xxx douban com 1 jpg id 2 n
  • AST-解混淆 赋值语句嵌套三目表达式的优化

    处理前 0x4ae6ff 0x41bc28 4957228979 650037875 处理后 0x41bc28 0x4ae6ff 4957228979 0x4ae6ff 650037875 通用插件编写规则 const TransCondi
  • 2018年LeetCode高频算法面试题刷题笔记——搜索二维矩阵 II(开始之前)

    1 解答之前的碎碎念 这个题一开始我想的很简单 想着是个二维的二分查找 然后提交代码 果不其然出错了 因为并不能保证第i 1行的每个元素都大于第i行 不过想到了递归 也算是有点进步 虽然最后用递归写了一个没有通过 但是自己在vs里测试的没问
  • 论文快速回顾笔记 —— Supressing Uncertainties for Large-Scale FER

    前言 这是之前因为做项目而读过的一篇CVPR2020论文 有些细节还是挺有意思的 最近回顾一下 顺便做下笔记 以供后续查阅 Paper Suppressing Uncertainties for Large Scale Facial Exp
  • Uni-App开发BLE低功耗蓝牙流程

    Uni App开发BLE低功耗蓝牙步骤 示例文件已上传gitee https gitee com yan rookie uniapp bluetooth git 如果对你有记得点个赞哦 注 微信小程序同样适用 只需吧前缀uni 修改为wx
  • 两个链式存储的一元多项式乘法运算算法

    include
  • 面试官:说说Node中的EventEmitter? 如何实现一个EventEmitter?

    一 是什么 我们了解到 Node采用了事件驱动机制 而EventEmitter就是Node实现事件驱动的基础 在EventEmitter的基础上 Node几乎所有的模块都继承了这个类 这些模块拥有了自己的事件 可以绑定 触发监听器 实现了异
  • 电赛知识补充——电机篇

    在准备电赛的时候 我通常会发现手边有很多格式各样的电机 问了很多人都没能和我说明白这些个电机是什么 有什么特性 怎么驱动 所以我打算学习一下电机的分类 本文主要记录了在电赛中所需要的电机相关知识 包括电机的种类 特点 驱动方式等等 今后不定
  • windows7 64位机上安装配置CUDA 9.1+cudnn7操作步骤

    版权声明 本文为CSDN博主 陌筱北 的原创文章 遵循 CC 4 0 BY SA 版权协议 转载请附上原文出处链接及本声明 原文链接 https blog csdn net moxiaobeiMM article details 84529

随机推荐

  • vue项目整合codemirror代码编辑器

    需求 需要在web页面中整合一个sql的编辑器 选择了codemirror 以下被我封装成了组件 项目里改一改就可以直接用 codemirror支持很多语言 但我只需要使用sql编辑器 所以做了精简 安装使用步骤 1 安装 npm i co
  • 【经典】MySQL绿色安装

    第一步 下载Mysql 官网下载地址 https dev mysql com downloads mysql 1 鼠标滑下来 找到Other Download中的 Windows x86 64 bit ZIP Archive 点击其右边的D
  • 真实图形学(光照模型)

    一 颜色模型 真实感图形学 简单地说 就是希望用计算机生成像照相机拍的照片一样逼真的图形图像 要实现这个目标 需要三部曲 第一步 建立三维场景 建模 第二步 消隐解决物体深度的显示及确定物体之内的相互关系 第三步 在解决了消隐问题之后 在可
  • 机器学习模型常用评价指标(Accuracy, Precision, Recall、F1-score、MSE、RMSE、MAE、R方)

    前言 众所周知 机器学习分类模型常用评价指标有Accuracy Precision Recall和F1 score 而回归模型最常用指标有MAE和RMSE 但是我们真正了解这些评价指标的意义吗 在具体场景 如不均衡多分类 中到底应该以哪种指
  • 使用RocketMQ如何保证消息顺序

    RocketMQ 的顺序问题分为 全局有序和局部有序 全局有序 整个 RocketMQ 系统的所有消息严格按照队列先入先出顺序进行消费 局部有序 只保证一部分关键消息的消费顺序 在通常的业务场景中 我们只需要能够保证局部有序就可以了 电商订
  • Unity 接入Facebook。登录、分享、邀请、好友列表等功能。详细记录

    本文现已搬迁至 https blog csdn net NRatel article details 84241100 此博客废弃 我的新CSDN账号 https blog csdn net NRatel
  • 微云不限速下载

    既然将百度网盘有不限速的下载 那么腾讯也有 现在分享给大家 这里以PC端为例 准备工具 微云客户端 QQ 将文件保存到自己的微云上 打开QQ随便找个好友或者给自己发消息 直接发到我的设备也可以 然后鼠标放到文件夹的图标 选择微云文件 然后直
  • element-ui的表格超出部分显示省略号

    前言 element ui的表格超出部分显示省略号 这里实际是官方有提供的属性 show overflow tooltip 使用 注意在哪一行需要显示省略号 就给那个表头加 官方api Table Attributes 参数 说明 类型 可
  • 天梯赛习题集 L 1 - 016 查验身份证 (15 分)

    一个合法的身份证号码由17位地区 日期编号和顺序编号加1位校验码组成 校验码的计算规则如下 首先对前17位数字加权求和 权重分配为 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 然后将计算的和对11取模得到值Z 最
  • Uabntu 17.04+python2.7 +anaconda2

    Uabntu 17 04 python2 7 anaconda2 python 2 7 安裝 安裝外部庫 網絡問題 安裝 pip apt get Anacoda2 使用 電腦白癡的ubantu python之路 python 2 7 安裝
  • 在linux里rm 命令怎么删除多个文件

    dilantaya 说 请问在linux里rm 命令怎么删除多个文件 比如 大量的 2010 10 xx log 和 2010 09 xx log 文件 用rm命令怎么一起给删除了 谢谢 chenyx 说 用 代替xx就能删除了 例如 rm
  • cmake使用TOOLCHAIN进行交叉编译

    cmake DCMAKE TOOLCHAIN FILE toolchain RK3399 cmake CMAKE INSTALL PREFIX usr local rk3399mpp 创建toolchain RK3399 cmake文件 c
  • View事件分发相关面试题

    1 View事件分发机制 对屏幕的点击 滑动 抬起等一系的动作都是由一个一个MotionEvent对象组成的 根据不同动作 主要有以下三种事件类型 ACTION DOWN 手指刚接触屏幕 按下去的那一瞬间产生该事件 ACTION MOVE
  • STL 中排序相关算法总结

    sort 头文件 sort 算法定义在头文件 include 中 算法作用 sort 算法是基于快速排序实现的 默认对指定范围内的元素进行升序排列 使用条件 使用 sort 进行排序到容器必须支持随机访问 默认使用 lt 运算符进行比较 也
  • CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)的内部网络结构有什么区别?

    CNN 卷积神经网络 RNN 循环神经网络 DNN 深度神经网络 的内部网络结构有什么区别 CNN 卷积神经网络 RNN 循环神经网络 DNN 深度神经网络 的内部网络结构有什么区别 以及他们的主要用途是什么 只知道CNN是局部感受和参数共
  • ElasticSearch 8.0脚本评分查询

    使用脚本来提供返回的文档的自定义评分 script score查询非常有用 例如 评分函数成本比较高且我们仅仅需要计算一组过滤后的文档的评分 请求的样例 下面的script score查询设置每个返回的文档的评分等于my int字段值除以1
  • 机器视觉介绍

    机 器 视 觉 介 绍 机器视觉介绍 机器视觉介绍 机器视觉检测系统任务 尺寸测量 条码识别 外观测量
  • 【图文教程】若依前后端分离版本-菜单怎么设置

    在使用若依前后端分离版本作为基础架构的时候 需要新建菜单怎么操作 本文凯哥将详细讲解怎么添加 1 登录若依系统后 系统管理 gt gt 菜单 先新建一个一级菜单 可以模仿 系统管理 菜单来创建 系统菜单 我们自己创建的 淘宝客 菜单如下 这
  • 存够20万才敢结婚!算算你的工资够了吗?

    前程无忧2015年白领婚恋成本调查 报告 乔治 克鲁尼结婚了 本尼迪克特 康伯巴奇结婚了 福山雅治结婚了 堀北真希结婚了 恐婚的最后还是踏入了婚姻殿堂 永远的偶像派也闪婚了 真是应验了 凡是有钱的单身汉总想娶位太太 这已经成了一条举世公认的
  • 微信公众号授权(java后端)

    一 授权开发的流程 详情的东西请以官网为准 在此就不多说了 具体而言 网页授权流程分为四步 1 引导用户进入授权页面同意授权 获取code 2 通过code换取网页授权access token 与基础支持中的access token不同 3