com.tmsps.ne4weixin.api.OAuthAPI Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of ne4weixin Show documentation
Show all versions of ne4weixin Show documentation
Ne4WeiXin For Spring is good :)
package com.tmsps.ne4weixin.api;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import javax.servlet.http.HttpServletResponse;
import com.alibaba.fastjson.JSONObject;
import com.tmsps.ne4weixin.bean.BaseResultBean;
import com.tmsps.ne4weixin.bean.OAuthToken;
import com.tmsps.ne4weixin.bean.UserInfo;
import com.tmsps.ne4weixin.config.WxConfig;
import com.tmsps.ne4weixin.config.constant.OAUTH2;
import com.tmsps.ne4weixin.utils.WXHttpUtil;
import cn.hutool.core.util.StrUtil;
import lombok.extern.slf4j.Slf4j;
/**
* @Title: OAuthAPI.java
* @Package: com.tmsps.ne4weixin.api
* @Description: 网页授权管理API
* @author: hanjiefei
* @date: 2019-10-22
* @version V1.0
* @Copyright: 2019
*/
@Slf4j
public class OAuthAPI extends BaseAPI {
public OAuthAPI(WxConfig wxConfig) {
super(wxConfig);
}
/**
* 拉取用户信息
* @param token 网页授权接口调用凭证
* @param openId 用户的唯一标识
* @return
*/
public UserInfo getUserInfo(String token, String openId) {
String url = String.format(OAUTH2.GET_USER_INFO, token, openId, "zh_CN");
String result = WXHttpUtil.get(url);
return JSONObject.parseObject(result, UserInfo.class);
}
/**
* 拉取用户信息
* @param token 网页授权接口调用凭证
* @return
*/
public UserInfo getUserInfo(OAuthToken token){
String url = String.format(OAUTH2.GET_USER_INFO, token.getAccess_token(), token.getOpenid(), "zh_CN");
String result = WXHttpUtil.get(url);
return JSONObject.parseObject(result, UserInfo.class);
}
/**
* 获取引导用户进入授权页面url
* @param redirectUrl 授权后重定向的回调链接地址
* @param scope 应用授权作用域
* @param state 重定向后会带上state参数
* @return
*/
public String getOAuthUrl(String redirectUrl,String scope,String state) {
state = StrUtil.isEmptyIfStr(state) ? "STATE" : state;
//重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节
String regex = "^[a-z0-9A-Z]+$";
if(!state.matches(regex) || state.getBytes().length > 128){
log.error("重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节");
return null;
}
try {
return String.format(OAUTH2.GET_CODE,wxConfig.getAppid(),URLEncoder.encode(redirectUrl,"UTF-8"),scope,state);
} catch (UnsupportedEncodingException e) {
log.error("授权页面url操作异常",e);
}
return null;
}
/**
* 引导用户进入授权页面
* @param redirectUrl 授权后重定向的回调链接地址
* @param scope 应用授权作用域
* @param state 重定向后会带上state参数
* @return
* @deprecated : 此功能由业务开发者自己定义比较好。
*/
@Deprecated
public void goOAuthView(String redirectUrl,String scope,String state,HttpServletResponse response) {
String url = this.getOAuthUrl(redirectUrl, scope, state);
//重定向到授权页面
try {
response.sendRedirect(url);
} catch (IOException e) {
log.error("重定向到授权页面异常",e);
}
}
/**
* 通过code换取网页授权access_token
* @param code
* @return
*/
public OAuthToken getAccessToken(String code) {
String url = String.format(OAUTH2.GET_ACCESS_TOKEN,wxConfig.getAppid(),wxConfig.getSecret(), code);
String result = WXHttpUtil.get(url);
return JSONObject.parseObject(result, OAuthToken.class);
}
/**
* 刷新access_token
* @param token 网页授权接口调用凭证
* @return
*/
public OAuthToken refreshOAuthToken(OAuthToken token) {
String url = String.format(OAUTH2.REFRESH_ACCESS_TOKEN, wxConfig.getAppid(), token.getRefresh_token());
token.getRefresh_token();
String result = WXHttpUtil.get(url);
return JSONObject.parseObject(result, OAuthToken.class);
}
/**
* 检验授权凭证(access_token)是否有效
* @param token 网页授权接口调用凭证
* @return
*/
public BaseResultBean checkOAuthToken(OAuthToken token) {
String url = String.format(OAUTH2.CHECK_ACCESS_TOKEN, token.getAccess_token(), token.getOpenid());
String result = WXHttpUtil.get(url);
return JSONObject.parseObject(result, BaseResultBean.class);
}
}