|
|
@ -41,6 +41,12 @@ import javax.annotation.Resource; |
|
|
|
import javax.crypto.Cipher; |
|
|
|
import javax.crypto.spec.IvParameterSpec; |
|
|
|
import javax.crypto.spec.SecretKeySpec; |
|
|
|
import java.io.BufferedReader; |
|
|
|
import java.io.DataOutputStream; |
|
|
|
import java.io.InputStreamReader; |
|
|
|
import java.net.HttpURLConnection; |
|
|
|
import java.net.URL; |
|
|
|
import java.nio.charset.StandardCharsets; |
|
|
|
import java.security.AlgorithmParameters; |
|
|
|
import java.security.Security; |
|
|
|
import java.util.Arrays; |
|
|
@ -75,6 +81,72 @@ public class AppletLoginServiceImpl implements AppletLoginService { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// /** |
|
|
|
// * 微信小程序登录接口 |
|
|
|
// * @param loginReq |
|
|
|
// * @return |
|
|
|
// */ |
|
|
|
// @Transactional(rollbackFor = {Exception.class}) |
|
|
|
// public Result<Object> appletLogin(LoginReq loginReq) { |
|
|
|
// Result<Object> result = new Result<>(); |
|
|
|
// Map<String, Object> map = new HashMap<>(); |
|
|
|
// if (StringUtils.isBlank(loginReq.getCode())) { |
|
|
|
// throw new JeecgBootException("小程序code为空"); |
|
|
|
// } |
|
|
|
// String loginUrl = "https://api.weixin.qq.com/sns/jscode2session?appid=" + mpAppId + "&secret=" + mpAppSecret+ "&js_code=" + loginReq.getCode() + "&grant_type=authorization_code"; |
|
|
|
// //使用工具类 |
|
|
|
// JSONObject json_test = httpConf.getJSONObject(loginUrl); |
|
|
|
// String wxOpenid = json_test.getString("openid"); |
|
|
|
// String sessionKey = json_test.getString("session_key"); |
|
|
|
// log.info("mpAppId{}=====mpAppSecret{}=====Code{}======wxOpenid{}",mpAppId,mpAppSecret,loginReq.getCode(),wxOpenid); |
|
|
|
// if (StringUtils.isBlank(wxOpenid)) { |
|
|
|
// throw new JeecgBootException("未获取到openid"); |
|
|
|
// } |
|
|
|
// |
|
|
|
// HanHaiMember member = memberService.lambdaQuery().eq(HanHaiMember::getAppletOpenid,wxOpenid).one(); |
|
|
|
// if (member == null) { |
|
|
|
// //如果user等于null说明该用户第一次登录,数据库没有该用户信息。 |
|
|
|
// loginReq.setOpenid(wxOpenid); |
|
|
|
// loginReq.setSession_key(sessionKey); |
|
|
|
// member = new HanHaiMember(); |
|
|
|
//// member.setSesssionKey(sessionKey); |
|
|
|
// member.setAppletOpenid(wxOpenid); |
|
|
|
// member.setNickName(loginReq.getNickName()); |
|
|
|
// member.setHeadImage(loginReq.getHeadimgurl()); |
|
|
|
// // 生成token返回给小程序端 |
|
|
|
// String token = JwtUtil.sign(member.getAppletOpenid(), wxOpenid); |
|
|
|
// memberService.save(member); |
|
|
|
// redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token); |
|
|
|
// // 设置超时时间 |
|
|
|
// redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME / 100); |
|
|
|
// map.put("userInfo", member); |
|
|
|
// map.put("token", token); |
|
|
|
// //返回身份角色信息 新账号没有身份 |
|
|
|
// map.put("boss", null); |
|
|
|
// map.put("company", null); |
|
|
|
// map.put("worker", null); |
|
|
|
// result.setCode(200); |
|
|
|
// result.setResult(map); |
|
|
|
// return result; |
|
|
|
// } else { |
|
|
|
// String token = JwtUtil.sign(member.getAppletOpenid(), wxOpenid); |
|
|
|
// redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token); |
|
|
|
// // 设置超时时间 |
|
|
|
// redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME / 100); |
|
|
|
// Map roleInfo = tbUserRoleService.getRoleInfo(member.getId(),false); |
|
|
|
// //返回身份角色信息 |
|
|
|
// map.put("boss", roleInfo.get("boss")); |
|
|
|
// map.put("company", roleInfo.get("company")); |
|
|
|
// map.put("worker", roleInfo.get("worker")); |
|
|
|
// map.put("userInfo", member); |
|
|
|
// map.put("token", token); |
|
|
|
// result.setResult(map); |
|
|
|
// result.setCode(200); |
|
|
|
// } |
|
|
|
// |
|
|
|
// return result; |
|
|
|
// } |
|
|
|
|
|
|
|
/** |
|
|
|
* 微信小程序登录接口 |
|
|
|
* @param loginReq |
|
|
@ -92,7 +164,6 @@ public class AppletLoginServiceImpl implements AppletLoginService { |
|
|
|
JSONObject json_test = httpConf.getJSONObject(loginUrl); |
|
|
|
String wxOpenid = json_test.getString("openid"); |
|
|
|
String sessionKey = json_test.getString("session_key"); |
|
|
|
log.info("mpAppId{}=====mpAppSecret{}=====Code{}======wxOpenid{}",mpAppId,mpAppSecret,loginReq.getCode(),wxOpenid); |
|
|
|
if (StringUtils.isBlank(wxOpenid)) { |
|
|
|
throw new JeecgBootException("未获取到openid"); |
|
|
|
} |
|
|
@ -107,6 +178,9 @@ public class AppletLoginServiceImpl implements AppletLoginService { |
|
|
|
member.setAppletOpenid(wxOpenid); |
|
|
|
member.setNickName(loginReq.getNickName()); |
|
|
|
member.setHeadImage(loginReq.getHeadimgurl()); |
|
|
|
if(null != loginReq.getShareId()){ |
|
|
|
member.setShareId(loginReq.getShareId()); |
|
|
|
} |
|
|
|
// 生成token返回给小程序端 |
|
|
|
String token = JwtUtil.sign(member.getAppletOpenid(), wxOpenid); |
|
|
|
memberService.save(member); |
|
|
@ -115,32 +189,61 @@ public class AppletLoginServiceImpl implements AppletLoginService { |
|
|
|
redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME / 100); |
|
|
|
map.put("userInfo", member); |
|
|
|
map.put("token", token); |
|
|
|
//返回身份角色信息 新账号没有身份 |
|
|
|
map.put("boss", null); |
|
|
|
map.put("company", null); |
|
|
|
map.put("worker", null); |
|
|
|
|
|
|
|
result.setCode(200); |
|
|
|
result.setResult(map); |
|
|
|
return result; |
|
|
|
} else { |
|
|
|
// member.setHeadImage(loginReq.getHeadimgurl()); |
|
|
|
// member.setSessionKey(sessionKey); |
|
|
|
// memberService.saveOrUpdate(member); |
|
|
|
// 生成token返回给小程序端 |
|
|
|
String token = JwtUtil.sign(member.getAppletOpenid(), wxOpenid); |
|
|
|
redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token); |
|
|
|
// 设置超时时间 |
|
|
|
redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME / 100); |
|
|
|
Map roleInfo = tbUserRoleService.getRoleInfo(member.getId(),false); |
|
|
|
//返回身份角色信息 |
|
|
|
map.put("boss", roleInfo.get("boss")); |
|
|
|
map.put("company", roleInfo.get("company")); |
|
|
|
map.put("worker", roleInfo.get("worker")); |
|
|
|
map.put("userInfo", member); |
|
|
|
map.put("token", token); |
|
|
|
//用户id做im账号 |
|
|
|
result.setResult(map); |
|
|
|
result.setCode(200); |
|
|
|
// result.setMessage(member.getNickName()+"已于"+member.getCreateTime()+"注册成功!请勿重复注册!"); |
|
|
|
// // 未绑定手机号,跳转授权绑定手机号 |
|
|
|
// if (StringUtils.isBlank(member.getPhone())) { |
|
|
|
// result.setMessage("该微信用户尚未绑定手机号,请授权手机进行绑定"); |
|
|
|
// result.setCode(905); |
|
|
|
// result.setResult(map); |
|
|
|
// return result; |
|
|
|
// } |
|
|
|
} |
|
|
|
|
|
|
|
return result; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 获取sessionKey |
|
|
|
* @param loginReq |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
@Transactional(rollbackFor = {Exception.class}) |
|
|
|
public Result<Object> getSessionKey(LoginReq loginReq) { |
|
|
|
Result<Object> result = new Result<>(); |
|
|
|
Map<String, Object> map = new HashMap<>(); |
|
|
|
if (StringUtils.isBlank(loginReq.getCode())) { |
|
|
|
throw new JeecgBootException("小程序code为空"); |
|
|
|
} |
|
|
|
String loginUrl = "https://api.weixin.qq.com/sns/jscode2session?appid=" + mpAppId + "&secret=" + mpAppSecret+ "&js_code=" + loginReq.getCode() + "&grant_type=authorization_code"; |
|
|
|
//使用工具类 |
|
|
|
JSONObject json_test = httpConf.getJSONObject(loginUrl); |
|
|
|
String wxOpenid = json_test.getString("openid"); |
|
|
|
String sessionKey = json_test.getString("session_key"); |
|
|
|
log.info("mpAppId{}=====mpAppSecret{}=====Code{}======wxOpenid{}",mpAppId,mpAppSecret,loginReq.getCode(),wxOpenid); |
|
|
|
if (StringUtils.isBlank(wxOpenid)) { |
|
|
|
throw new JeecgBootException("未获取到openid"); |
|
|
|
} |
|
|
|
|
|
|
|
return Result.OK("sessionKey", sessionKey); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Transactional(rollbackFor = Exception.class) |
|
|
|
@Override |
|
|
@ -286,7 +389,65 @@ public class AppletLoginServiceImpl implements AppletLoginService { |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
@Transactional(rollbackFor = Exception.class) |
|
|
|
@Override |
|
|
|
public Result<Object> bindPhone2(String code) { |
|
|
|
try { |
|
|
|
String phoneNumber = this.getPhoneNumber(code); |
|
|
|
return Result.OK(phoneNumber); |
|
|
|
}catch (Exception e){ |
|
|
|
return Result.error(e.getMessage()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private static final String TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s"; |
|
|
|
public String getAccessToken() throws Exception { |
|
|
|
String requestUrl = String.format(TOKEN_URL, mpAppId, mpAppSecret); |
|
|
|
URL url = new URL(requestUrl); |
|
|
|
HttpURLConnection conn = (HttpURLConnection) url.openConnection(); |
|
|
|
conn.setRequestMethod("GET"); |
|
|
|
|
|
|
|
try (BufferedReader br = new BufferedReader( |
|
|
|
new InputStreamReader(conn.getInputStream(), "UTF-8"))) { |
|
|
|
StringBuilder response = new StringBuilder(); |
|
|
|
String responseLine; |
|
|
|
while ((responseLine = br.readLine()) != null) { |
|
|
|
response.append(responseLine.trim()); |
|
|
|
} |
|
|
|
|
|
|
|
org.json.JSONObject jsonResponse = new org.json.JSONObject(response.toString()); |
|
|
|
return jsonResponse.getString("access_token"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private static final String API_URL = "https://api.weixin.qq.com/wxa/business/getuserphonenumber"; |
|
|
|
public String getPhoneNumber(String code) throws Exception { |
|
|
|
URL url = new URL(API_URL + "?access_token=" + this.getAccessToken()); |
|
|
|
HttpURLConnection conn = (HttpURLConnection) url.openConnection(); |
|
|
|
conn.setRequestMethod("POST"); |
|
|
|
conn.setRequestProperty("Content-Type", "application/json; utf-8"); |
|
|
|
conn.setRequestProperty("Accept", "application/json"); |
|
|
|
conn.setDoOutput(true); |
|
|
|
|
|
|
|
JSONObject jsonInput = new JSONObject(); |
|
|
|
jsonInput.put("code", code); |
|
|
|
|
|
|
|
try (DataOutputStream os = new DataOutputStream(conn.getOutputStream())) { |
|
|
|
byte[] input = jsonInput.toString().getBytes(StandardCharsets.UTF_8); |
|
|
|
os.write(input, 0, input.length); |
|
|
|
} |
|
|
|
|
|
|
|
try (BufferedReader br = new BufferedReader( |
|
|
|
new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8))) { |
|
|
|
StringBuilder response = new StringBuilder(); |
|
|
|
String responseLine; |
|
|
|
while ((responseLine = br.readLine()) != null) { |
|
|
|
response.append(responseLine.trim()); |
|
|
|
} |
|
|
|
//获取手机号码 |
|
|
|
return response.toString(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//解析电话号码 |
|
|
@ -348,6 +509,9 @@ public class AppletLoginServiceImpl implements AppletLoginService { |
|
|
|
if (ValidateTool.isNotNull(codeBeanModel.getNickName())){ |
|
|
|
user.setNickName(codeBeanModel.getNickName()); |
|
|
|
} |
|
|
|
if (ValidateTool.isNotNull(codeBeanModel.getPhoneNumber())){ |
|
|
|
user.setPhone(codeBeanModel.getPhoneNumber()); |
|
|
|
} |
|
|
|
user.setId(hanHaiMember.getId()); |
|
|
|
memberService.updateById(user); |
|
|
|
return Result.ok("修改成功"); |
|
|
|