package com.github.ouyangbob.wechat.authorize; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.Map; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.alibaba.fastjson.JSONObject; import com.github.ouyangbob.http.HttpUtil; import com.github.ouyangbob.wechat.WechatConstants; import com.github.ouyangbob.wechat.vo.UserInfo; import com.google.common.collect.Maps; /** * 微信授权工具类 * @author ouyangbotao * */ public class WechatAuthorizeUtil { private static final Logger logger = LoggerFactory.getLogger(WechatAuthorizeUtil.class); /** * 生成授权URL * https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect * @return */ public static String generateAuthorizeUrl(String callBackUrl){ StringBuilder sb=new StringBuilder(WechatConstants.AUTHORIZE_URL); sb.append("?appid="); sb.append(WechatConstants.APPID); sb.append("&redirect_uri="); try { sb.append(URLEncoder.encode(callBackUrl,"utf-8")); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } sb.append("&response_type=code"); sb.append("&scope=snsapi_userinfo#wechat_redirect"); return sb.toString(); } /** * 通过code获取accessToken * https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code * @param code * @return */ public static AccessToken getAccessToken(String code){ Map<String,String> paramMap=Maps.newHashMap(); paramMap.put("appid", WechatConstants.APPID); paramMap.put("secret", WechatConstants.APPSECRET); paramMap.put("code", code); paramMap.put("grant_type", "authorization_code"); String body=HttpUtil.getRequest(WechatConstants.AUTHORIZE_GET_ACCESSTOKEN_URL,paramMap); AccessToken accessToken=JSONObject.parseObject(body, AccessToken.class); if(StringUtils.isNotEmpty(accessToken.getErrCode())){ logger.error("getAccessToken param:{},error:{}",paramMap,accessToken); } return accessToken; } /** * 通过code获取accessToken http:GET(请使用https协议) https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN * @param code * @return */ public static UserInfo getUserInfo(AccessToken accessToken){ Map<String,String> paramMap=Maps.newHashMap(); paramMap.put("access_token", accessToken.getAccessToken()); paramMap.put("openid", accessToken.getOpenid()); paramMap.put("lang", "zh_CN"); String body=HttpUtil.getRequest(WechatConstants.AUTHORIZE_GET_USERINFO_URL,paramMap); UserInfo userInfo=JSONObject.parseObject(body, UserInfo.class); if(StringUtils.isNotEmpty(userInfo.getErrCode())){ logger.error("getUserInfo param:{},error:{}",paramMap,accessToken); } return userInfo; } }