All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.tmsps.ne4weixin.api.OAuthAPI Maven / Gradle / Ivy

There is a newer version: 3.2.2.3
Show newest version
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);
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy