一、前言

之前csdn有个账号,不过由于没有绑定手机号(这个手机号不用了),于是就被弃用了,于是新开了个账号(心疼里面的几十篇文章啊)。

新账号开头写下微信公众号方面的一个专栏。因为最近实习用的比较多。

二、OAUTH2.0

如果要学习免登陆,首先需要知道OAUTH2.0协议,关于这个,推荐一篇博客, 阮一峰老师的理解OAuth 2.0,就不重复造轮子了。看完这个之后,再结合微信的免登陆,相信你能更理解OAUTH协议了。

三、微信免登陆

首先,学习任何第三方的东西,毫无疑问官方文档是最好的入门方法,如果你把它看懂了,那它就再简单不过了,如果没看懂,那就可能会坑你很长时间。OK,作为这篇博客的第一篇,就从最简单的入门开始讲解。

1、首先你需要一个公众号
作为公众号开发,你肯定需要一个公众号,这个我就不好演示了,毕竟已经创建过了。这个如果你是在公司,应该有人给你弄好了,并且是已经认证的。注意:未认证的公众号功能要少很多,只是自己拿来玩还可以。

2、你需要在公众号配置你的自定义菜单

从这里可以看出,只有认证的才能使用跳转url ,我之前用的是公司的,现在是自己的。

public class IndexServlet extends HttpServlet {private static final long serialVersionUID = 1L;private static final Logger logger = Logger.getLogger(IndexServlet.class);protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String url = WxConfig.AUTHORIZE_URL+ "appid="+WxConfig.APPID+"&"+ "redirect_uri="+URLEncoder.encode(WxConfig.LOGIN_CALLBACK_URL)+"&"+ "response_type=code" // 授权类型+ "&scope=" + WxConfig.SNSAPI_USERINFO // 申请的权限范围+ "&state=STATE#wechat_redirect" ;response.sendRedirect(url);}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}

比方说我写的后台对应的是这个Servlet。

这一步是获取授权,当用户点击授权之后,获取code,如果了解oauth2的话应该知道这个参数。关于上面url参数我就直接复制文档上面的介绍了。

参数 是否必须 说明
appid 是 公众号的唯一标识
redirect_uri 是 授权后重定向的回调链接地址,请使用urlEncode对链接进行处理
response_type 是 返回类型,请填写code
scope 是 应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息)
state 否 重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节
wechat_redirect 是 无论直接打开还是做页面302重定向时候,必须带此参数

如果用户点击授权之后,会出现如下界面:

第三、通过code获取access_token

在redirect_uri对应的回调url里,我们需要获取access_token.

public class CallBackServlet extends HttpServlet {private static final long serialVersionUID = 1L;private static final Logger logger = Logger.getLogger(CallBackServlet.class);protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 获取授权码String code = request.getParameter("code");String url = WxConfig.OAUTH2_URL + "?appid=" + AuthUtil.APPID + "&secret="+ AuthUtil.APPSECRET + "&code=" + code + "&grant_type=authorization_code";JSONObject jsonObject = AuthUtil.doGetJson(url);String access_token = jsonObject.getString("access_token");String openid = jsonObject.getString("openid");// 将openid存入request域,在支付页面需要request.setAttribute("openid", openid);// 免登陆String infoUrl = WxConfig.LOGIN_URL + "?access_token=" + access_token + "&openid=" + openid+ "&lang=zh_CN";JSONObject userInfo  = AuthUtil.doGetJson(infoUrl);String nickname = new String(userInfo.getString("nickname").getBytes("iso8859-1"), "utf-8");String city = new String(userInfo.getString("city").getBytes("iso8859-1"), "utf-8");String headimgurl = new String(userInfo.getString("headimgurl").getBytes("iso8859-1"), "utf-8");// 直接使用微信账号体系request.setAttribute("username", nickname);request.setAttribute("headimgurl", headimgurl);     }protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}

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

第四拉取用户信息(需scope为 snsapi_userinfo)

其实上面的代码已经给出来了,通过access_token和openID来从微信给的接口获取用户信息。返回的是一个JSON。我们可以直接使用它作为我们微信项目的用户管理。

四、总结

总的来说,第三方的东西,还是看官网比较好,如果实在看不明白,再在到网上找找demo和例子,大致也能明白了。之前一直听说微信的支付比较坑,可最近做这东西在网上查查资料,发现其实也没那么难。

微信公众号之免登陆快速入门相关推荐

  1. 微信公众号及小程序开发入门(二)

    开发过程中一些对微信公众号和小程序的认识. 一.服务号 在公众号开发入门一中提到,微信公众号分为订阅号和服务号,其中服务号功能最强,只准企业申请,并且要每年交300元认证费.如果企业想拥有自己的公众号 ...

  2. PPT干货:微信公众号的基础建设与规划入门手册

    笔者发现很多刚入门的微信公众号从业者对微信没有一个基本的了解,都是自己一步一步误打误撞的走过来.而现在很多文章没有那么全面的介绍微信运营的基础建设,所以这篇文章就会将微信公众号的基础建设与规划做一个细 ...

  3. Chrome插件英雄榜110篇更新!《微信公众号同步助手》快速将微信文章同步到知乎B站等创作平台...

    title: 110 <微信公众号同步助手>是一款将微信文章同步到知乎, B站,微博,豆瓣,百家号, 简书, 头条号,搜狐号, 大鱼号, 一点资讯, Cnblog, CSDN, 51CTO ...

  4. 提问:微信网页授权到第三方调用错误、调用微信公众号扫码登陆错误、微信SCOP权限错误或没有权限

    总结: 调用微信扫码,但是微信返回提示SCOP错误,我的微信公众号认证了,也把对应的域名填写了,代码上填写的snsapi的路径是填写在对用网页授权域名下的路径. 错误原因: 应该是微信公众号上的配置错 ...

  5. 《用微信测试公众号慰问你的好兄弟/姐妹》:用java简单实现微信公众号消息推送(入门且详细且有效)

    文章目录 一.前言 二.注册微信测试号并配置信息 1.获取appID和appsecret: 2.获取关注微信号ID: 3.生成并获取模板ID: 三.代码解读 1.新建一个springboot项目 2. ...

  6. 微信公众号网页授权登陆

    之前接到需求是做公众号跳转h5的时候做一个登陆授权的这么一个功能.这个记录下来以免下次遇到忘记了 写的不是很清晰 https://mp.weixin.qq.com/ 微信公众平台网址 首先的进微信公众 ...

  7. 微信公众号消息免打扰开启与关闭

    在我们关注的公众号,收不到信息.很多重要的信息接收不及时!由于公众号某某发的信息,太频繁垃圾营销.被多用户举报,官方设置了默认"开启"免打扰功能那么我们又如何设置关闭?免打扰功能呢 ...

  8. 微信公众号对接服务器教程,微信公众号开发--服务器配置(傻瓜入门教程)

    一.文件准备: 1.下载wx_sample.php(自行百度下载),修改文件名(本人改为api.php),放于服务器某个目录下,此路径为公众平台配置服务器填的时候要用url. 2.打开api文件,修改 ...

  9. 微信公众号主体已注销 如何办理账号迁移和公证书?

    公众号主体公司已经注销,公众号也可以办理迁移的.而且需要尽快迁移,如果被微信系统检测到主体注销,而公众号还在经营就会要求限期迁移,否则公众号将被冻结. 下面我们就来说一下,主体已注销如何办理公众号迁移 ...

  10. 构思编辑器教你如何不用代码排版出好看的微信公众号文章

    作为微信公众号运营人员之一,如何简单的进行微信文章内容编辑很重要.其中最主要的在于如何编辑出优美的文章并且文章的整体布局和排版都很美观.然而不是很多人都懂得如何使用代码去完成这些要求,那么不懂代码的运 ...

最新文章

  1. 修改mysql+io算法_MySQL磁盘IO设置问题
  2. android internet参数传递
  3. 轻芒阅读距离今日头条还差一个即刻
  4. 一张图片教你识别Vue的premission的权限管理,您细品\(^o^)/~
  5. Ubuntu 运行Asp.net MVC3
  6. swift 怎样查看xcode 版本对应的swift版本和 iOS 等其他系统版本
  7. [转]Android编程之BitmapFactory.decodeResource加载图片缩小的原因及解决方法
  8. 这九年来都在干嘛-兄弟连IT教育
  9. BadBoy安装与使用
  10. RecyclerView或是ListView(列表)点击某个条目保持选中【非常巧妙】
  11. 删除当前用户IE临时文件win7版批处理
  12. Java | PTA练习:伪随机数题解
  13. Predicting drug–disease associations through layer attention graph convolutional network
  14. [涛思数据库taosdata学习打卡系列]-001安装
  15. 有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个
  16. 基于python的文件加密传输_python 利用Crypto进行AES解密加密文件
  17. 有能干到退休的程序员吗?
  18. 还在苦恼怎么学PS、编程?这五个自学网站免费教!年薪百万不是梦
  19. 基于java ssm springboot+VUE疫情防疫系统系统前后端分离设计和实现
  20. 【报错笔记】Windows下spacy en_core_web_sm安装解决方式

热门文章

  1. 让微积分穿梭于工作与学习之间(7):我自认为牛逼的成果之三:直接用定义求正切函数的导数
  2. 我的世界服务器无限背包,我的世界 无限背包MOD 我的世界1.7无限背包MOD
  3. Windows10系统把JDK安装到D盘上的步骤及安装
  4. python复数类型的虚部通过什么表示_在python中复数怎么表示
  5. SwiftUI4 iOS16 新特性之 WeatherKit免费天气API使用教程(WWDC 2022教程含源码)
  6. 山大商院java课程_山大商院必读书目推荐——《社会科学方法论》
  7. 如何将HTML与win10桌面壁纸,Win10默认桌面背景怎么设置
  8. 我,开了五年快递站,现在还没回本
  9. android截屏图片大小,Android截屏及图片解析
  10. 8051 系列单片机内部结构