微信授权读取用户信息
来源:互联网 发布:mac上的养成游戏 编辑:程序博客网 时间:2024/06/07 05:03
1. 定义接口常量
// 凭证获取(GET)
public final static String token_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";
// 用户同意授权,获取code
public final static String WX_OAUTH_URL = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect";
// 用户同意授权,回调url
public final static String WX_REDIRECT_URL = "http://14wj577900.51mypc.cn/showIndex";
// 拉去用户信息url
public final static String WX_SNSAPI_URL = "https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN";
//微信openId
public final static String WX_OPEN_ID = "wxd571b8847be86a0f";
//微信appSecret
public final static String WX_APP_SECRET = "d25f8dfeeac2606a76d649ce8d735518";
2. 获取token,验证是否授权
微信后台请求接口
public String home(HttpServletRequest request) {
// 请求获取用户授权
String requestUrl = Constant.WX_OAUTH_URL
.replace("APPID", Constant.WX_OPEN_ID)
.replace("REDIRECT_URI",
CommonMethod.urlEncodeUTF8(Constant.WX_REDIRECT_URL))
.replace("SCOPE", "snsapi_base").replace("STATE", "123");
request.setAttribute("url", requestUrl);
return "url";
}
//解析编码
public static String urlEncodeUTF8(String source) {
String result = source;
try {
result = java.net.URLEncoder.encode(source, "utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return result;
}
// 获取TOKEN
Token accessToken = CommonMethod.getToken(Constant.WX_OPEN_ID,
Constant.WX_APP_SECRET, code);
if (!OAuth(request, accessToken.getAccessToken(),
accessToken.getOpenId())) {
return "error";
}
// 获取接口访问凭证
public static Token getToken(String appid, String appsecret, String code) {
Token token = null;
String requestUrl = Constant.token_url.replace("APPID", appid).replace("SECRET", appsecret).replace("CODE", code);
// 发起GET请求获取凭证
net.sf.json.JSONObject jsonObject = httpsRequest(requestUrl, "GET", null);
if (null != jsonObject) {
try {
token = new Token();
token.setAccessToken(jsonObject.getString("access_token"));
token.setExpiresIn(jsonObject.getInt("expires_in"));
token.setOpenId(jsonObject.getString("openid"));
} catch (JSONException e) {
token = null;
// 获取token失败
System.out.println("获取token失败");
e.printStackTrace();
//log.error("获取token失败 errcode:{} errmsg:{}", jsonObject.getInt("errcode"), jsonObject.getString("errmsg"));
}
}
return token;
}
//授权
public boolean OAuth(HttpServletRequest request, String accessToken,
String openId) {
TBaseMember member = null;
// 拼接请求地址
String requestUrl = Constant.WX_SNSAPI_URL.replace("ACCESS_TOKEN",
accessToken).replace("OPENID", openId);
// 获取用户信息
JSONObject jsonObject = CommonMethod.httpsRequest(requestUrl, "GET",
null);
if (null != jsonObject) {
try {
// 根据openid查询判断用户是否存在
TBaseMember tbm = memberService.selectMemberByOpenId(jsonObject
.getString("openid"));
if (null != tbm) {
request.getSession().setAttribute("member", tbm);
} else {
member = new TBaseMember();
member.setmId(AutoGenerationCode.getUUId());
member.setmState("01");
member.setIsValid("01");
member.setCreateDate(new Date());
member.setmOpenid(jsonObject.getString("openid"));
member.setExt2(jsonObject.getString("nickname"));
member.setmSex("0" + jsonObject.getInt("sex"));
member.setExt1(jsonObject.getString("headimgurl"));
memberService.insertSelective(member);
request.getSession().setAttribute("member", member);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
return false;
}
3. 用户授权
定义接口凭证
public class Token {
// 接口访问凭证
private String accessToken;
// 凭证有效期,单位:秒
private int expiresIn;
}
- 微信授权读取用户信息
- 微信授权获取用户信息
- 微信网页授权—获取用户信息
- 微信网页授权(获取用户信息)
- 微信网页授权后台获取用户信息
- 微信开发-网页授权获取用户信息
- 微信开发页面授权获取用户信息
- 微信网页授权及获取用户信息
- java通过微信授权获取用户信息
- 获取微信授权,获取微信用户信息
- Java微信网页授权获取用户信息 微信分享
- 微信公众号开发:用户授权获取用户信息
- 微信api 第三方平台授权 登录 ,获取用户信息
- 微信网页授权用户信息——openId相关
- 微信公众号-获取用户信息(网页授权获取)
- 微信公众号开发授权获取用户信息流程?
- 微信授权登录并获取用户信息接口开发
- 微信第三方授权获取UNIONID和用户信息
- 使用git拉取github上的项目
- 插入排序算法
- bzoj1179 [Apio2009]Atm
- C++直接初始化与复制初始化的区别深入解析
- 在anaconda中安装xgboost,基于win10 32/64位系统
- 微信授权读取用户信息
- 巩固基础——操作系统(1)
- JAVA_单例设计模式
- NOIP-2013火柴排队
- 边缘计算:万物互联新型计算模型
- AngularJS过滤器filter,orderBy排序,删除全部数据
- C++笔记——命名空间namespace
- Java面试题Day3
- r语言 偏度峰度