您的位置:首页 > 移动开发 > 微信开发

微信公众号开发接口列表大全之根据code获取用户基本信息

2017-07-20 14:33 561 查看
微信公众号开发接口列表大全

1、





code说明 : code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。

2、通过code换取网页授权access_token

public static String url_get_webpage_token = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code"
代码示例如何调用接口获取code

/**
* 此方法用于微信网页授权
* 微信网页认证(不弹窗获取用户授权)
* @return
* @throws Exception
*/
@RequestMapping("/index.do")
public void index(HttpServletRequest request,HttpServletResponse response) throws Exception{
String q  = request.getQueryString();
String requestUrl = request.getRequestURL().toString();
String redirectUri = requestUrl.substring(0,requestUrl.lastIndexOf("/"));
redirectUri = redirectUri +"/auth.do";
if(StringUtils.isNotBlank(q)){
redirectUri = redirectUri + "?" + q;
}
response.sendRedirect("https://open.weixin.qq.com/connect/oauth2/authorize?appid="
+ appId
+ "&redirect_uri=" + URLEncoder.encode(redirectUri,"UTF-8")
+ "&response_type=code&scope=snsapi_base&state=csunicom#wechat_redirect");
}
//活动主页
@RequestMapping("/auth.do")
public String auth(String code,
HttpServletRequest request,HttpServletResponse response){
4000

String requestUrl = request.getRequestURL().toString();

try{

WXUser wxuser = null;

/*
* 非空参数判断
*/
if(StringUtils.isBlank(code)){
request.setAttribute("msg","缺少必填参数!");
return "preliminary/error";
}

String openid = null;

/*
* 从数据库中获取网页授权信息
* 解决用户回退页面操作导致的获取用户信息失败的问题
*/
//OAuthAccessToken oldat = oauthTokenDao.getAuthAccessToken(code);
//if(oldat==null){
OAuthAccessToken oldat = WXAdvanceFunc.getAuthedAccessToken(code);
//}
if(oldat==null){
request.setAttribute("msg","由于授权AccessToken值超时失效,需要您重新授权,请退出后重新进入此页面(刷新页面无效)");
return "preliminary/error";
}else{
oldat.setCode(code);
//保存用户最新的网页授权信息
oauthTokenDao.saveOrUpdateAuthAccessToken(oldat);
openid = oldat.getOpenid();
}

/*
* 根据openid获取用户的基本信息
*/

wxuser = WXAdvanceFunc.getWXUserInfo(openid);
if(wxuser==null){
request.setAttribute("msg","(2)未获取到您的关注信息,请稍后重试!");
return "preliminary/error";
}

/*
* 根据openid,从crm数据库中读取会员记录
* 判断用户的关注状态,并更新用户的最新关注状态
*/
WXUser u = userDao.getByOpenid(openid);
if(wxuser.getSubscribe()==1){//用户已关注
if(u==null){
u = new WXUser();
u.setOpenid(wxuser.getOpenid());
u.setNickname(CommonUtils.getNormalChars(wxuser.getNickname()));
u.setHeadimgurl(wxuser.getHeadimgurl());
u.setSubscribe(1);
u.setAttendDate(wxuser.getAttendDate());
userDao.saveOrUpdateUser(u);
}else{
switch(u.getSubscribe()){
case 0: //未关注
u.setSubscribe(1);//更改为首次关注
break;
case 2: //取消关注
u.setSubscribe(3);//更改为重新关注
break;
case 1:
case 3:
break;
}

u.setNickname(CommonUtils.getNormalChars(wxuser.getNickname()));
u.setHeadimgurl(wxuser.getHeadimgurl());
u.setAttendDate(wxuser.getAttendDate());
userDao.saveOrUpdateUser(u);
}

}else{
//用户未关注,重新授权(弹窗获取用户授权)
String redirectUri = requestUrl.substring(0,requestUrl.lastIndexOf("/"));
redirectUri = redirectUri+"/authAgain.do";
response.sendRedirect("https://open.weixin.qq.com/connect/oauth2/authorize?appid="
+ appId
+ "&redirect_uri=" + URLEncoder.encode(redirectUri,"UTF-8")
+ "&response_type=code&scope=snsapi_userinfo&state=csunicom#wechat_redirect");
return null;
}
request.setAttribute("openid", wxuser.getOpenid());
/**
* 获取最新参赛选手的信息
*/
pager = new Pager<EntryInfo>(8,1);
pager = hndxkfDao.getByPager(pager, 0);
request.setAttribute("nlist",pager.getDataList());
request.setAttribute("size", pager.getTotalRows());
//判断该openid是否已经参赛
boolean isbm=hndxkfDao.isbaoming(openid);
request.setAttribute("isbm", isbm);

return "preliminary/index";

}catch(Exception e){
e.printStackTrace();
request.setAttribute("msg","程序发生了异常,请反馈管理员处理!");
return "preliminary/error";
}

}

@RequestMapping(value="/authAgain.do")
public String initAdvanceWXShare(String code,
HttpServletRequest request,HttpServletResponse response) throws Exception{

if(StringUtils.isBlank(code) ){
request.setAttribute("msg","缺少必填参数。");
return "preliminary/error";
}

WXUser wxuser = null;
String openid=null;
OAuthAccessToken oldat = oauthTokenDao.getAuthAccessToken(code);
if(oldat==null){
oldat = WXAdvanceFunc.getAuthedAccessToken(code);
}
if(oldat==null){
request.setAttribute("msg","由于授权AccessToken值超时失效,需要您重新授权,请退出后重新进入此页面(刷新页面无效)");
return "preliminary/error";
}
oldat.setCode(code);
oauthTokenDao.saveOrUpdateAuthAccessToken(oldat);

openid = oldat.getOpenid();
if(StringUtils.isBlank(openid)){
request.setAttribute("msg","获取用户信息失败,请稍后重试!");
return "preliminary/error";
}

wxuser = WXAdvanceFunc.getAuthUserInfo(oldat.getAccess_token(), openid);

if(wxuser==null){
request.setAttribute("msg","获取用户信息失败,请稍后重试!");
return "preliminary/error";
}

WXUser newUser = userDao.getByOpenid(openid);
if(newUser==null){
newUser = new WXUser();
newUser.setOpenid(openid);
newUser.setNickname(CommonUtils.getNormalChars(wxuser.getNickname()));
newUser.setHeadimgurl(wxuser.getHeadimgurl());
newUser.setSex(wxuser.getSex());
newUser.setSubscribe(-1);
userDao.saveUser(newUser);
}

request.setAttribute("openid", wxuser.getOpenid());
/**
* 获取最新参赛选手的信息
*/
pager = new Pager<EntryInfo>(8,1);
pager = hndxkfDao.getByPager(pager, 0);
request.setAttribute("nlist",pager.getDataList());
request.setAttribute("size", pager.getTotalRows());
//判断该openid是否已经参赛
boolean isbm=hndxkfDao.isbaoming(openid);
request.setAttribute("isbm", isbm);
return "preliminary/index";

}
public static OAuthAccessToken getAuthedAccessToken(String code)
/*     */   {
/* 347 */     log.info("获取网页access token");
/* 348 */     OAuthAccessToken at = null;
/* 349 */     String url = url_get_webpage_token.replace("APPID", appId)
/* 350 */       .replace("SECRET", appSecret)
/* 351 */       .replace("CODE", code);
/* 352 */     JSONObject o = JSONSupport.getJSONData(url);
/* 353 */     if (o != null) {
/* 354 */       log.info("微信高级接口=》获取网页access_token接口=>" + o.toString());
/* 355 */       String result = o.toString();
/* 356 */       if (!(result.contains("errcode")))
/*     */       {
/* 358 */         String access_token = o.getString("access_token");
/* 359 */         String openid = o.getString("openid");
/* 360 */         Long expires_in = Long.valueOf(o.getLong("expires_in"));
/* 361 */         String refresh_token = o.getString("refresh_token");
/*     */
/* 363 */         at = new OAuthAccessToken();
/* 364 */         at.setAccess_token(access_token);
/* 365 */         at.setExpires_in(expires_in);
/* 366 */         at.setRefresh_token(refresh_token);
/* 367 */         at.setOpenid(openid);
/* 368 */         at.setStatus(Integer.valueOf(0));
/*     */       } else {
/* 370 */         at = new OAuthAccessToken();
/* 371 */         at.setStatus(Integer.valueOf(1));
/*     */       }
/*     */     }
/* 374 */     return at;
/*     */   }


public static OAuthAccessToken getAuthedAccessToken(String code)
/*     */   {
/* 347 */     log.info("获取网页access token");
/* 348 */     OAuthAccessToken at = null;
/* 349 */     String url = url_get_webpage_token.replace("APPID", appId)
/* 350 */       .replace("SECRET", appSecret)
/* 351 */       .replace("CODE", code);
/* 352 */     JSONObject o = JSONSupport.getJSONData(url);
/* 353 */     if (o != null) {
/* 354 */       log.info("微信高级接口=》获取网页access_token接口=>" + o.toString());
/* 355 */       String result = o.toString();
/* 356 */       if (!(result.contains("errcode")))
/*     */       {
/* 358 */         String access_token = o.getString("access_token");
/* 359 */         String openid = o.getString("openid");
/* 360 */         Long expires_in = Long.valueOf(o.getLong("expires_in"));
/* 361 */         String refresh_token = o.getString("refresh_token");
/*     */
/* 363 */         at = new OAuthAccessToken();
/* 364 */         at.setAccess_token(access_token);
/* 365 */         at.setExpires_in(expires_in);
/* 366 */         at.setRefresh_token(refresh_token);
/* 367 */         at.setOpenid(openid);
/* 368 */         at.setStatus(Integer.valueOf(0));
/*     */       } else {
/* 370 */         at = new OAuthAccessToken();
/* 371 */         at.setStatus(Integer.valueOf(1));
/*     */       }
/*     */     }
/* 374 */     return at;
/*     */   }
详细请看一下链接https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐