java Web获取微信授权用户信息
1.申请微信公众测试号
首先需要去微信开发公众平台申请一个微信公众平台测试号,页面如下。
登陆之后,页面如下。
页面下拉会看到这个,微信扫码关注即可。
接口信息无需配置。页面往下拉会看到如下的页面。
点击网页账号后面的修改需要填写url地址,注意url地址不能携带http:// 和https://,正确填下格式如下。
如若没有URL地址可通过下面的方法获取。
2.获取URL地址
.获取URL地址,首先打开内网穿透注册网站,注册步骤省略。注册之后查看使用文档,我们需要购买一个免费的web隧道。
之后点击配置。
只需要配置本地端口号,其余无需配置,例如后端端口号8000,在这里填写8000即可。根据不同的系统选择对应的客户端下载
下载之后如图
运行方式参考文档,这里以windows系统为例。运行后的界面是这样的。
此时我们需要输入命令行,
cmd -authtoken=
之后在输入如下的命令行
natapp -authtoken=9ab6b9040a624f40
这里的authtoken值需要在这里获取
正确输入命令后会出现下面的图。黄色网格里就是我们需要的url地址。
得到url地址,这时我们就可以在微信公众号平台开发里配置。
3.后台代码
1.此时配置好之后我们需要编写Java代码,首先需要一个配置实体类。
public class Oautch {
public final static String appID="wx0d8b22ce0d371acf";//微信appID
public final static String appSecret ="86a97a207d75ec521164b1e913ce7d85";//微信appSecret
public final static String REDIRECT_URI ="http://8bsbit.natappfree.cc"; //url地址
}
2.HttpClientUtil工具类
这里已经编写好,具体使用请查看HttpClientUti类。
使用 JSONObject工具类需要引入下面的maven坐标
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.3.4</version>
</dependency>
3.Controller层代码。
//验证
@RequestMapping("/oautch")
public void token(HttpServletResponse httpServletResponse) throws Exception {
String path= Oautch.REDIRECT_URI+"/api/common/invoke";//这里拼接你的URL地址,用户授权同意之后会调用的接口方法。
path= URLEncoder.encode(path,"UTF-8");
String url="https://open.weixin.qq.com/connect/oauth2/authorize?" +
"appid="+Oautch.appID+
"&redirect_uri="+path+
"&response_type=code&" +
"scope=snsapi_userinfo&" +
"state=wechat_redirect";
httpServletResponse.sendRedirect(url);
}
参数介绍
当用户同意授权后我们会得到一个code值,其中state是我们传入的参数值,当用户同意后,也会把state的值传入过来,通过这个state我们就可以判断,返回消息是不是微信所返回的。
用户同意授权之后,会执行如下的代码。
//用户同意执行回调
@RequestMapping(value = "/invoke",produces="application/json; charset=utf-8")
public String token1(String code, String state) throws IOException {
/*
* 得到code值,获取用户的openid获取token
* */
String path="https://api.weixin.qq.com/sns/oauth2/access_token?appid="+Oautch.appID+"&secret="+Oautch.appSecret+"&code="+code+"&grant_type=authorization_code";
JSONObject jsonObject = new JSONObject(HttpClientUtil.doGet(path));
String access_token = (String) jsonObject.get("access_token");//得到token
System.out.println(access_token);
String openid = (String) jsonObject.get("openid");//得到openid
//根据code值和oppenid获取用户的基本信息
String path2="https://api.weixin.qq.com/sns/userinfo?access_token="+access_token+"&openid="+openid+"&lang=zh_CN";
String s = HttpClientUtil.doGet(path2);
System.out.println(s);
return s;
}
path参数介绍
path2参数介绍
返回值参数介绍,这里的返回值是字符串,如需要可通过JSONObject类,转成json;
4.测试
(1)只需要我们用手机微信打开url地址就可以获取用户信息了。URL地址就是1+2的拼接, 这里就是 http://8bsbit.natappfree.cc/api/common/oautch
(2)微信打开后页面如下
同意后可以看到自己的信息,控制台打印如下
至此整个微信授权获取用户信息到此结束,代码已上传到GitHup,https://github.com/1049083230/weixin