package com.yeshi.fanli.util.wx; import org.json.JSONException; import org.json.JSONObject; import org.yeshi.utils.HttpUtil; import org.yeshi.utils.entity.FileUploadResult; import org.yeshi.utils.tencentcloud.COSManager; import com.yeshi.fanli.entity.bus.user.WeiXinUser; import com.yeshi.fanli.entity.bus.user.WeiXinUserParam; import com.yeshi.fanli.log.LogHelper; import com.yeshi.fanli.util.Constant; import com.yeshi.fanli.util.StringUtil; public class WXLoginUtil { public static String WEXIN_APPID = "wx43617e2ed82c5b28"; public static String WEXIN_SECRET = "f8a65908fb4681bdd181de70f6ab9a3b"; static String APPID = "wx5c0d167c6e3ad726"; static String SECRET = "0c79d5869bb0f2d7c13e43f9a18f440d"; static { WEXIN_APPID = Constant.systemCommonConfig.getWxGZAppId(); WEXIN_SECRET = Constant.systemCommonConfig.getWxGZAppSecret(); APPID = Constant.systemCommonConfig.getWxOpenAppId(); SECRET = Constant.systemCommonConfig.getWxOpenAppSecret(); } // 通过code获取access_token openId private static String weiXinUrl1 = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code"; public static String weiXinUrl2 = "https://api.weixin.qq.com/sns/userinfo?access_token=%s&openid=%s&lang=zh_CN"; public static WeiXinUserParam getWxParam(String code) { String wxUrl = String.format(weiXinUrl1, APPID, SECRET, code); String result = HttpUtil.get(wxUrl); WeiXinUserParam weiXinUserParam = getWeiXinUserParam(result); return weiXinUserParam; } public static WeiXinUserParam getWxWYParam(String code) { String wxUrl = String.format(weiXinUrl1, WEXIN_APPID, WEXIN_SECRET, code); String result = HttpUtil.get(wxUrl); WeiXinUserParam weiXinUserParam = getWeiXinUserParam(result); return weiXinUserParam; } public static WeiXinUser getWeiXinUser(WeiXinUserParam param) { String result = HttpUtil.getAsString(String.format(weiXinUrl2, param.getAccessToken(), param.getOpenId()), "ISO-8859-1", "UTF-8"); JSONObject jsonObject = null; try { jsonObject = new JSONObject(result); } catch (JSONException e) { e.printStackTrace(); } String nickname = jsonObject.optString("nickname"); String province = jsonObject.optString("province"); String city = jsonObject.optString("city"); String country = jsonObject.optString("country"); String headimgurl = jsonObject.optString("headimgurl"); String unionid = jsonObject.optString("unionid"); int sex = jsonObject.optInt("sex"); WeiXinUser weiXinUser = new WeiXinUser(); weiXinUser.setCity(city); weiXinUser.setCountry(country); weiXinUser.setHeadimgurl(headimgurl); weiXinUser.setNickname(nickname); weiXinUser.setOpenid(param.getOpenId()); weiXinUser.setSex(sex); weiXinUser.setUnionid(unionid); weiXinUser.setProvince(province); return weiXinUser; } private static WeiXinUser getWeiXinUser(String code) { WeiXinUserParam param = getWxParam(code); if (param == null) { return null; } WeiXinUser weiXinUser = getWeiXinUser(param); if (weiXinUser != null && StringUtil.isNullOrEmpty(weiXinUser.getUnionid()) && !StringUtil.isNullOrEmpty(param.getUnionId())) { weiXinUser.setUnionid(param.getUnionId()); } return weiXinUser; } /** * 通过code获取用户信息(伴随头像缓存) * * @param code * @return */ public static WeiXinUser getWeiXinUserWithSavePortrait(String code) { WeiXinUser user = getWeiXinUser(code); if (user != null) { if (!StringUtil.isNullOrEmpty(user.getHeadimgurl())) { FileUploadResult result = COSManager.getInstance().uploadFile( HttpUtil.getAsInputStream(user.getHeadimgurl()), String.format("/portrait/wx/%s_%s.jpg", user.getUnionid(), System.currentTimeMillis() + "")); if (result != null && !StringUtil.isNullOrEmpty(result.getUrl())) { user.setHeadimgurl(result.getUrl()); // COS删除其余头像 // String prefix = String.format("/portrait/wx/%s_", // user.getUnionid()); // ObjectListing list = // COSManager.getInstance().getObjectList(prefix, null, 30); // if (list != null && list.getObjectSummaries() != null) // for (COSObjectSummary object : list.getObjectSummaries()) // { // if (!result.getUrl().contains(object.getKey())) { // COSManager.getInstance().deleteFile(object.getKey()); // } // } } } } return user; } public static WeiXinUser getWeiXinWYUser(String code) { WeiXinUserParam param = getWxWYParam(code); if (param == null) { return null; } return getWeiXinUser(param); } private static WeiXinUserParam getWeiXinUserParam(String result) { LogHelper.test(result); WeiXinUserParam weiXinUserParam = new WeiXinUserParam(); JSONObject jsonObject = null; try { jsonObject = new JSONObject(result); } catch (JSONException e) { e.printStackTrace(); } String openId = jsonObject.optString("openid"); if ("".equals(openId)) { return null; } String accessToken = jsonObject.optString("access_token"); String refreshToken = jsonObject.optString("refresh_token"); String scope = jsonObject.optString("scope"); int expires = jsonObject.optInt("expires_in"); String unionId = jsonObject.optString("unionid"); weiXinUserParam.setRefreshToken(refreshToken); weiXinUserParam.setOpenId(openId); weiXinUserParam.setExpires(expires); weiXinUserParam.setAccessToken(accessToken); weiXinUserParam.setScope(scope); weiXinUserParam.setUnionId(unionId); return weiXinUserParam; } /** * 初始化公众号自定义菜单 */ public static void initGZMenu() { JSONObject root = new JSONObject(); // WXUtil.createMenu(accessToken, root); } }