package org.yeshi.utils.wx; import net.sf.json.JSONObject; import org.yeshi.utils.HttpUtil; import org.yeshi.utils.StringUtil; import org.yeshi.utils.entity.wx.WeiXinUser; import org.yeshi.utils.entity.wx.WeiXinUserParam; public class WXAppLoginUtil { // 通过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 appId, String appSecret) { String wxUrl = String.format(weiXinUrl1, appId, appSecret, code); String result = HttpUtil.get(wxUrl); WeiXinUserParam weiXinUserParam = parseWeiXinUserParam(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 = JSONObject.fromObject(result); 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; } public static WeiXinUser getWeiXinUser(String code, String appId, String appSecret) { WeiXinUserParam param = getWxParam(code, appId, appSecret); 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; } private static WeiXinUserParam parseWeiXinUserParam(String result) { WeiXinUserParam weiXinUserParam = new WeiXinUserParam(); JSONObject jsonObject = JSONObject.fromObject(result); 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); } }