JAVA微信登陆详解
步骤:
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微信登陆详解相关推荐
- Java=微信支付详解与日志记录详解
一.二维码: (1)什么是二维码 二维码又称QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示 ...
- 微信开发 免费服务器,微信开发详解:[1]免费服务器
微信公众平台有两种模式,一种是编辑模式,一种是开发模式,编辑模式就是制定一些关键字回复就可以了,开发模式的话就是我们要讲解的内容,首先要有一个服务器,用来运行我们写的php程序,然后注册微信公众账号并 ...
- java io流详解_一文带你看懂JAVA IO流,史上最全面的IO教学啦
一.IO流是什么 惯例引用百科的回答流是一种抽象概念,它代表了数据的无结构化传递.按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列.从流中取得数据的操作称为提取操作,而向流中添加数据的操作 ...
- Python实现发送警告通知到企业微信方法详解
常见的报警方式有:邮件,电话,短信,微信.本文将介绍如何利用Python发送警告通知到企业微信,文中的示例代码有一定的参考价值,感兴趣的可以了解一下.编程资料点击免费领取 目录 1. 新建应用 2. ...
- java函数方法详解(简单易懂)
方法(函数) 函数的组成是: 访问修饰符 返回值 函数名(形式参数) {函数内容; } 更多java函数方法详解视频课程学习地址:https://ke.qq.com/course/149432 有技 ...
- Java内存溢出详解之Tomcat配置
Java内存溢出详解 转自:http://elf8848.iteye.com/blog/378805 一.常见的Java内存溢出有以下三种: 1. java.lang.OutOfMemoryError ...
- java基础(十三)-----详解内部类——Java高级开发必须懂的
java基础(十三)-----详解内部类--Java高级开发必须懂的 目录 为什么要使用内部类 内部类基础 静态内部类 成员内部类 成员内部类的对象创建 继承成员内部类 局部内部类 推荐博客 匿名内部 ...
- Java类加载机制详解【java面试题】
Java类加载机制详解[java面试题] (1)问题分析: Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息:如构造函数 ...
- Java线程池详解学习:ThreadPoolExecutor
Java线程池详解学习:ThreadPoolExecutor Java的源码下载参考这篇文章:Java源码下载和阅读(JDK1.8) - zhangpeterx的博客 在源码的目录java/util/ ...
最新文章
- Leet Code OJ 4. Median of Two Sorted Arrays [Difficulty: Hard]
- “北斗女神”徐颖:科研时间一定大于996
- python索引例子_Python实现带下标索引的遍历操作示例
- html5表单注册应用
- 使用vSphere Web Client导出/导入/还原分布式交换机配置(2034602)
- python3.5+tesseract+adb实现西瓜视频或头脑王者辅助答题
- Python 实现视频爬取下载及断点续传优化、异步下载
- Delphi XE 操作sqlite数据库
- 计算机的算数逻辑单元控制单元统称为,算术控制单元
- linux-LNMP一键安装Error: MySQL install failed. Error: PHP install failed
- python文件是乱码怎么办_python写入文件乱码怎么办
- 如何解决Word里插入图片会被压缩
- python模糊层次分析法案例_python实现AHP算法的方法实例(层次分析法)
- 罗振宇跨年演讲:哪来直接登顶的人生,只有不断迭代的历程
- 链栈的表示和实现(C++)
- 做跨境电商,用信用卡通道还是Paypal收款比较便宜?
- 关于Git使用详细教程
- 基于FPGA的PCIe接口实现(具体讲解了数据流向)
- docker-compose.yml修改volumes后重启不生效
- iOS7适配问题总结