package com.care.client.service; import com.care.client.vo.MemberInfoVO; import com.care.client.vo.MemberInitParams; import com.care.common.cache.RedisKeyConstant; import com.care.common.cache.RedisUtil; import com.care.common.entity.CareMemberInfo; import com.care.common.enums.ValidStatusEnum; import com.care.common.exception.BDException; import com.care.common.service.CareMemberInfoService; import com.care.common.util.CheckUtils; import com.care.common.util.Result; import com.care.common.util.WxUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.Date; @Slf4j @Service public class PassportService extends AbstractPassportService { @Resource private RedisUtil redisUtil; @Resource private WxPassportService wxPassportService; @Resource private CareMemberInfoService careMemberInfoService; public Result login(MemberInitParams params) { if ("wx".equalsIgnoreCase(params.getLoginType())) { CheckUtils.valueIsNull(params, "code"); CareMemberInfo careMemberInfo = wxPassportService.login(params); if(careMemberInfo != null){ if (ValidStatusEnum.INVALID.getValue().equals(careMemberInfo.getStatus())){ return Result.error("用户已经停用"); } params.setPhone(careMemberInfo.getPhone()); params.setOpenid(careMemberInfo.getOpenId()); return cache(params); } else { return Result.success(); } } else if ("pwd".equalsIgnoreCase(params.getLoginType())) { CheckUtils.valueIsNull(params, "phone"); CheckUtils.valueIsNull(params, "password"); return cache(params); } return Result.error(); } public void logout(String token) { CheckUtils.notNull(token, "token"); MemberInfoVO memberInfoVO = (MemberInfoVO) redisUtil.hget(RedisKeyConstant.PINANBAO_LOGIN_INFO, token); if (memberInfoVO != null) { redisUtil.hset(RedisKeyConstant.PINANBAO_LOGIN_INFO, token, null); } } public MemberInfoVO checkToken(String token) { CheckUtils.notNull(token, "token"); if (!redisUtil.hHasKey(RedisKeyConstant.PINANBAO_LOGIN_INFO, token)) { throw new BDException(400002, "TOKEN WAS WRONG :[{"+token+"}]" ); } return (MemberInfoVO) redisUtil.hget(RedisKeyConstant.PINANBAO_LOGIN_INFO, token); } public Boolean changePwd(String password,Long memberId) { CareMemberInfo careMemberInfo = careMemberInfoService.getById(memberId); careMemberInfo.setPassword(DigestUtils.md5Hex(password)); return careMemberInfoService.updateById(careMemberInfo); } public Result decodePhoneNumber(String code, String encryptedData,String iv) { MemberInitParams params = (MemberInitParams) redisUtil.hget(RedisKeyConstant.PINANBAO_WX_LOGIN_INFO, code); String openId = params.getOpenid(); if (StringUtils.isEmpty(openId)){ return Result.error(); } String unionId = params.getUnionid(); //判断是否注册过了 CareMemberInfo careMemberInfoDb = careMemberInfoService.detailByOpenid(openId); if(careMemberInfoDb != null) { return cache(params); } String sessionKey = params.getSessionKey(); log.warn("encryptedData==" + encryptedData); log.warn("sessionKey==" + sessionKey); log.warn("iv==" + iv); String phone = WxUtil.getPhoneNumber(encryptedData,sessionKey,iv); if (StringUtils.isEmpty(phone)) { return Result.error(); } params.setPhone(phone); CareMemberInfo member = careMemberInfoService.detailByPhone(phone); if (member == null) { //注册新用户 CareMemberInfo careMemberInfo = new CareMemberInfo(); careMemberInfo.setPhone(phone); careMemberInfo.setOpenId(openId); careMemberInfo.setUnionId(unionId); //前端主动获取传给后台,下面不用了 // String accessToken= wxPassportService.accessToken(); // WxConfig wxConfig = platformPinanbaoConfig.wxConfig(); // // String infoUrl = MessageFormat.format(wxConfig.getInfoUrl(),accessToken, openId); // JSONObject jsonObject = HttpUtil.httpGet(infoUrl); // log.warn("-----jsonObject:[{}]", jsonObject); // if(jsonObject != null){ // String headimgurl = jsonObject.getStr("headimgurl"); // careMemberInfo.setProfile(headimgurl); // String nickname = jsonObject.getStr("nickname"); // careMemberInfo.setNickname(nickname); // int sex = jsonObject.getInt("sex"); // careMemberInfo.setGender(sex == 1 ? "M" : (sex == 2 ? "W": null)); // } careMemberInfo.setCreateTime(new Date()); boolean flag = careMemberInfoService.save(careMemberInfo); if (flag) { return cache(params); } else { return Result.error(); } } else { //已经注册了 if (StringUtils.isNotBlank(openId) && StringUtils.isNotBlank(unionId)) { boolean updated = careMemberInfoService.modifyUnionId(openId, openId); if (!updated) { log.error("修改用户平台唯一标识出现错误, openId: " + openId + "; unionId: " + unionId); } } return cache(params); } } }