public class VipUser implements Serializable {
private static final long serialVersionUID = 1L;
/**
* id
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 微信openid
*/
private String openid;
/**
* 昵称
*/
private String nickName;
/**
* 头像
*/
private String headImg;
/**
* 创建时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createAt;
/**
* 修改时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateAt;
/**
* 密码
*/
private String password;
}
上述代码是用来存放用户信息的实体类
public class WXReturnAuthData implements Serializable {
/**
* 用户唯一标识
*/
private String openid;
/**
* 会话密钥
*/
private String session_key;
/**
* 用户在开放平台的唯一标识符
*/
private String unionid;
/**
* 错误码
*/
private int errcode;
/**
* 错误信息
*/
private String errmsg;
}
上述代码是提前写好的实体类,用来存储微信返回的数据转化json
public JSONObject userInfo( JSONObject postParams) {
logger.info("===小程序端上送的用户数据为===:"+postParams);
String code = postParams.getString("code");
JSONObject rawDataJson = postParams.getJSONObject("raw_data");
//用户昵称
String wxNickName = rawDataJson.getString("nickName");
//头像图片地址
String wxAvatarUrl = rawDataJson.getString("avatarUrl");
String url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + WXConfigConstant.appid + "&secret=" + WXConfigConstant.secret + "&js_code=" + code + "&grant_type=authorization_code";
RestTemplate restTemplate = new RestTemplate();
String res = restTemplate.getForObject(url,String.class);
//微信返回的数据为:{"session_key":"ahfoashohfd","openid":"asfoiashfoasihfohasf"}
logger.info("微信返回的数据为:"+res);
WXReturnAuthData wxRet = JSONObject.parseObject(res, WXReturnAuthData.class);
logger.info("微信数据转化json:"+wxRet);
if (wxRet == null) {
//抛出 授权错误,请获取授权或重试
throw new UserDefinedException(ResultTypeEnum.WX_AUTH_ERROR);
}
if (0 != wxRet.getErrcode()) {
//抛出 授权错误,请获取授权或重试 以及错误信息
throw new UserDefinedException(ResultTypeEnum.WX_AUTH_ERROR, WXConfigConstant.WX_CODE_MSG_MAP.get(wxRet.getErrcode()+""));
}
String openid = wxRet.getOpenid();
VipUser vipUser = new VipUser();
vipUser.setOpenid(openid);
vipUser.setNickName(wxNickName);
vipUser.setHeadImg(wxAvatarUrl);
vipUser.setCreateAt(new Date());
vipUser.setUpdateAt(new Date());
VipUser user = vipUserService.queryByOpenId(vipUser.getOpenid());
if (user == null ){
vipUserService.save(vipUser);
}else {
if(!StringUtils.isEmpty(userPhone) || !StringUtils.isEmpty(wxNickName)){
if(!StringUtils.isEmpty(userPhone)){
user.setPhoneNum(userPhone);
}
if(!StringUtils.isEmpty(wxNickName)){
user.setNickName(wxNickName);
}
vipUserService.saveOrUpdate(user);
}
vipUser = user;
}
JSONObject userJson = new JSONObject();
userJson.put("id",id);
userJson.put("avatar",vipUser.getHeadImg());
userJson.put("openid",vipUser.getOpenid());
userJson.put("user_nickname",vipUser.getNickName());
return userJson;
}
上述代码中,WXConfigConstant.appid是提前写好的常量小程序ID,WXConfigConstant.secret是提前写好的常量小程序秘钥