调整公众号登录取用户头像

This commit is contained in:
TinyAnts 2023-03-30 11:24:37 +08:00
parent e3264ea20e
commit 66e4f40bb3
1 changed files with 43 additions and 7 deletions

View File

@ -7,7 +7,6 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Assert; import com.baomidou.mybatisplus.core.toolkit.Assert;
import com.mdd.common.entity.user.User; import com.mdd.common.entity.user.User;
import com.mdd.common.entity.user.UserAuth; import com.mdd.common.entity.user.UserAuth;
import com.mdd.common.enums.ClientEnum;
import com.mdd.common.enums.NoticeEnum; import com.mdd.common.enums.NoticeEnum;
import com.mdd.common.exception.OperateException; import com.mdd.common.exception.OperateException;
import com.mdd.common.mapper.user.UserAuthMapper; import com.mdd.common.mapper.user.UserAuthMapper;
@ -29,6 +28,7 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.util.Map; import java.util.Map;
@ -153,7 +153,7 @@ public class LoginServiceImpl implements ILoginService {
String uniId = sessionResult.getUnionid(); String uniId = sessionResult.getUnionid();
String unionId = uniId == null ? "0" : uniId; String unionId = uniId == null ? "0" : uniId;
return this.__wxLoginHandle(openId, unionId, terminal); return this.__wxLoginHandle(openId, unionId, "", "", terminal);
} catch (WxErrorException e) { } catch (WxErrorException e) {
throw new OperateException(e.getError().getErrorCode() + ", " + e.getError().getErrorMsg()); throw new OperateException(e.getError().getErrorCode() + ", " + e.getError().getErrorMsg());
} }
@ -175,7 +175,20 @@ public class LoginServiceImpl implements ILoginService {
String uniId = wxOAuth2AccessToken.getUnionId(); String uniId = wxOAuth2AccessToken.getUnionId();
String openId = wxOAuth2AccessToken.getOpenId(); String openId = wxOAuth2AccessToken.getOpenId();
String unionId = uniId == null ? "0" : uniId; String unionId = uniId == null ? "0" : uniId;
return this.__wxLoginHandle(openId, unionId, terminal);
String avatar = "";
String nickname = "";
try {
String accessToken = wxOAuth2AccessToken.getAccessToken();
String userInfoUri = "https://api.weixin.qq.com/sns/userinfo?access_token=%s&openid=%s";
String userInfoUrl = String.format(userInfoUri, accessToken, openId);
String resultInfo = HttpUtils.sendGet(userInfoUrl);
Map<String, String> resultMap = MapUtils.jsonToMap(resultInfo);
avatar = resultMap.get("headimgurl");
nickname = resultMap.get("nickname");
} catch (Exception ignored) {}
return this.__wxLoginHandle(openId, unionId, avatar, nickname, terminal);
} catch (WxErrorException e) { } catch (WxErrorException e) {
throw new OperateException(e.getError().getErrorCode() + ", " + e.getError().getErrorMsg()); throw new OperateException(e.getError().getErrorCode() + ", " + e.getError().getErrorMsg());
} }
@ -283,7 +296,10 @@ public class LoginServiceImpl implements ILoginService {
String openId = userinfoMap.get("openid"); String openId = userinfoMap.get("openid");
String uniId = userinfoMap.get("unionid"); String uniId = userinfoMap.get("unionid");
String unionId = uniId == null ? "0" : uniId; String unionId = uniId == null ? "0" : uniId;
return this.__wxLoginHandle(openId, unionId, terminal); String avatar = resultMap.getOrDefault("headimgurl", "");
String nickname = resultMap.getOrDefault("nickname", "");
return this.__wxLoginHandle(openId, unionId, avatar, nickname, terminal);
} }
/** /**
@ -292,9 +308,11 @@ public class LoginServiceImpl implements ILoginService {
* @param openId (openId) * @param openId (openId)
* @param unionId (unionId) * @param unionId (unionId)
* @param terminal (terminal) * @param terminal (terminal)
* @param avatar (用户头像)
* @param nickname (用户昵称)
* @return LoginTokenVo * @return LoginTokenVo
*/ */
private LoginTokenVo __wxLoginHandle(String openId, String unionId, Integer terminal) { private LoginTokenVo __wxLoginHandle(String openId, String unionId, String avatar, String nickname, Integer terminal) {
// 查询授权 // 查询授权
UserAuth userAuth = userAuthMapper.selectOne(new QueryWrapper<UserAuth>() UserAuth userAuth = userAuthMapper.selectOne(new QueryWrapper<UserAuth>()
.nested(wq->wq .nested(wq->wq
@ -314,10 +332,28 @@ public class LoginServiceImpl implements ILoginService {
// 创建用户 // 创建用户
if (StringUtils.isNull(user)) { if (StringUtils.isNull(user)) {
Integer sn = this.__generateSn(); Integer sn = this.__generateSn();
String defaultAvatar = "/api/static/default_avatar.png";
String defaultNickname = "用户" + sn;
if (StringUtils.isNotEmpty(avatar)) {
try {
Long time = System.currentTimeMillis();
String date = TimeUtils.millisecondToDate(time, "yyyyMMdd");
String name = ToolUtils.makeMd5(ToolUtils.makeUUID()+time) + ".jpg";
String path = "avatar" + date + "/" + name;
ToolUtils.download(avatar, YmlUtils.get("like.upload-directory"), path);
defaultAvatar = path;
} catch (IOException ignored) {}
}
if (StringUtils.isNotEmpty(nickname)) {
defaultNickname = nickname;
}
User model = new User(); User model = new User();
model.setSn(sn); model.setSn(sn);
model.setAvatar("/api/static/default_avatar.png"); model.setAvatar(defaultAvatar);
model.setNickname("用户" + sn); model.setNickname(defaultNickname);
model.setUsername("u" + sn); model.setUsername("u" + sn);
model.setChannel(terminal); model.setChannel(terminal);
model.setSex(0); model.setSex(0);