如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑。

简要说明:

本文使用java web实现微信网页授权,整个授权过程是基于Oauth2.0授权码模式,这里不再赘述Oauth2.0。授权过程分为4步:
页面重定向至授权页面,获取code

  • 用户授权后,页面带着code重定向至client指定地址,使用code换取accessToken

  • 刷新accessToken(过期需要)

  • 使用accessToken获取用户信息(通常openId,nickname,headimgurl)

开发前准备工作:

  • 测试公众号,相当于你的开发主体在微信授权中心登记。需要appid,appsecret等信息

  • 内网穿透工具,需要和微信进行交互,本文使用的是NATAPP

  • web应用,本文使用springboot2+thymeleaf+joddhttp

代码片段:

1.开发跳转微信授权接口,直接将页面重定向,注意参数REDIRECTP_URI需要URLEncode。

String AUTHORIZE_URL = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=%s&redirect_uri=%s&response_type=%s&scope=%s&state=%s#wechat_redirect";
@GetMapping(value = "login")
public void wx(HttpServletRequest request, HttpServletResponse response) throws IOException {//1:重定向到授权页面: 引导用户进入授权页面同意授权,获取codeString codeUrl = String.format(AUTHORIZE_URL, APPID, URLEncoder.encode(REDIRECT_URI, "utf-8"), RESPONSE_TYPE, SCOPE, STATE);response.sendRedirect(codeUrl);
}

2.用户授权后,微信会在上一步的REDIRECTP_URI拼接参数code。

String ACCESS_TOKEN_URL = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code";
String GET_UERINFO_URL = "https://api.weixin.qq.com/sns/userinfo?access_token=%s&openid=%s&lang=zh_CN";
@GetMapping(value = "callback")
public ModelAndView wxcallback(@RequestParam("code") String code) throws IOException {//2:使用code换取access_tokenString accessTokenUrl = String.format(ACCESS_TOKEN_URL, APPID, APPSECRET, code);HttpResponse accessTokenResp = HttpRequest.get(accessTokenUrl).send();          JSONObject jsonObject = JSON.parseObject(accessTokenResp.bodyText());String token = jsonObject.getString("access_token");String openid = jsonObject.getString("openid");//3:刷新access_token (if need)//4:获取用户信息String getUerinfoUrl = String.format(GET_UERINFO_URL, token, openid);HttpResponse userinfoResp = HttpRequest.get(getUerinfoUrl).send();WxUser wxUser = JSON.parseObject(userinfoResp.charset("utf-8").bodyText(), WxUser.class);ModelAndView modelAndView = new ModelAndView();modelAndView.addObject("userinfo", wxUser);modelAndView.setViewName("wx/wx_succ");return modelAndView;
}

3.简单的测试页面,展示下用户数据。

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml"xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><div>昵称:<p th:text="${userinfo.nickname}"></p></div><div>头像:<img width="100" th:src="${userinfo.headimgurl }"></div>
</body>
</html>

4.验证结果。

整体实现还是比较简单的,但这也是Oauth2.0授权码模式的整个流程,其他网站类似(如github,微博等)。

极简「Oauth2.0」微信网页授权教程相关推荐

  1. 「微信群合影2.4.0」- 微信网页版账号不能登录问题解决办法

    「微信群合影qunheying.com」- 一键生成微信全家福. 「 微信群合影 2.4.0 」版本更新:  支持微信网页版不能登录账号生成群合影 在一键生成全家福的过程中,有一些用户是不能登录微信网 ...

  2. 「微信群合影2.5.0」- 微信网页版账号不能登录解决办法,扫码登录

    「微信群合影qunheying.com」- 一键生成微信全家福 「 微信群合影 2.5.0 」版本更新: 支持微信网页版不能登录账号生成群合影, 通过扫码登录获取 在一键生成全家福的过程中,有一些用户 ...

  3. Java微信公众平台开发(十六)--微信网页授权(OAuth2.0授权)获取用户基本信息

    转自:http://www.cuiyongzhi.com/post/78.html 好长时间没有写文章了,主要是最近的工作和生活上的事情比较多而且繁琐,其实到现在我依然还是感觉有些迷茫,最后还是决定静 ...

  4. 微信授权2.0php源码,微信网页授权(OAuth2.0) PHP 源码简单实现

    微信网页授权(OAuth2.0) PHP 源码简单实现 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  微信网页授权(OAuth2.0) PHP 源码简单实现.tx ...

  5. 基于ThinkPHP3.2.3的微信OAuth2.0微信网页授权

    为了让大家不用重复造轮子,我写了一个TP控制器,继承控制器就可以直接用微信网页授权功能,但对于不是使用TP的小伙伴,可以直接在./Application/Home/Common/function.ph ...

  6. Spring Boot + OAuth2.0 实现微信扫码登录,这才叫优雅!!

    微信开放平台:微信扫码登录功能 官方文档:https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Wechat_ ...

  7. Spring Boot + OAuth2.0 实现微信扫码登录,这才叫优雅

    点击"终码一生",关注,置顶公众号 每日技术干货,第一时间送达! 微信开放平台:微信扫码登录功能 官方文档:https://developers.weixin.qq.com/doc ...

  8. 「Web2.0」的创造者表示:为Web3.0喝彩还为时尚早

    题图 | Kelly Sullivan / Getty Images for LinkedIn 图/ADOBE STOCK 最近Web3.0这个概念真的太火了. 简单来说,Web3.0将是去中心化.去 ...

  9. .net Core2.2 WebApi通过OAuth2.0实现微信登录

    前言 微信相关配置请参考 微信公众平台 的这篇文章.注意授权回调域名一定要修改正确. 微信网页授权是通过OAuth2.0机制实现的,所以我们可以使用 https://github.com/china- ...

  10. 使用微信开发者工具调试微信网页授权登录-react

    转:https://www.jianshu.com/p/9ced1a297c95 1.使用localhost本地调试 使用微信开发者工具, 选择微信网页授权, 微信团队为广大的开发者提供了一个测试账号 ...

最新文章

  1. 关注基于云的下一代应用开发
  2. unet3 动态分辨率支持
  3. 数据结构 - 从二叉搜索树说到AVL树(一)之二叉搜索树的操作与详解(Java)
  4. choiceformat_ChoiceFormat:数字范围格式
  5. 【一些简单的jQuery选择器】
  6. window下遍历并修改文件
  7. python 代理类型说明
  8. PHP Overview
  9. sql server managerment 给表加说明
  10. java poi设置单元格格式为数值_java中导出excel设置单元格的样式为数字格式怎样设置?...
  11. JDBC概念和数据库驱动程序操作基础
  12. 2012年度优秀软件企业、优秀软件人才和优秀软件产品
  13. SaaSpace:最好的免费网络安全工具
  14. html中的abbr有什么作用,html中关于abbr标签的使用以及作用的详解
  15. IKEv2子网之间秘钥重协商
  16. 运动装备怎么选?运动装备品牌排行榜
  17. win10访问服务器共享文件夹密码不对,WIN10 Samba文件共享的设置方法,解决不能访问和密码错误的问题...
  18. Word2Vec之Skip-Gram与CBOW模型
  19. decimal 和 numeric 的区别
  20. xshell7双击没有反应的解决办法

热门文章

  1. 直流无刷电机的一些介绍
  2. [Unity算法]斜抛运动(变种)
  3. 百度AI认为最漂亮的中国女星是----范冰冰
  4. 淘宝新店铺有哪些扶持
  5. Go语言系列——Go语言介绍
  6. 游戏视频怎么录制,游戏录制软件哪个好
  7. 【C语言】用 1 分、5 分、10 分、25 分的硬币凑成任何给定的钱数 x,要求硬币的数目最少
  8. 论fastadmin里面token加密方式
  9. 126. Word Ladder II \ 507. Perfect Number
  10. Android平台车牌识别开发手册