Java实现基于微信测试公众号授权扫码登录自建项目

一、参考微信公众号开发文档 网页授权 | 微信开放文档
大概可参考案例微信公众平台-测试号网页授权-获取openid方法_微信开放平台测试号-CSDN博客
二、微信公众号端开发
第一步:用户同意授权,获取code

在确保微信公众账号拥有授权作用域(scope参数)的权限的前提下(已认证服务号,默认拥有scope参数中的snsapi_base和snsapi_userinfo 权限),引导关注者打开如下页面:

scope为snsapi_userinfo:

复制代码
https://open.weixin.qq.com/connect/oauth2/authorize?appid=微信测试号APPID&redirect_uri=外网可访问的自建项目接口&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect

scope为snsapi_base:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=微信测试号APPID\&redirect_uri=外网可访问的自建项目接口\&response_type=code\&scope=snsapi_base\&state=123#wechat_redirect

第二步:通过code换取网页授权access_token

首先请注意,这里通过code换取的是一个特殊的网页授权access_token,与基础支持中的access_token(该access_token用于调用其他接口)不同。公众号可通过下述接口来获取网页授权access_token。如果网页授权的作用域为snsapi_base,则本步骤中获取到网页授权access_token的同时,也获取到了openid,snsapi_base式的网页授权流程即到此为止。

尤其注意:由于公众号的secret和获取到的access_token安全级别都非常高,必须只保存在服务器,不允许传给客户端。后续刷新access_token、通过access_token获取用户信息等步骤,也必须从服务器发起。

获取code后,请求以下链接获取access_token:
https://api.weixin.qq.com/sns/oauth2/access_token?appid=微信测试号APPID\&secret=微信测试号SECRET\&code=第一步链接获取到的code值\&grant_type=authorization_code

第二步:正确时返回的JSON数据包如下:

复制代码
{
  "access_token":"ACCESS_TOKEN",
  "expires_in":7200,
  "refresh_token":"REFRESH_TOKEN",
  "openid":"OPENID",
  "scope":"SCOPE",
  "is_snapshotuser": 1,
  "unionid": "UNIONID"
}
第三步:刷新access_token,此部分每次扫码都进行获取所以不需要,如果觉得麻烦也可以将access_token放入redis缓存定义过期时间内进行获取。
第四步:拉取用户信息(需scope为 snsapi_userinfo)

如果网页授权作用域为snsapi_userinfo,则此时开发者可以通过access_token和openid拉取用户信息了。

请求方法

https://api.weixin.qq.com/sns/userinfo?access_token=第三步获取到的access_token\&openid=测试公众号的OPENID\&lang=zh_CN

第四步:正确时返回的JSON数据包如下:

复制代码
{   
  "openid": "OPENID",
  "nickname": NICKNAME,
  "sex": 1,
  "province":"PROVINCE",
  "city":"CITY",
  "country":"COUNTRY",
  "headimgurl":"https://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46",
  "privilege":[ "PRIVILEGE1" "PRIVILEGE2"     ],
  "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
}

三、自建项目:前端二维码生成,后端接口进行登录验证授权

相关推荐
码上小翔哥12 分钟前
Spring Boot Redis 缓存序列化踩坑记:GenericJackson2JsonRedisSerializer 的数组反序列化陷阱
java·redis
pq21712 分钟前
LambdaMetafactory(fastjson2使用的黑科技)
java
SamDeepThinking15 分钟前
你认为从0-1开发一个项目最难的地方是什么?
java·后端·架构
Devin~Y19 分钟前
大厂Java面试实战:Spring Boot/Cloud、Redis/Kafka、JVM调优与Spring AI RAG(内容社区UGC+AIGC客服场景)
java·jvm·spring boot·redis·spring cloud·kafka·mybatis
青山师29 分钟前
CompletableFuture深度解析:异步编程范式与源码实现
java·单例模式·面试·性能优化·并发编程
AI人工智能+电脑小能手29 分钟前
【大白话说Java面试题 第42题】【JVM篇】第2题:JVM内存模型有哪些组成部分?
java·开发语言·jvm·面试
AI人工智能+电脑小能手36 分钟前
【大白话说Java面试题 第43题】【JVM篇】第3题:GC分为哪两种?Young GC 和 Full GC有什么区别?
java·开发语言·jvm·后端·面试
Carino_U39 分钟前
并发编程之CPU缓存架构&Disruptor
java·缓存·架构
小雅痞1 小时前
[Java][Leetcode middle] 54. 螺旋矩阵
java·leetcode·矩阵
ooseabiscuit1 小时前
Laravel6.x新特性全解析
java·开发语言·后端·mysql·spring