记录一下自己做网页授权时的完整过程

网页授权有两种方式,关于这两种授权的方式和区别官网介绍 如下

接下来开始开发
一、环境配置
1 .授权回调域名配置(可以使用小米球配置域名)
在配置文件中配置端口

2.启动小米球

关于小米球的下载和使用可以参考https://blog.csdn.net/weixin_44871934/article/details/102775259

3.在微信公众平台中申请测试号可以获取到一个appid和appsecret并且需要关注此测试号之后才可以用手机测试


4.在微信公众平台中配置回调域名



二、编码实现
开发步骤

1.在idea中新建一个springboot工程
2.application.properties文件

server.port=8080
#工程名,可配可不配
server.servlet.context-path=/we-demo

3.pom文件

 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.4</version></dependency><!-- https://mvnrepository.com/artifact/org.json/json --><dependency><groupId>org.json</groupId><artifactId>json</artifactId><version>20160810</version></dependency><!-- https://mvnrepository.com/artifact/net.databinder/dispatch-http --><dependency><groupId>net.databinder</groupId><artifactId>dispatch-http_2.11</artifactId><version>0.8.10</version></dependency><dependency><groupId>com.vaadin.external.google</groupId><artifactId>android-json</artifactId><version>0.0.20131108.vaadin1</version><scope>compile</scope></dependency></dependencies>

4.WXAuthUtil工具类

public class WXAuthUtil {public static final String APPID = "";//申请的测试号的appidpublic static final String APPSECRET = "";//申请的测试号的appsecretprivate static final String TOKEN = "immco";public static JSONObject doGetJson(String url) throws 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;}}

5.controller

@RestController
public class WXLoginController {@RequestMapping(value = "/wxLogin", method = RequestMethod.GET)public String wxLogin(HttpServletRequest request, HttpServletResponse response) throws ParseException, IOException {//这个url的域名必须要进行再公众号中进行注册验证,这个地址是成功后的回调地址String backUrl = "http://ccf25ec16c08.ngrok.io/we-demo/callBack";// 第一步:用户同意授权,获取code,引导关注者打开如下界面//https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID// &redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirectString 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";System.out.println("forward重定向地址{" + url + "}");//response.sendRedirect(url);return "redirect: " + url;//必须重定向,否则不能成功}@RequestMapping(value = "/callBack", method = RequestMethod.GET)public String callBack(ModelMap modelMap, HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {/*** start 获取微信用户基本信息* 获取code*/String code = req.getParameter("code");System.out.println("========"+code);//第二步:通过code换取网页授权access_tokenString url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + WXAuthUtil.APPID+ "&secret=" + WXAuthUtil.APPSECRET+ "&code=" + code+ "&grant_type=authorization_code";System.out.println("url:" + url);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_tokenString access_tokenUrl="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + WXAuthUtil.APPID+ "&secret=" +WXAuthUtil.APPSECRET;System.out.println(access_tokenUrl);//第五步验证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.toString());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);System.out.println(refreshInfo.toString());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";System.out.println("infoUrl:" + infoUrl);JSONObject userInfo = WXAuthUtil.doGetJson(infoUrl);System.out.println("userInfo================================"+userInfo);System.out.println("JSON-----" + userInfo.toString());System.out.println("名字-----" + userInfo.getString("nickname"));System.out.println("头像-----" + userInfo.getString("headimgurl"));/*** end 获取微信用户基本信息*/return "login";}}

6.启动主启动类
测试地址:http://localhost:8080/we-demo/wxLogin
控制台中输出的回调地址,在微信中打开回调地址,可以在控制台中看到打印的用户信息

微信订阅号之——网页授权相关推荐

  1. 关于微信订阅号无法网页授权与服务号结合实现

    需求场景: 最近公司做了一个小游戏想通过小游戏来吸一波粉丝到指定的订阅号,类似关注公众号后领取100钻石.(模仿微信爱微游,疯狂游乐场)游戏有用户系统(根据openid记录每个用户的钻石数量,皮肤数量 ...

  2. 微信订阅号无法使用网页授权解决方案

    昨天在测试号上用OAuth2.0网页授权方式静默获取用户openid,然后暂存在session中,最后连同注册表单信息一起填入数据库,以达到自动绑定的目的. 然而今天偶然发现订阅号无法开通网页授权接口 ...

  3. 微信公众号的网页授权如何在本地调试?

    调试微信公众号的网页授权时,要填写网页授权域名(如图1),否则授权的时候会提示redirect_uri参数错误(图2),可是我得在localhost先调试成功才能上传到实际的网站上吧,可是这里不支持l ...

  4. 微信公众号-测试号-网页授权

    微信公众号-测试号-网页授权 自己摸索几天,总算搞清楚了 第一步 登录微信公众号平台,开发者工具菜单进入公众平台测试账号 第二步 设置网页帐号 网页授权获取用户基本信息的域名,测试号是可以用ip和域名 ...

  5. 微信公众号第三方网页授权

    如果用户在微信公众号客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑. 关于网页授权回调域名的说明 1.在微信公众号请求用户网页授权之前,开发者需要先到公众 ...

  6. uniapp开发微信公众号之网页授权

    目录 公众号网页授权的步骤 网页授权步骤 献上官网地址参考:公众号网页授权 先要拥有微信公众号,注意此处的公众号是服务号(需要认证),因为个人订阅号没有跳转外部链接的权限 项目要能被公网访问到(这样才 ...

  7. 微信公众号 用户绑定 php,微信公众号开发——网页授权实现简化用户绑定

    本教程的学习条件: 了解微信公众号开发的基本知识.已经申请了微信公众号并设置了开发模式等.如果不了解,请先到微信官方平台学习 需要服务器端开发的基本技能,本文主要讲解流程,基本不涉及具体开发语言. 首 ...

  8. 微信公众号开发-网页授权——配置测试账号

    思路分析: 1.创建测试账号并且配置测试账号的授权回调域名. 2.由前端发起授权请求,微信收到请求后(若是首次打开,并且未关注公众号,微信会弹出授权页,提示用户授权)将重定向到请求url中配置的red ...

  9. 微信公众号配置网页授权域名报错:无法访问xxx指向的web服务器或虚拟主机的目录

    记录一下这个困扰我一天的问题. 首先是下载那个txt,然后安装服务器的nginx(安装过程百度一下,非常简单),我是新建了一个文件夹,把这个txt放了进去 接下来配置nginx的访问路径,去编辑con ...

  10. vue 微信公众号开发 网页授权 配置业务域名

    服务号! 服务号! 服务号! 1.官网下载xxx.txt文件 2.将文件放入vue项目的static文件夹中(注意不是src的static) 3.输入域名网址www.xxx.com/static/xx ...

最新文章

  1. html背景自动换,html页面换皮肤颜色、背景图片(更换页面背景,常驻缓存)刷新保存...
  2. batch spring 重复执行_Spring源码高级笔记之——Spring AOP应用
  3. ssdp协议 upnp_SSDP 简单服务发现协议
  4. php nginx配置404页面,Nginx实现404页面的几种方法
  5. 使用GetValue和SetValue来设置属性
  6. C# Json文件读取
  7. 运维堡垒机—如何解决企业运维操作审计问题?
  8. linux中添加一行,linux – sed:在某个位置插入一行
  9. 浅谈润乾报表与QlikView对比
  10. phpadmin安装到mysql中_PHPAdmin的安装和配置
  11. android摄影程序,手机影像魅力:10款最佳Android摄影程序
  12. 计算机网安全模式,电脑安全模式有什么用?
  13. 「星火计划沙龙视频」Angel核心推荐算法及其应用探秘
  14. 如何在Java中转换Excel文件到图像?
  15. crawler:AJAX动态网页数据抓取、Selenium使用
  16. SEO 小白如何实现网站优化?
  17. java 菜刀_中国菜刀使用方法以及小技巧
  18. 测试中文编码_如何通过带回家的编码测试
  19. iCloud邮件客户端配置
  20. 18650电池正负反接保护电路如何做原理图参考图

热门文章

  1. 麻省理工遍地走,6年经验安卓程序员面试微软,靠这份思维脑图拿下Offer!
  2. c++邻接表实现BFS算法遍历
  3. 文本溢出处理,出现省略号,单行文本溢出处理,多行文本溢出处理
  4. 基于java实现的一个电话号码程序,3位,5位,7位,8位,11位
  5. gis核密度分析工具_核密度分析工具的初探(Kernel Density)
  6. 【C】 typedef struct LNode * list
  7. 国内ERP系统和SAP系统架构存在哪些差异?
  8. (KNN)K-近邻算法介绍和 Facebook签到位置预测案例应用
  9. SUBMAIL 短网址 API 授权与验证机制
  10. 元数据是什么?举例告诉你什么是元数据