博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
微信授权获取用户信息
阅读量:4942 次
发布时间:2019-06-11

本文共 4101 字,大约阅读时间需要 13 分钟。

项目中要用到关注微信号后进入获得授权,跳转页面,输入手机号成为会员的功能,要把微信的openid和手机号进行关联存储到服务器 , 实现下次扫码可获取到用户信息的功能

 

 

这个是servlet 用来重定向和逻辑判断

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
String open = null;
// 用户同意授权后,能获取到code
String code = request.getParameter("code");
String state = request.getParameter("state");
if(code == null){//如果没有授权跳转到授权页 只能微信客户端打开
response.sendRedirect("https://open.weixin.qq.com/connect/oauth2/authorize?appid=appid&redirect_uri=http://开头的返回地址要进行url utf-8编码&response_type=code&scope=snsapi_userinfo&state=跟据需要传递参数#wechat_redirect");
return;
}

String oid = (String)request.getSession().getAttribute("openid");//判断session中是否存在openid
if(oid!=null){
System.out.println("------hasopenid------");
Patient p = Patient.getUserByopenid(oid);
if(p==null){
request.setAttribute("openid", oid);
request.setAttribute("state", state);
request.getRequestDispatcher("phone.jsp").forward(request, response);
return;
}
request.setAttribute("openid",oid);
}else{
// 用户同意授权
if (!"authdeny".equals(code)) {
// 获取网页授权access_token
OAuthInfo oa = WeiXinUtil.getOAuthOpenId(WeiXinUtil.appid,WeiXinUtil.appsecret,code);
// 用户标识
if(oa==null){
request.getRequestDispatcher("error.jsp").forward(request, response);
return;
}
String openId = oa.getOpenId();
String at = oa.getAccessToken();
String openid = WeiXinUtil.getUserInfo(at, openId);
System.out.println(openid);
System.out.println(openId);
request.getSession().setAttribute("openid",openid);//把openid添加到session 下次进入页面可直接获取
request.setAttribute("openid", openid);
request.setAttribute("state", state);
Patient p = Patient.getUserByopenid(openid);//判断数据库是否有会员
if(p==null){
request.setAttribute("openid", openid);
request.setAttribute("state", state);
request.getRequestDispatcher("phone.jsp").forward(request, response);//跳转输入手机号页面
return;
}
open = p.getMobil();
}
}
// 跳转到index.jsp
request.getRequestDispatcher("success.jsp").forward(request, response);
}

 

 

获取openid方法

 

public static OAuthInfo getOAuthOpenId(String appid, String secret, String code ) {

OAuthInfo oAuthInfo = null;
String o_auth_openid_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";
String requestUrl = o_auth_openid_url.replace("APPID", appid).replace("SECRET", secret).replace("CODE", code);
String jsonObject = HttpUtils.get(requestUrl);//可能会请求失败  自行判断把
System.out.println(jsonObject);
//oAuthInfo是自己把那几个属性参数写在一个类里面了。
//如果请求成功
JSONObject j = null;
if (null != jsonObject && !"".equals(jsonObject)) {
try {
j = JSONObject.fromObject(jsonObject);
oAuthInfo = new OAuthInfo();
oAuthInfo.setAccessToken(j.getString("access_token"));
oAuthInfo.setExpiresIn(j.getInt("expires_in"));
oAuthInfo.setRefreshToken(j.getString("refresh_token"));
oAuthInfo.setOpenId(j.getString("openid"));
oAuthInfo.setScope(j.getString("scope"));
} catch (JSONException e) {
oAuthInfo = null;
// 获取token失败
System.out.println(e);
}
}
return oAuthInfo;
}

 

 

 

 

获得用户信息方法

这里我只返回了openid 其他数据也能取到 跟据需要自行取

public static String getUserInfo(String accessToken, String openId) {

OAuthInfo oAuthInfo = null;
String requestUrl = "https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID";
requestUrl = requestUrl.replace("ACCESS_TOKEN", accessToken).replace("OPENID", openId);
String jsonObject = HttpUtils.get(requestUrl);//可能会请求失败  自行判断把
System.out.println("userinfo ==== "+jsonObject);
//oAuthInfo是自己把那几个属性参数写在一个类里面了。
//如果请求成功
JSONObject j = null;
if (null != jsonObject && !"".equals(jsonObject)) {
try {
j = JSONObject.fromObject(jsonObject);
oAuthInfo = new OAuthInfo();
//oAuthInfo.setAccessToken(j.getString("access_token"));
//oAuthInfo.setExpiresIn(j.getInt("expires_in"));
//oAuthInfo.setRefreshToken(j.getString("refresh_token"));
oAuthInfo.setOpenId(j.getString("openid"));
//oAuthInfo.setScope(j.getString("scope"));
} catch (JSONException e) {
oAuthInfo = null;
// 获取token失败
System.out.println(e);
}
}
return j.getString("openid");
}

 

转载于:https://www.cnblogs.com/fengyifengceaser/p/7274139.html

你可能感兴趣的文章
20145316 《信息安全系统设计基础》第十四周学习总结
查看>>
Liferay7 BPM门户开发之18: 理解ServiceContext
查看>>
从零开始学区块链(3)
查看>>
Intel Galileo development documentation
查看>>
Jquery特效
查看>>
web服务器
查看>>
EV: Workaround to Allow Only One Instance or Window of outlook
查看>>
数据校验,
查看>>
IntelliJ IDEA完美解决tomcat8+乱码问题
查看>>
GDI+ ColorMatrix的完全揭秘
查看>>
破解电信光猫华为HG8120C关闭路由功能方法
查看>>
在Qt示例项目的C ++ / QML源中的//! [0]的含义是什么?
查看>>
【智能家居篇】wifi网络接入原理(上)——扫描Scanning
查看>>
操作引入xml文件的书包(定位到指定节点)
查看>>
操作系统学习笔记系列(一)- 导论
查看>>
CSS实例:图片导航块
查看>>
window的对象有哪些(笔记)
查看>>
Boolean Expressions
查看>>
They Are Everywhere
查看>>
数据结构--汉诺塔递归Java实现
查看>>