微信网页授权步骤说明

总览

  1. 引导用户进入授权页面同意授权,获取code
  2. 通过code换取网页授权access_token(与基础支持中的access_token不同)
  3. 如果需要,开发者可以刷新网页授权access_token,避免过期(一般不需要)
  4. 通过网页授权access_token和openid获取用户基本信息(支持UnionID机制)

获取code

解释:让用户跳转到拼接后的指定地址,进行授权获取code,然后重定向到redirect_uri,重定向后的地址带有code和state参数

拼接地址:https://open.weixin.qq.com/connect/oauth2/authorize?appid=appid&redirect_uri=redirect_uri&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect,其中appid和redirect_uri需要替换,且redirect_uri需要encodeURI处理,state为可选值用于用户自定义传参。

通过code换取access_token和用户信息

这里只写Java示例,且使用weixin-java-mp依赖

引入以下依赖

<dependency><groupId>com.github.binarywang</groupId><artifactId>weixin-java-mp</artifactId><version>4.5.0</version>
</dependency>

在application.yml中添加如下参数

# 自定义微信相关配置信息
wx:mp:# 微信公众号的appidappId: wxajhlksfnjls777777# 信公众号的app secretsecret: sds56dg4fd5sd54s5555555

创建WxMpProperties如下

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Component
@Data
@ConfigurationProperties(prefix = "wx.mp")
public class WxMpProperties {/*** 设置微信公众号的appid*/private String appId;/*** 设置微信公众号的app secret*/private String secret;
}

创建WxMpConfiguration如下

import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
import me.chanjar.weixin.mp.config.WxMpConfigStorage;
import me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class WxMpConfiguration {@Autowiredprivate WxMpProperties wxMpProperties;/*** 微信客户端配置存储*/@Beanpublic WxMpConfigStorage wxMpConfigStorage() {WxMpDefaultConfigImpl configStorage = new WxMpDefaultConfigImpl();// 设置微信公众号appIdconfigStorage.setAppId(wxMpProperties.getAppId());// 设置微信公众号appSecretconfigStorage.setSecret(wxMpProperties.getSecret());return configStorage;}/*** WxMpService多个实现类 声明一个实例*/@Beanpublic WxMpService wxMpService() {WxMpService wxMpService = new WxMpServiceImpl();wxMpService.setWxMpConfigStorage(wxMpConfigStorage());return wxMpService;}
}

然后在Controller中引入WxMpService

@RestController
public class LoginController {@Autowiredprivate WxMpService wxMpService;@PostMapping("/wx/login")public SysAjaxResult login(@RequestBody Map<String, String> params) {String code = MapUtils.getString(params, "code");if (StringUtils.isBlank(code)) {return SysAjaxResult.error("code不能为空");}try {// 获取accessToken,获取用户信息(据官方文档,下面两个接口调用频率为每分钟5万次)WxOAuth2AccessToken accessToken = wxMpService.getOAuth2Service().getAccessToken(code);WxOAuth2UserInfo userInfo = wxMpService.getOAuth2Service().getUserInfo(accessToken, null);// 通过openid校验有没有当前用户,没有则新增String openid = userInfo.getOpenid();return AjaxResult.success();} catch (WxErrorException e) {e.printStackTrace();}return AjaxResult.error();}
}

时效

接口名频率限制
通过 code 换取 access_token5 万/分钟
获取用户基本信息5 万/分钟
刷新 access_token10 万/分钟

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/221558.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高翔《自动驾驶与机器人中的SLAM技术》第九、十章载入静态地图完成点云匹配重定位

修改mapping.yaml文件中bag_path&#xff1a; 完成之后会产生一系列的点云文件以及Keyframe.txt文件&#xff1a; ./bin/run_frontend --config_yaml ./config/mapping 生成拼接的点云地图map.pcd文件 &#xff1a; ./bin/dump_map --pose_sourcelidar 。、 完成第一次优…

低代码开发:属于“美味膳食”还是“垃圾食品”

目录 引言低代码是什么&#xff1f;低代码的优点使用挑战未来展望最后 引言 随着数字化转型的迅猛发展&#xff0c;低代码开发平台逐渐成为了企业和开发者的关注焦点&#xff0c;尤其是前两年低代码的迅速火爆&#xff0c;来势汹汹&#xff0c;号称要让大部分程序员下岗的功能…

html2canvas库——前端实现基于DOM的截图

官网&#xff1a; html2canvas - Screenshots with JavaScript Github: https://github.com/niklasvh/html2canvas 资料&#xff1a; html2canvas使用教程-CSDN博客&#xff1a;https://blog.csdn.net/weixin_45917647/article/details/126250424 html2canvas实现浏览器…

双指针算法(一)

目录 移动零 复写零 快乐数 盛水最多的容器 双指针与单调性结合 有效三角形的个数 查找总价格为目标值的两个商品 两数之和 Ⅱ - 输入有序数组 双指针算法是通过定义两个指针不断单向移动来解决问题的一种算法。但双指针算法&#xff0c;是一个抽象的思想概念&#xf…

dockerfile,Docker镜像的创建

dockerfile&#xff1a;创建镜像&#xff0c;创建自定义的镜像。包括配置文件&#xff0c;挂载点&#xff0c;对外暴露的端口。设置环境变量。 docker的创建镜像的方式&#xff1a; 1、基于已有镜像进行创建。根据官方提供的镜像源&#xff0c;创建镜像&#xff0c;然后拉起容…

leetcode算法题:岛屿数量

leetcode算法题200 链接&#xff1a;https://leetcode.cn/problems/number-of-islands 题目 你一个由 ‘1’&#xff08;陆地&#xff09;和 ‘0’&#xff08;水&#xff09;组成的的二维网格&#xff0c;请你计算网格中岛屿的数量。 岛屿总是被水包围&#xff0c;并且每座岛…

Linux主机自动注册NPS客户端(脚本化)

参考官方对API使用方法的定义&#xff1a;https://ehang-io.github.io/nps/#/ 1、首先必须要在配置文件中开启 auth_key 并配置一个合适的密钥 2、修改脚本中的可变量参数&#xff0c;以适配自己的环境 #!/bin/bash # 脚本使用说明&#xff1a;# 脚本名称&#xff1a;npc_cr…

+0和不+0的性能差异

前几日&#xff0c;有群友转发了某位技术大佬的weibo。并在群里询问如下两个函数哪个执行的速度比较快&#xff08;weibo内容&#xff09;。 func g(n int, ch chan<- int) {r : 0for i : 0; i < n; i {r i}ch <- r 0 }func f(n int, ch chan<- int) {r : 0for …

基于Microchip 光伏逆变器方案

小编杂谈新能源已经完成了至少5期的博文了&#xff0c;Boss告诉小编&#xff0c;如果还不介绍我们的产品和方案&#xff0c;黄花菜都凉了&#xff0c;所以小编这期博文就重点介绍一下Microchip在储能上的产品介绍&#xff0c;重点聊聊Microchip储能中使用的光伏逆变器的解决方案…

期末数组函数加强练习

前言&#xff1a;由于时间问题&#xff0c;部分题解取自网友&#xff0c;但都是做过的好题。 对于有些用c实现的题目&#xff0c;可以转化成c实现&#xff0c;cin看成c的读入&#xff0c;可以用scanf&#xff0c;输出cout看作printf&#xff0c;endl即换行符 开胃菜&#xff…

PHP和go搭建分布式

分布式系统是指由多台计算机组成的网络系统&#xff0c;这些计算机通过网络进行通信和协作&#xff0c;共同完成一个任务。在分布式系统中&#xff0c;通信和数据共享是非常重要的&#xff0c;因此需要使用一些特定的技术和工具进行构建和管理。 PHP和Go都是非常流行的编程语言…

ES6原生音乐播放器(有接口)

视频展示 ES6音乐播放器 项目介绍 GutHub地址&#xff1a;GitHub - baozixiangqianchong/ES6_MusicPlayer: 音乐播放器 ES6_MusicPlayer 是基于JavaScriptES6Ajax等通过原生构建的项目。能够充分锻炼JS能力。 本项目有主页、详情页、歌单页面三部分组成 ├── assets&…

跨域的解决方式(java后端)

文章目录 一、跨域介绍1、什么是跨域2、为什么会产生跨域 二、简单请求和非简单请求1、简单请求2、非简单请求2.1、预检请求2.2、预检请求的回应2.3、浏览器的正常请求和回应 三、CrossOrigin注解1、CrossOrigin源码2、CorsRegistry方式3、CorsFilter过滤器4、自定义过滤器 一、…

Knowledge Distillation from A Stronger Teacher(NeurIPS 2022)论文解读

paper&#xff1a;Knowledge Distillation from A Stronger Teacher official implementation&#xff1a;https://github.com/hunto/dist_kd 前言 知识蒸馏通过将教师的知识传递给学生来增强学生模型的性能&#xff0c;我们自然会想到&#xff0c;是否教师的性能越强&…

java面试题-String、StringBuffer、StringBuilder区别

远离八股文&#xff0c;面试大白话&#xff0c;通俗且易懂 看完后试着用自己的话复述出来。有问题请指出&#xff0c;有需要帮助理解的或者遇到的真实面试题不知道怎么总结的也请评论中写出来&#xff0c;大家一起解决。 java面试题汇总-目录-持续更新中 面试官&#xff1a;Str…

【操作系统导论】内存篇——分页

引入 采用 「分段」 的方式&#xff0c;将空间切成 不同长度的分片&#xff0c;会出现 碎片化 问题&#xff0c;随着时间推移&#xff0c;分配内存会越来越困难。 因此&#xff0c;值得考虑「分页」的方法&#xff1a; 将空间分割成 固定长度的分片 &#xff1b; 将物理内存…

python列表的循环遍历

数据容器&#xff1a;一个可以存储多个元素的Python数据类型 有哪些数据容器&#xff1a;list&#xff08;列表&#xff09;&#xff0c;tuple&#xff08;元组&#xff09;&#xff0c;str&#xff08;字符串&#xff09;&#xff0c;set&#xff08;集合&#xff09;&#x…

第三方电脑小爱同学用快捷键唤醒

第三方电脑安装小爱同学-CSDN博客 请结合之前安装小爱同学的教程安装过程请提前取消windows更新 安装完成之后登录账号即可使用 Ahk2.0 下载地址&#xff1a;https://www.autohotkey.com/download/ahk-v2.zip 打开链接即可自动下载&#xff0c;下载后解压出来点击install.cmd安…

微信公众服务号升级订阅号

服务号和订阅号有什么区别&#xff1f;服务号转为订阅号有哪些作用&#xff1f;首先我们要知道服务号和订阅号有什么区别。服务号侧重于对用户进行服务&#xff0c;每月可推送4次&#xff0c;每次最多8篇文章&#xff0c;发送的消息直接显示在好友列表中。订阅号更侧重于信息传…

java飞翔的鸟游戏

A.准备工作 Bird类 Column类 BirdGame类 Ground类 B.中间过程 准备工作&#xff1a; 安装Java开发环境&#xff08;JDK&#xff09;。选择一个集成开发环境&#xff08;IDE&#xff09;&#xff0c;如Eclipse、IntelliJ IDEA或NetBeans。 创建项目&#xff1a; 在IDE中创建一个…