步骤: 
1、 使用第三方工具,生成内网映射 
2、 微信公众平台使用测试账号 
3、 测试账号中需要配置自己的域名,并关注该临时测试使用的公众号 
4、 下载一个浏览器的二维码插件 
4、 编码测试

  • 使用花生壳进行内网穿透 
     
    注意,因为我使用的是8080端口,所以映射成内网端口设置为8080才有效

  • 微信公众号使用测试账号以及配置

首先进入微信公众号官网,登陆后的页面下拉,左下角即有开发者工具 

选择测试账号 

进入后即可看到提供测试用的appID和appsecret,这在后续会用到 

再关注这个公众号 

并且需要在网页账号这儿配置自己的域名 

点击修改 

最后下载个二维码插件,以便在微信手机端登录

  • 编码:java

1 第一步:用户同意授权,获取code 
2 第二步:通过code换取网页授权access_token 
3 第三步:刷新access_token(如果需要) 
4 第四步:拉取用户信息(需scope为 snsapi_userinfo) 
5 附:检验授权凭证(access_token)是否有效 
具体信息见官网

maven工程,pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>login</groupId><artifactId>wechat</artifactId><packaging>war</packaging><version>1.0</version><name>wechat Maven Webapp</name><url>http://maven.apache.org</url><profiles><profile><id>jdk-1.8</id><activation><activeByDefault>true</activeByDefault><jdk>1.8</jdk></activation><properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion></properties></profile></profiles><dependencies><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><scope>provided</scope><version>3.0-alpha-1</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency><!-- 没用到 --><dependency><groupId>net.sf.json-lib</groupId><artifactId>json-lib</artifactId><version>2.4</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient --><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.2</version></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpcore</artifactId><version>4.4.4</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpmime --><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpmime</artifactId><version>4.5.2</version></dependency><!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload --><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.1</version></dependency><!-- https://mvnrepository.com/artifact/commons-io/commons-io --><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version></dependency><!-- https://mvnrepository.com/artifact/org.json/json --><dependency><groupId>org.json</groupId><artifactId>json</artifactId><version>20160810</version></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpcore</artifactId><version>4.4.4</version></dependency></dependencies><build><finalName>wechat</finalName></build>
</project>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89

web.xml

<!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app><display-name>Archetype Created Web Application</display-name><servlet><servlet-name>LoginServlet</servlet-name><servlet-class>servlet.LoginServlet</servlet-class></servlet><servlet><servlet-name>CallBackServlet</servlet-name><servlet-class>servlet.CallBackServlet</servlet-class></servlet><servlet-mapping><servlet-name>LoginServlet</servlet-name><url-pattern>/wxLogin</url-pattern></servlet-mapping><servlet-mapping><servlet-name>CallBackServlet</servlet-name><url-pattern>/wx/callBack</url-pattern></servlet-mapping>
</web-app>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

AuthUtil.java发起http请求的工具类 
若不熟悉httpClient相关知识,可以参考这篇文章: 
HttpClient服务器模拟浏览器发送请求

package Utils;import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONObject;import java.io.IOException;public class AuthUtil {public static final String APPID="wx893db98985206df6";public static final String APPSECRET="a7681bcfbd70c0beb497715bfa1fb35a";public static JSONObject doGetJson(String url) throws IOException {JSONObject jsonObject=null;DefaultHttpClient defaultHttpClient=new DefaultHttpClient();HttpGet httpGet=new HttpGet(url);HttpResponse httpResponse = defaultHttpClient.execute(httpGet);HttpEntity httpEntity=httpResponse.getEntity();if(httpEntity!=null){String result= EntityUtils.toString(httpEntity,"UTF-8");jsonObject=new JSONObject(result);//System.out.println("jsonObject:  "+jsonObject);}httpGet.releaseConnection();return jsonObject;}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

LoginServlet登录请求处理

package servlet;import Utils.AuthUtil;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;/*** Created by asus on 2017/8/2.*/public class LoginServlet extends HttpServlet{@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String backUrl="http://3261045722cwy.vicp.io/wx/callBack";/***这儿一定要注意!!首尾不能有多的空格(因为直接复制往往会多出空格),其次就是参数的顺序不能变动**/String url="https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + AuthUtil.APPID+"&redirect_uri=" + URLEncoder.encode(backUrl,"UTF-8")+"&response_type=code" +"&scope=snsapi_userinfo" +"&state=STATE#wechat_redirect";resp.sendRedirect(url);}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

CallBackServlet处理回调请求

package servlet;import Utils.AuthUtil;
import org.json.JSONObject;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;/*** Created by asus on 2017/8/2.*/
public class CallBackServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("hahah");String code=req.getParameter("code");String url="https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + AuthUtil.APPID+"&secret=" +AuthUtil.APPSECRET+"&code=" +code+"&grant_type=authorization_code";JSONObject jsonObject = AuthUtil.doGetJson(url);String openid=jsonObject.getString("openid");String token=jsonObject.getString("access_token");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);}
}

JAVA微信登陆详解相关推荐

  1. Java=微信支付详解与日志记录详解

    一.二维码: (1)什么是二维码 二维码又称QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示 ...

  2. 微信开发 免费服务器,微信开发详解:[1]免费服务器

    微信公众平台有两种模式,一种是编辑模式,一种是开发模式,编辑模式就是制定一些关键字回复就可以了,开发模式的话就是我们要讲解的内容,首先要有一个服务器,用来运行我们写的php程序,然后注册微信公众账号并 ...

  3. java io流详解_一文带你看懂JAVA IO流,史上最全面的IO教学啦

    一.IO流是什么 惯例引用百科的回答流是一种抽象概念,它代表了数据的无结构化传递.按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列.从流中取得数据的操作称为提取操作,而向流中添加数据的操作 ...

  4. Python实现发送警告通知到企业微信方法详解

    常见的报警方式有:邮件,电话,短信,微信.本文将介绍如何利用Python发送警告通知到企业微信,文中的示例代码有一定的参考价值,感兴趣的可以了解一下.编程资料点击免费领取 目录 1. 新建应用 2. ...

  5. java函数方法详解(简单易懂)

    方法(函数) 函数的组成是: 访问修饰符 返回值 函数名(形式参数) {函数内容; } 更多java函数方法详解视频课程学习地址:https://ke.qq.com/course/149432  有技 ...

  6. Java内存溢出详解之Tomcat配置

    Java内存溢出详解 转自:http://elf8848.iteye.com/blog/378805 一.常见的Java内存溢出有以下三种: 1. java.lang.OutOfMemoryError ...

  7. java基础(十三)-----详解内部类——Java高级开发必须懂的

    java基础(十三)-----详解内部类--Java高级开发必须懂的 目录 为什么要使用内部类 内部类基础 静态内部类 成员内部类 成员内部类的对象创建 继承成员内部类 局部内部类 推荐博客 匿名内部 ...

  8. Java类加载机制详解【java面试题】

    Java类加载机制详解[java面试题] (1)问题分析: Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息:如构造函数 ...

  9. Java线程池详解学习:ThreadPoolExecutor

    Java线程池详解学习:ThreadPoolExecutor Java的源码下载参考这篇文章:Java源码下载和阅读(JDK1.8) - zhangpeterx的博客 在源码的目录java/util/ ...

最新文章

  1. Leet Code OJ 4. Median of Two Sorted Arrays [Difficulty: Hard]
  2. “北斗女神”徐颖:科研时间一定大于996
  3. python索引例子_Python实现带下标索引的遍历操作示例
  4. html5表单注册应用
  5. 使用vSphere Web Client导出/导入/还原分布式交换机配置(2034602)
  6. python3.5+tesseract+adb实现西瓜视频或头脑王者辅助答题
  7. Python 实现视频爬取下载及断点续传优化、异步下载
  8. Delphi XE 操作sqlite数据库
  9. 计算机的算数逻辑单元控制单元统称为,算术控制单元
  10. linux-LNMP一键安装Error: MySQL install failed. Error: PHP install failed
  11. python文件是乱码怎么办_python写入文件乱码怎么办
  12. 如何解决Word里插入图片会被压缩
  13. python模糊层次分析法案例_python实现AHP算法的方法实例(层次分析法)
  14. 罗振宇跨年演讲:哪来直接登顶的人生,只有不断迭代的历程
  15. 链栈的表示和实现(C++)
  16. 做跨境电商,用信用卡通道还是Paypal收款比较便宜?
  17. 关于Git使用详细教程
  18. 基于FPGA的PCIe接口实现(具体讲解了数据流向)
  19. docker-compose.yml修改volumes后重启不生效
  20. iOS7适配问题总结

热门文章

  1. 腾讯云+社区技术沙龙预告
  2. Map根据Key值进行排序(升序加降序)
  3. pdf翻译成中文,怎样翻译比较好?
  4. Android M 新控件了解学习
  5. 嵌入式软件工程师有必要精通算法,参加各种编程大赛吗?
  6. Go语言学习之map
  7. 经常说的 CPU 上下文切换是什么意思?
  8. win10安装Andorid Studio常见问题
  9. 技术领导力之路 - 安全感
  10. 联通的无限流量套餐,比移动好很多