H5微信授权登入(后台Java )_じ小奋斗_的博客-程序员ITS301

最近做一个小工具,通过公众号菜单打开。页面使用H5来写的。需要用户通过菜单打开小工具的时候要求用户授权微信信息,进行登入。

接下来说说大致步骤吧,其实微信公众号的开发文档介绍得很详细。
微信公众号开发文档链接:
https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html

具体步骤:

1 第一步:用户同意授权,获取code (前端)

2 第二步:通过code换取网页授权access_token (后台)

3 第三步:刷新access_token(如果需要) (后台)

4 第四步:拉取用户信息(需scope为 snsapi_userinfo)(后台)

5 附:检验授权凭证(access_token)是否有效 (后台)

其实就是获取在前端用 window.location.href 打开微信URL页面 url中包含了回调页面的参数。 如果用户同意授权,页面将跳转至 redirect_uri/?code=CODE&state=STATE。这样我们就得到了 code。前端的任务就完成了。我们可以利用这个code到后台换取accessToken和通过accessToken拉取用户信息。

跳转回调redirect_uri,应当使用https链接来确保授权code的安全性。(域名必须在公众号后台配置)
地址: 设置与管理->开发->接口权限->网页服务->网页授权->网页授权获取用户基本信息

部分代码:
1,获取code,并提示用户授权

window.location.href = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${
      appId}&redirect_uri=${
      url}&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect`

2,通过code换取网页授权access_token
这一步是在后台进行


```java
   
  //公众号appid
    public static final String APPID = "APPID ";
    //公众号appsecert
    public static final String APPSECRET = "APPSECRET ";

请求以下链接获取access_token: https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

String url = GET_ACCESS_TOKEN_URL.replace("CODE", code).replace("APPID", APPID).replace("SECRET", APPSECRET);
JSONObject jsonObject = httpRequest(url, "GET", "");

正常返回时

{
  "access_token":"ACCESS_TOKEN",
  "expires_in":7200,
  "refresh_token":"REFRESH_TOKEN",
  "openid":"OPENID",
  "scope":"SCOPE" 
}

请求有误时

{"errcode":40029,"errmsg":"invalid code"}

3,获取用户信息

请求地址
http:GET(请使用https协议) https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

String userInfoUrl = GET_USER_INFO_URL.replace("ACCESS_TOKEN", access_token).replace("OPENID", openid);
JSONObject infoResult = httpRequest(userInfoUrl, "GET", "");

正常返回

{   
  "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"
}

错误返回

{"errcode":40003,"errmsg":" invalid openid "}

刷新和校验验证码我就不贴代码了。是同上的逻辑。
4,刷新access_token(如果需要) (后台)
获取第二步的refresh_token后,请求以下链接获取access_token: https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN

5,检验授权凭证(access_token)是否有效 (后台)
http:GET(请使用https协议) https://api.weixin.qq.com/sns/auth?access_token=ACCESS_TOKEN&openid=OPENID

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/myloverxx/article/details/118966595

智能推荐

机器人的动力学和动力学联系_通过机器学习了解幸福动力学(第2部分)_weixin_26746401的博客-程序员ITS301

机器人的动力学和动力学联系Happiness is something we all aspire to, yet its key factors are still unclear. 幸福是我们所有人都渴望的东西,但其关键因素仍不清楚。 Some would argue that wealth is the most important condition as it determines o...

python统计txt文档中的词频并排序----中文文本_阿斯顿菊花奶茶的博客-程序员ITS301_python文本频次排序

python统计txt文档中的词频并排序----中文文本import operatordef gettxt(): txt = open(r'D:\\学习类\\数字人文小组\\2021.4月工作(古文字分类,实用新型,兵器简整理)\\去掉简号数据.txt',encoding='utf-8').read() return txtwords0=gettxt()words1=words0.strip()words= words1.split()counts={}sumcount = 0

android中ListView performItemClick()方法参数说明_l92115的博客-程序员ITS301_performitemclick

ListView 的performItemClick()方法说明今天用到ListView 的performItemClick()方法,下面讲一下个人对这个方法参数的理解首先,这个方法是为了模拟用户点击而存在的,我们看一下这个方法performItemClick(View view, int position, long id),有三个参数view、position,id

贝叶斯机器学习_Er8cJiang的博客-程序员ITS301_贝叶斯机

贝叶斯机器学习作者Zygmunt Z. 2016-03-28发表于博文你知道贝叶斯定理是如何涉及到机器学习的?对于难题如何组合在一起是非常难掌握的,我们知道这花了一段时间.本文是当时发展的介绍. 虽然我们对此事有一定掌握,但是我不是专家,因此下面可能会包含不准确甚至是错误的地方.请在评论或是私信随意指出.贝叶斯学派和频率学派在本质上,贝叶斯意味着概率.具体的术语存在是由于有两种方法获取概率.贝叶

struts2.3+spring3.2+hibernate4.2例子_iaiti的博客-程序员ITS301

有些教程比较老,可是版本更新不等人,基于马士兵老师小例子,自己重新引用了新的包,调试确实有点烦人,但是通过英文文档,很容易解决问题。     给个资源,struts2.3+spring3.2+hibernate4.2整合包:http://download.csdn.net/detail/iaiti/6234853   Hibernate4没了HibernateTemplat

随便推点

Delphi – NativeXML,SuperObject,GDI+下载_weixin_30954607的博客-程序员ITS301

最近要用到NativeXML,于是到网上去找了下,发现3.30beta都出来了,下载下来看看,支持XE,顺便下了SuperObject也支持XE的. 在这里传上来,供大家下载吧. NativeXML 3.30beta SuperObject(JSON解析) GDI+ api 希望大家喜欢,解压后,library path 添加到你解压的目录 就可以直接引用了.转载于:h...

微信小程序+云开发项目实战:商品类小程序(化妆品门店)_发呆o的博客-程序员ITS301_微信小程序开发与实战“美妆商城”

化妆品门店目录云开发简介页面之间导图导航(首页)导航( 综合)导航(购物车)导航(个人中心)管理员页面如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入目录本文章不合适完全新手掌握,适合略懂云...

搭建zabbix监控_国民偶像的博客-程序员ITS301

Linux系统版本:CentOS 7.41、安装前需要先关闭selinux和firewall.1.1[[email protected] ~]# vi /etc/selinux/config将SELINUX=enforcing改为SELINUX=disabled设置后需要重启才能生效[[email protected] ~]# setenforce 0 #临时关闭[[email protected] ~]#...

sql server trigger_upingking的博客-程序员ITS301

ALTER trigger [UP_R5EVENTS_ST]on [dbo].[R5EVENTS]for UPDATE asdeclare @stat varchar(10);declare @id varchar(100);IF UPDATE (EVT_STATUS) begin    select @stat=EVT_STATUS,@id=idfield from [R5EVENTS] u

DDMS files not found:hprof-conv.exe的解决办法_zJianFlys的博客-程序员ITS301

DDMS files not found: *\sdk\platform-tools\hprof-conv.exe[2014-07-30 17:09:11 - QtActivity] The connection to adb is down, and a severe error has occured.[2014-07-30 17:09:11 - QtActivity]

sql server中字符串类型的日期如何比较大小_sollion的博客-程序员ITS301

如果在数据库(sql)中将保存日期的字段的数据类型设置为varchar,而你又需要对这个日期和另外一个日期进行比较,那么该怎么办呢?1. 第一种方法很容易想到,就是纯粹地利用字符串来比较大小,比如有一个字段为adddate,其数据类型为varchar,要比较这个日期是不是大于某个日期,比如"2006-12-23",那么可以直接写:where adddate>2006-12-23,这中方法很直观

推荐文章

热门文章

相关标签