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);
|
}
|
|
}
|