一、前言

之前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. Android之View绘制流程源码分析
  2. 理科生的体面,是不是全在那些幻想里?
  3. python中pygame模块的Linux下安装过程
  4. Java实现敏感词过滤 - IKAnalyzer中文分词工具
  5. QT学习:多线程运用
  6. how SAP gateway parse_meta_tags
  7. P1506 拯救oibh总部(染色+dfs)
  8. spring BeanFactory概述
  9. SFTP是什么?与FTP之间有什么区别
  10. 设计模式之——工厂模式
  11. 零基础 Amazon Web Services (AWS) 入门教程 (列表)
  12. Geoserver之切片
  13. leetcode 904 水果成篮
  14. php隐藏notice错误,php屏蔽notice错误
  15. 人体动作捕捉与SMPL模型 (mocap and SMPL model)
  16. 淘宝店铺图片轮播在线制作技巧
  17. Panda白话 Reactor -背压策略
  18. 艺赛旗(RPA)python 的 tkinter 进度条的实现
  19. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java基于流浪宠物领养系统8xg84
  20. 使用mdadm创建raid mdadm命令详解

热门文章

  1. 帕累托法则(Pareto Principle)、二八定律、帕累托定律、最省力法则、不平衡原则、犹太法则、马特莱法则
  2. android下载工具 磁力,【安卓+iOS】磁力搜索+下载工具
  3. citrix终端linux,Citrix XenDesktop发布Centos 7.2桌面(六)--安装Linux VDA
  4. Python调用图灵机器人
  5. 我看韩剧《寄生虫》,一副好牌究竟是怎么被打烂的?
  6. 微量样本RNA甲基化m6A技术比较
  7. Mac 电脑锁屏快捷方法
  8. ANdroid的QQ分享接入,android 集成QQ互联 (登录,分享)
  9. 自然语言处理(NLP)和语音识别(ASR)的区别
  10. Vue3 script setup