配置微信公众号开发环境就不赘述了。

进入正题。。。。。

首先,先理清楚微信登录的两种实现途径(这里我们先演示一种)1.微信开放平台实现,2.微信公众号(微信公众平台)实现。

因为微信登录不同与QQ登录,微信登录只提供扫码方式登录,并不像其他应用登录让用户输入用户名,密码。对用户并不友好。所以出现微信公众号登录,让用户授权。

实现方式也是两种:

1.没有自己的帐号体系,直接拉去微信用户信息来进行网站登录(我们所展示的信息全部来自于微信)

2.有自己的账号体系,授权成功后需要绑定自己的账号,绑定成功后,下次登录所展示的信息是自己的账号体系下面的用户信息

下面开始

1.微信公众号,推荐使用测试账号(拥有所有权限)

2.看微信授权登录的文档

3.代码部分了(尽可能的加上了注释)

工具类

package com.wlw.util;
import java.io.IOException;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;import net.sf.json.JSONObject;/*** * 工具类* 用来根据接口地址进行网络请求* @author wlw**/
public class AuthUtil {public static final String APP_ID = "****************";     //填写自己的APPIDpublic static final String APP_SECRET = "**************";   //填写自己的APPSECRETpublic static JSONObject doGetJson(String url) throws Exception, IOException {JSONObject jsonObject=null;//初始化httpClientDefaultHttpClient client=new DefaultHttpClient();//用Get方式进行提交HttpGet httpGet=new HttpGet(url);//发送请求HttpResponse response= client.execute(httpGet);//获取数据HttpEntity entity=response.getEntity();//格式转换if (entity!=null) {String result=EntityUtils.toString(entity,"UTF-8");jsonObject=JSONObject.fromObject(result);}//释放链接httpGet.releaseConnection();return jsonObject;}}

组装入口地址

package com.wlw.servlet;
import java.io.IOException;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.wlw.util.AuthUtil;;/*** 组装入口地址* 进行授权页面的授权地址组装* @author wlw**/
@WebServlet("/wxLogin")
public class LoginServiet extends HttpServlet{@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//回调地址(必须在公网进行访问)String backUrl="http://w.ngrok.xiaomiqiu.cn/we/callBack";String url="https://open.weixin.qq.com/connect/oauth2/authorize?appid="+AuthUtil.APP_ID+ "&redirect_uri="+URLEncoder.encode(backUrl)+ "&response_type=code"+ "&scope=snsapi_userinfo"+ "&state=STATE#wechat_redirect";//重定向resp.sendRedirect(url);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// TODO Auto-generated method stubsuper.doPost(req, resp);}
}

到这里很多人不明白回调地址到底是个啥玩意,

回调地址是当我们用户同意授权后,程序会进行对回调地址的访问。所以回调地址必须在公网上能够进行访问的。

还有个重点是scope(授权的作用域)。两个参数snsapi_base、snsapi_userinfo。。使用base作用域,不会弹出会话框,直接跳过,直接进入到回调地址,运行之后的程序,它默认是授权的(只能获取到openid)。。而userinfo,会弹出会话框,让用户选择,确认,才会进入回调地址(获取openID,通过openID拿到其他信息),用户取消则不进入回调地址。

微信公众号的bug之一就出现了,如果先使用userinfo作用域,再去使用base作用域,居然也能获取到用户的其他信息。至于为什么就要去问微信的开发大佬了。

回调地址的处理

package com.wlw.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.wlw.util.AuthUtil;
import net.sf.json.JSONObject;/*** 回调地址* * @author wlw**/
@WebServlet("/callBack")
public class CallBackServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {/*** 3.获取code*/String code=req.getParameter("code");String url="https://api.weixin.qq.com/sns/oauth2/access_token?appid="+AuthUtil.APP_ID+ "&secret="+AuthUtil.APP_SECRET+ "&code="+code+ "&grant_type=authorization_code";JSONObject jsonObject;try {jsonObject = AuthUtil.doGetJson(url);String openid=jsonObject.getString("openid");String token=jsonObject.getString("access_token");/*** 4.拉取用户信息*/String infoUrl="https://api.weixin.qq.com/sns/userinfo?access_token="+token+ "&openid="+openid+ "&lang=zh_CN";JSONObject userInfo=AuthUtil.doGetJson(infoUrl);System.out.println(userInfo);//使用微信用户信息直接登录,无需注册和绑定req.setAttribute("info", userInfo);req.getRequestDispatcher("/index1.jsp").forward(req, resp);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// TODO Auto-generated method stubsuper.doPost(req, resp);}}

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body style="font-size:40px;text-align:center;"><a href="/we/wxLogin">微信公众 版权登录</a>
</body>
</html>

index1.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body style="font-size:40px;text-align:center;"><div>登录成功!</div><div>用户昵称: ${info.nickname}</div><div>用户头像: <img style="vertical-align: top;" width="100" height="" alt="" src="${info.headimgurl}"></div><div>登录成功!</div>
</body>
</html>

截图配置信息

写自己的域名。。。不要带http

参考图2 截图配置信息  这里应该填   1afa5dc0.ngrok.io

然后在浏览器输入地址访问,会显示需要在微信端进行访问.

只需将地址换成二维码,扫描即可。如何换成二维码呢,我建议使用谷歌浏览器,方便,直接在地址栏右击,就会有二维码。扫一扫即可。

微信扫描,点击授权,登录进去页面显示

后台获取到的数据

原理就是两个Servlet和两个JSP页面。一个是用户进入的登录页面,只不过不用输入用户名密码,直接授权登录。另外一个页面为展示用户的数据。两个Servlet配合JSP页面处理后台。

这一次演示的是没有自己帐号体系,不需要绑定,直接登录。

帐号体系的授权登录自行百度。

微信公众号授权登录、获取用户信息(openid)相关推荐

  1. Spring boot 项目(十三)——实现微信公众号授权登录获取用户信息

    引言 微信公众号开发中,必不可少的一环:公众号授权登录.获取微信用户信息 前期准备 内网渗透=>生成本地指定端口映射的外网域名 链接:内网渗透工具natapp使用详解 域名生成之后修改yml文件 ...

  2. 基于Spring Boo微信公众号授权登录获取用户信息(附带完整源码)

    简介 微信公众号开发中,必不少可少的一环:公众号授权登录.获取微信用户信息. 本地完整运行环境准备 内网渗透=>生成本地指定端口映射的外网域名 传送门:内网渗透工具Natapp使用详解 域名生成 ...

  3. java实现微信公众号授权登录获取用户信息(一)

    参考文章:https://blog.csdn.net/Santiago_M/article/details/79109154 : https://www.cnblogs.com/jilu/p/6123 ...

  4. Spring Boot + 微信公众号授权登录获取用户信息

    通过微信公众平台的官方文档,总结出网页授权流程分为: 1.引导用户进入授权页面同意授权,获取code 2.通过code换取网页授权access_token(与基础支持中的access_token不同) ...

  5. 微信公众号授权(获取用户信息)

    需要的工具: 微信公众号(可以申请,但做开发的,可以申请测试号,申请详细不多说了) 服务器(可以自行购买,我使用的是新浪的sae.) 编辑器(随意,不做推荐) 微信公众号开发文档(地址) !!!!!完 ...

  6. 微信小程序授权登录获取用户信息详解

    今天来说一下微信小程序的授权登录获取用户信息,首先我们看微信提供的小程序开发文档: https://blog.csdn.net/qq_41971087/article/details/82466647 ...

  7. 微信公众号接入和获取用户信息

    主要原理: 1.从微信公众号发来的get请求为验证服务器安全性的 2.从微信公众号发来的post请求为接受和回复用户信息的 3.先根据是否有code来进行判断,如果有code的话,根据code换取op ...

  8. 微信公众号开发之获取用户信息

    微信获取用户信息的方式有两种,静默授权(无需用户同意)和非静默授权(需要用户" 手动点击 "拉取授权,可以用户无需关注公众号即可获取用户信息) 整体的代码请查看最后,前边为原理介绍 ...

  9. 微信小程序授权登录获取用户信息并保存至缓存用于下次登录

    1.获取用户信息 wx.getUserProfile(Object object) 获取用户信息.页面产生点击事件(例如 button 上 bindtap 的回调中)后才可调用,每次请求都会弹出授权窗 ...

  10. 微信小程序授权登录——获取用户信息

    小程序登录 小程序可以通过微信官方提供的登录能力方便地获取微信提供的用户身份标识,快速建立小程序内的用户体系. 登录流程时序 效果展示: 功能实现: 新建一个login页面 login.js: wx. ...

最新文章

  1. 构造函数与析构函数到底做了啥?
  2. 学习Struts 2.0系列文章
  3. php连接数据库语言,PHP语言连接MYSQL数据库实例代码
  4. TCP/IP协议各层首部汇总
  5. zookeeper集群部署监控与选举同步流程等工作原理
  6. 亚马逊招聘实习生,ML、CV、机器人和语音处理领域
  7. ASP.NET深入浅出系列3- Page类
  8. iOS UIView异步绘制实现圆角的方案
  9. oracle数据库学习相关笔记-相关约束
  10. 大智慧c语言dll,调用大智慧dll,简单支持大智慧公式dll接口
  11. 分享一款思维导图工具-幕布(附在线工具合集、Android进阶知识体系)
  12. npm shrinkwrap的用途
  13. Android 读取本地Word/Pdf/Txt文件转文本输出
  14. Camshift的理论与代码解释、DBL_EPSILON和 FLT_EPSILON的用法,反向投影
  15. 模型评估指标-2-ROC与PR曲线对比,TPR/FPR/Precision关系,3种特殊的评估指标
  16. 学校运动会管理系统--C语言实现
  17. 一个清华大学毕业生在麻省理工学院读计算机专业看美国博士研究生如何攻博
  18. UTL_FILE 包使用介绍
  19. H5的新特性及API详解(很惊人)
  20. 大学物理光学阶段测试重点题型

热门文章

  1. 巨头们的先进封装技术解读
  2. FotoMagico 5 for Mac(幻灯片制作工具)
  3. 分层架构使用DTO,VO,PO
  4. MySQL核心技术-178讲-佟刚-专题视频课程
  5. java 分部类_分部类 - Tekkaman - 博客园
  6. 字节大牛耗时八个月又一力作,详细的Android学习指南
  7. 爬取重庆交通大学新闻网站信息通知(爬虫)
  8. SDK:BUMO IOS SDK
  9. 会计未来十年发展趋势_会计行业未来10年将变成什么样(最适合会计转行的行业)...
  10. 电动汽车仿真软件advisor2002的安装过程