|
@ -1,36 +1,47 @@ |
|
|
package org.jeecg.modules.apiService.impl; |
|
|
package org.jeecg.modules.apiService.impl; |
|
|
|
|
|
|
|
|
import com.alibaba.fastjson.JSONObject; |
|
|
import com.alibaba.fastjson.JSONObject; |
|
|
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
import org.apache.commons.lang3.StringUtils; |
|
|
import org.apache.commons.lang3.StringUtils; |
|
|
import org.jeecg.common.api.vo.Result; |
|
|
import org.jeecg.common.api.vo.Result; |
|
|
import org.jeecg.common.constant.CommonConstant; |
|
|
import org.jeecg.common.constant.CommonConstant; |
|
|
import org.jeecg.common.exception.JeecgBootException; |
|
|
import org.jeecg.common.exception.JeecgBootException; |
|
|
import org.jeecg.common.system.util.JwtUtil; |
|
|
import org.jeecg.common.system.util.JwtUtil; |
|
|
|
|
|
import org.jeecg.common.util.PasswordUtil; |
|
|
import org.jeecg.common.util.RedisUtil; |
|
|
import org.jeecg.common.util.RedisUtil; |
|
|
import org.jeecg.modules.apiService.LoginApiService; |
|
|
import org.jeecg.modules.apiService.LoginApiService; |
|
|
|
|
|
import org.jeecg.modules.bean.ConvertUtils; |
|
|
import org.jeecg.modules.bean.HttpConf; |
|
|
import org.jeecg.modules.bean.HttpConf; |
|
|
import org.jeecg.modules.bean.LoginReq; |
|
|
import org.jeecg.modules.bean.LoginReq; |
|
|
|
|
|
import org.jeecg.modules.bean.OfficialLoginBean; |
|
|
import org.jeecg.modules.hanHaiMember.entity.HanHaiMember; |
|
|
import org.jeecg.modules.hanHaiMember.entity.HanHaiMember; |
|
|
import org.jeecg.modules.hanHaiMember.service.IHanHaiMemberService; |
|
|
import org.jeecg.modules.hanHaiMember.service.IHanHaiMemberService; |
|
|
|
|
|
import org.springframework.beans.factory.annotation.Value; |
|
|
import org.springframework.stereotype.Service; |
|
|
import org.springframework.stereotype.Service; |
|
|
|
|
|
|
|
|
import javax.annotation.Resource; |
|
|
import javax.annotation.Resource; |
|
|
|
|
|
import javax.transaction.Transactional; |
|
|
import java.io.BufferedReader; |
|
|
import java.io.BufferedReader; |
|
|
import java.io.DataOutputStream; |
|
|
import java.io.DataOutputStream; |
|
|
import java.io.InputStreamReader; |
|
|
import java.io.InputStreamReader; |
|
|
|
|
|
import java.io.UnsupportedEncodingException; |
|
|
import java.net.HttpURLConnection; |
|
|
import java.net.HttpURLConnection; |
|
|
import java.net.URL; |
|
|
import java.net.URL; |
|
|
import java.nio.charset.StandardCharsets; |
|
|
import java.nio.charset.StandardCharsets; |
|
|
|
|
|
import java.util.Date; |
|
|
import java.util.HashMap; |
|
|
import java.util.HashMap; |
|
|
import java.util.Map; |
|
|
import java.util.Map; |
|
|
|
|
|
|
|
|
|
|
|
@Slf4j |
|
|
@Service |
|
|
@Service |
|
|
public class LoginApiServiceImpl implements LoginApiService { |
|
|
public class LoginApiServiceImpl implements LoginApiService { |
|
|
/******************************************************************************************************************/ |
|
|
/******************************************************************************************************************/ |
|
|
//微信小程序appid(愈然工坊) |
|
|
|
|
|
private static final String mpAppId = "wx77ba4c7131677a74"; |
|
|
|
|
|
//微信小程序appSecret(愈然工坊) |
|
|
|
|
|
private static final String mpAppSecret = "fb915d623f92d455f2e70934f75fb96c"; |
|
|
|
|
|
|
|
|
//微信小程序的 AppID |
|
|
|
|
|
@Value("${wx.miniapp.wxAppid}") |
|
|
|
|
|
private String mpAppId; |
|
|
|
|
|
//微信小程序的 AppID |
|
|
|
|
|
@Value("${wx.miniapp.wxSecret}") |
|
|
|
|
|
private String mpAppSecret; |
|
|
|
|
|
|
|
|
@Resource |
|
|
@Resource |
|
|
private RedisUtil redisUtil; |
|
|
private RedisUtil redisUtil; |
|
@ -41,7 +52,114 @@ public class LoginApiServiceImpl implements LoginApiService { |
|
|
@Resource |
|
|
@Resource |
|
|
private HttpConf httpConf; |
|
|
private HttpConf httpConf; |
|
|
/******************************************************************************************************************/ |
|
|
/******************************************************************************************************************/ |
|
|
|
|
|
//公众号授权登录 |
|
|
|
|
|
@Override |
|
|
|
|
|
public Result<?> wxOfficialLogin(OfficialLoginBean bean){ |
|
|
|
|
|
LoginReq req = new LoginReq(); |
|
|
|
|
|
req.setCode(bean.getCode()); |
|
|
|
|
|
req.setHeadimgurl(bean.getHeadimgurl()); |
|
|
|
|
|
req.setOpenid(bean.getOpenid()); |
|
|
|
|
|
req.setNickName(bean.getNickName()); |
|
|
|
|
|
req.setVid(bean.getVid()); |
|
|
|
|
|
return officialLogin(req); |
|
|
|
|
|
} |
|
|
|
|
|
/** |
|
|
|
|
|
* 公众号授权登录注册 |
|
|
|
|
|
* @param loginReq |
|
|
|
|
|
* @return |
|
|
|
|
|
*/ |
|
|
|
|
|
@Transactional |
|
|
|
|
|
public Result<?> officialLogin(LoginReq loginReq){ |
|
|
|
|
|
Map<Object, Object> loginMap = new HashMap<>(); |
|
|
|
|
|
if (org.apache.commons.lang.StringUtils.isBlank(loginReq.getCode())) { |
|
|
|
|
|
throw new JeecgBootException("code为空"); |
|
|
|
|
|
} |
|
|
|
|
|
String loginUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" +mpAppId + "&secret=" + mpAppSecret + "&code=" + loginReq.getCode() + "&grant_type=authorization_code"; |
|
|
|
|
|
//使用工具类 |
|
|
|
|
|
JSONObject json_test = httpConf.getJSONObject(loginUrl); |
|
|
|
|
|
log.info("{} {} -- {}", mpAppId, mpAppSecret, json_test); |
|
|
|
|
|
String wxOpenid = json_test.getString("openid"); |
|
|
|
|
|
String wxUnionId = json_test.getString("unionid"); |
|
|
|
|
|
String access_token = json_test.getString("access_token"); |
|
|
|
|
|
if (org.apache.commons.lang.StringUtils.isBlank(wxOpenid)) { |
|
|
|
|
|
throw new JeecgBootException("未获取到openid"); |
|
|
|
|
|
} |
|
|
|
|
|
HanHaiMember member = hanHaiMemberService.lambdaQuery().eq(HanHaiMember::getOfficialOpenid,wxOpenid).one(); |
|
|
|
|
|
if(member!=null){ |
|
|
|
|
|
//开始获取用户信息 |
|
|
|
|
|
String memberUrl = "https://api.weixin.qq.com/sns/userinfo?access_token="+access_token+"&openid="+wxOpenid+"&lang=zh_CN"; |
|
|
|
|
|
//使用工具类 |
|
|
|
|
|
JSONObject json_member = httpConf.getJSONObject(memberUrl); |
|
|
|
|
|
String nickname = json_member.getString("nickname"); |
|
|
|
|
|
String headimgurl = json_member.getString("headimgurl"); |
|
|
|
|
|
try { |
|
|
|
|
|
nickname = new String(nickname.getBytes("ISO-8859-1"),"UTF-8"); |
|
|
|
|
|
} catch (UnsupportedEncodingException e) { |
|
|
|
|
|
e.printStackTrace(); |
|
|
|
|
|
} |
|
|
|
|
|
member.setNickName(nickname); |
|
|
|
|
|
member.setHeadImage(headimgurl); |
|
|
|
|
|
member.setWxUnionid(wxUnionId); |
|
|
|
|
|
String token = JwtUtil.sign(member.getAccount(), member.getAccount()); |
|
|
|
|
|
member.setToken(token); |
|
|
|
|
|
member.setUpdateTime(new Date()); |
|
|
|
|
|
hanHaiMemberService.updateById(member); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 生成token返回 |
|
|
|
|
|
redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token); |
|
|
|
|
|
// 设置超时时间 |
|
|
|
|
|
redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME / 100); |
|
|
|
|
|
loginMap.put("token",token); |
|
|
|
|
|
loginMap.put("userInfo",member); |
|
|
|
|
|
return Result.OK("登录成功",loginMap); |
|
|
|
|
|
} |
|
|
|
|
|
//开始获取用户信息 |
|
|
|
|
|
String memberUrl = "https://api.weixin.qq.com/sns/userinfo?access_token="+access_token+"&openid="+wxOpenid+"&lang=zh_CN"; |
|
|
|
|
|
//使用工具类 |
|
|
|
|
|
JSONObject json_member = httpConf.getJSONObject(memberUrl); |
|
|
|
|
|
String nickname = json_member.getString("nickname"); |
|
|
|
|
|
String headimgurl = json_member.getString("headimgurl"); |
|
|
|
|
|
try { |
|
|
|
|
|
nickname = new String(nickname.getBytes("ISO-8859-1"),"UTF-8"); |
|
|
|
|
|
} catch (UnsupportedEncodingException e) { |
|
|
|
|
|
e.printStackTrace(); |
|
|
|
|
|
} |
|
|
|
|
|
HanHaiMember save = new HanHaiMember(); |
|
|
|
|
|
save.setAccount(wxOpenid); |
|
|
|
|
|
save.setVid(loginReq.getVid()); |
|
|
|
|
|
save.setVtime(new Date()); |
|
|
|
|
|
save.setNickName(nickname); |
|
|
|
|
|
save.setHeadImage(headimgurl); |
|
|
|
|
|
save.setWxUnionid(wxUnionId); |
|
|
|
|
|
|
|
|
|
|
|
//销售邀请者标识 |
|
|
|
|
|
save.setShareId(loginReq.getShareId()); |
|
|
|
|
|
save.setOfficialOpenid(wxOpenid); |
|
|
|
|
|
save.setCreateTime(new Date()); |
|
|
|
|
|
//密码加密 |
|
|
|
|
|
String salt = ConvertUtils.randomGen(8); |
|
|
|
|
|
String encrypt = PasswordUtil.encrypt(wxOpenid,"123456" , salt); |
|
|
|
|
|
save.setPassword(encrypt); |
|
|
|
|
|
save.setPasswordSalt(salt); |
|
|
|
|
|
save.setDeleteFlag("N"); |
|
|
|
|
|
save.setRole("0"); |
|
|
|
|
|
|
|
|
|
|
|
// 生成token返回 |
|
|
|
|
|
String token = JwtUtil.sign(wxOpenid, wxOpenid); |
|
|
|
|
|
save.setToken(token); |
|
|
|
|
|
|
|
|
|
|
|
hanHaiMemberService.save(save); |
|
|
|
|
|
|
|
|
|
|
|
redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token); |
|
|
|
|
|
// 设置超时时间 |
|
|
|
|
|
redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME / 100); |
|
|
|
|
|
loginMap.put("token",token); |
|
|
|
|
|
loginMap.put("userInfo",save); |
|
|
|
|
|
return Result.OK("登录成功",loginMap); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//微信小程序授权登录 |
|
|
@Override |
|
|
@Override |
|
|
public Result<?> login(LoginReq loginReq) { |
|
|
public Result<?> login(LoginReq loginReq) { |
|
|
Result<Object> result = new Result<>(); |
|
|
Result<Object> result = new Result<>(); |
|
@ -106,6 +224,7 @@ public class LoginApiServiceImpl implements LoginApiService { |
|
|
return result; |
|
|
return result; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//绑定微信手机号 |
|
|
@Override |
|
|
@Override |
|
|
public Result<Object> bindPhone(String phoneCode) { |
|
|
public Result<Object> bindPhone(String phoneCode) { |
|
|
try { |
|
|
try { |
|
|