6.3.3 方法封装
1.封装获取access_token方法
笔者将调用接口获取网页授权access_token的操作封装成getOauth2AccessToken()方法,该方法的实现如下:
- /**
- * 获取网页授权凭证
- *
- * @param appId 公众账号的唯一标识
- * @param appSecret 公众账号的密钥
- * @param code
- * @return WeixinAouth2Token
- */
- public static WeixinOauth2Token getOauth2AccessToken(String appId,
- String appSecret, String code) {
- WeixinOauth2Token wat = null;
- // 拼接请求地址
- String requestUrl = "https:// api.weixin.qq.com/sns/oauth2/
- access_token?appid=APPID&secret=SECRET&code=COD
- E&grant_type=authorization_code";
- requestUrl = requestUrl.replace("APPID", appId);
- requestUrl = requestUrl.replace("SECRET", appSecret);
- requestUrl = requestUrl.replace("CODE", code);
- // 获取网页授权凭证
- JSONObject jsonObject = CommonUtil.httpsRequest(requestUrl, "GET", null);
- if (null != jsonObject) {
- try {
- wat = new WeixinOauth2Token();
- wat.setAccessToken(jsonObject.getString("access_token"));
- wat.setExpiresIn(jsonObject.getInt("expires_in"));
- wat.setRefreshToken(jsonObject.getString("refresh_token"));
- wat.setOpenId(jsonObject.getString("openid"));
- wat.setScope(jsonObject.getString("scope"));
- } catch (Exception e) {
- wat = null;
- int errorCode = jsonObject.getInt("errcode");
- String errorMsg = jsonObject.getString("errmsg");
- log.error("获取网页授权凭证失败 errcode:{} errmsg:{}", errorCode, errorMsg);
- }
- }
- return wat;
- }
getOauth2AccessToken()方法的返回值是WeixinOauth2Token对象,它封装了调用接口返回的所有参数,该类的代码如下:
- package org.liufeng.course.pojo;
- /**
- * 网页授权信息
- *
- * @author liufeng
- * @date 2013-11-09
- */
- public class WeixinOauth2Token {
- // 网页授权接口调用凭证
- private String accessToken;
- // 凭证有效时长
- private int expiresIn;
- // 用于刷新凭证
- private String refreshToken;
- // 用户标识
- private String openId;
- // 用户授权作用域
- private String scope;
- public String getAccessToken() {
- return accessToken;
- }
- public void setAccessToken(String accessToken) {
- this.accessToken = accessToken;
- }
- public int getExpiresIn() {
- return expiresIn;
- }
- public void setExpiresIn(int expiresIn) {
- this.expiresIn = expiresIn;
- }
- public String getRefreshToken() {
- return refreshToken;
- }
- public void setRefreshToken(String refreshToken) {
- this.refreshToken = refreshToken;
- }
- public String getOpenId() {
- return openId;
- }
- public void setOpenId(String openId) {
- this.openId = openId;
- }
- public String getScope() {
- return scope;
- }
- public void setScope(String scope) {
- this.scope = scope;
- }
- }
2.封装刷新access_token方法
笔者将调用接口刷新网页授权access_token的操作封装成refreshOauth2AccessToken()方法,该方法的实现如下:
- /**
- * 刷新网页授权凭证
- *
- * @param appId 公众账号的唯一标识
- * @param refreshToken
- * @return WeixinAouth2Token
- */
- public static WeixinOauth2Token refreshOauth2AccessToken
- (String appId, String refreshToken) {
- WeixinOauth2Token wat = null;
- // 拼接请求地址
- String requestUrl = "https:// api.weixin.qq.com/sns/oauth2/
- refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN";
- requestUrl = requestUrl.replace("APPID", appId);
- requestUrl = requestUrl.replace("REFRESH_TOKEN", refreshToken);
- // 刷新网页授权凭证
- JSONObject jsonObject = CommonUtil.httpsRequest(requestUrl, "GET", null);
- if (null != jsonObject) {
- try {
- wat = new WeixinOauth2Token();
- wat.setAccessToken(jsonObject.getString("access_token"));
- wat.setExpiresIn(jsonObject.getInt("expires_in"));
- wat.setRefreshToken(jsonObject.getString("refresh_token"));
- wat.setOpenId(jsonObject.getString("openid"));
- wat.setScope(jsonObject.getString("scope"));
- } catch (Exception e) {
- wat = null;
- int errorCode = jsonObject.getInt("errcode");
- String errorMsg = jsonObject.getString("errmsg");
- log.error("刷新网页授权凭证失败 errcode:{} errmsg:{}", errorCode,
- errorMsg);
- }
- }
- return wat;
- }
refreshOauth2AccessToken()方法的返回值也是WeixinOauth2Token对象,前面有该方法的定义。
3.封装获取用户信息方法
笔者将通过网页授权access_token获取用户信息的操作封装成getSNSUserInfo()方法,该方法的实现如下:
- /**
- * 通过网页授权获取用户信息
- *
- * @param accessToken 网页授权接口调用凭证
- * @param openId 用户标识
- * @return SNSUserInfo
- */
- @SuppressWarnings( { "deprecation", "unchecked" })
- public static SNSUserInfo getSNSUserInfo(String accessToken, String openId) {
- SNSUserInfo snsUserInfo = 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);
- // 通过网页授权获取用户信息
- JSONObject jsonObject = CommonUtil.httpsRequest(requestUrl, "GET", null);
- if (null != jsonObject) {
- try {
- snsUserInfo = new SNSUserInfo();
- // 用户的标识
- snsUserInfo.setOpenId(jsonObject.getString("openid"));
- // 昵称
- snsUserInfo.setNickname(jsonObject.getString("nickname"));
- // 性别(1是男性,2是女性,0是未知)
- snsUserInfo.setSex(jsonObject.getInt("sex"));
- // 用户所在国家
- snsUserInfo.setCountry(jsonObject.getString("country"));
- // 用户所在省份
- snsUserInfo.setProvince(jsonObject.getString("province"));
- // 用户所在城市
- snsUserInfo.setCity(jsonObject.getString("city"));
- // 用户头像
- snsUserInfo.setHeadImgUrl(jsonObject.getString("headimgurl"));
- // 用户特权信息
- snsUserInfo.setPrivilegeList (JSONArray.toList
- (jsonObject.getJSONArray("privilege"), List.class));
- } catch (Exception e) {
- snsUserInfo = null;
- int errorCode = jsonObject.getInt("errcode");
- String errorMsg = jsonObject.getString("errmsg");
- log.error("获取用户信息失败 errcode:{} errmsg:{}", errorCode, errorMsg);
- }
- }
- return snsUserInfo;
- }
getSNSUserInfo()方法的返回值是SNSUserInfo对象,它封装了调用接口返回的所有参数,该类的代码如下:
- package org.liufeng.course.pojo;
- import java.util.List;
- /**
- * 通过网页授权获取的用户信息
- *
- * @author liufeng
- * @date 2013-11-09
- */
- public class SNSUserInfo {
- // 用户标识
- private String openId;
- // 用户昵称
- private String nickname;
- // 性别(1是男性,2是女性,0是未知)
- private int sex;
- // 国家
- private String country;
- // 省份
- private String province;
- // 城市
- private String city;
- // 用户头像链接
- private String headImgUrl;
- // 用户特权信息
- private List<String> privilegeList;
- public String getOpenId() {
- return openId;
- }
- public void setOpenId(String openId) {
- this.openId = openId;
- }
- public String getNickname() {
- return nickname;
- }
- public void setNickname(String nickname) {
- this.nickname = nickname;
- }
- public int getSex() {
- return sex;
- }
- public void setSex(int sex) {
- this.sex = sex;
- }
- public String getCountry() {
- return country;
- }
- public void setCountry(String country) {
- this.country = country;
- }
- public String getProvince() {
- return province;
- }
- public void setProvince(String province) {
- this.province = province;
- }
- public String getCity() {
- return city;
- }
- public void setCity(String city) {
- this.city = city;
- }
- public String getHeadImgUrl() {
- return headImgUrl;
- }
- public void setHeadImgUrl(String headImgUrl) {
- this.headImgUrl = headImgUrl;
- }
- public List<String> getPrivilegeList() {
- return privilegeList;
- }
- public void setPrivilegeList(List<String> privilegeList) {
- this.privilegeList = privilegeList;
- }
- }