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