Browse Source

1、手机号绑定

2、个人信息修改
master
Aug 2 months ago
parent
commit
e1fc3b12ea
3 changed files with 207 additions and 12 deletions
  1. +16
    -1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/userCode/controller/UserController.java
  2. +16
    -0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/userCode/service/AppletLoginService.java
  3. +175
    -11
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/userCode/service/impl/AppletLoginServiceImpl.java

+ 16
- 1
jeecg-boot-module-system/src/main/java/org/jeecg/modules/userCode/controller/UserController.java View File

@ -60,6 +60,12 @@ public class UserController {
return appletLoginService.appletLogin(loginReq);
}
//小程序授权登录
@ApiOperation(value = "小程序-获取sessionKey", notes = "小程序-获取sessionKey")
@GetMapping("/getSessionKey")
public Result<?> getSessionKey(LoginReq loginReq) {
return appletLoginService.getSessionKey(loginReq);
}
/**
* 微信用户绑定手机号
@ -73,9 +79,18 @@ public class UserController {
result.setMessage("请授权手机号");
return result;
}
return appletLoginService.bindPhone(codeBeanModel);
return appletLoginService.bindPhone2(codeBeanModel.getCode());
}
// /**
// * 微信用户绑定手机号
// */
// @PostMapping(value = "/bindPhone")
// @ApiOperation(value = "小程序-绑定手机号")
// public Result<Object> bindPhone(String phoneCode) {
// return appletLoginService.bindPhone(phoneCode);
// }
@PostMapping(value = "/updateUserInfo")
@ApiOperation(value = "修改头像和昵称,传nickName和headimgurl")


+ 16
- 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/userCode/service/AppletLoginService.java View File

@ -16,6 +16,13 @@ public interface AppletLoginService {
*/
Result<Object> appletLogin(LoginReq loginReq);
/**
* 获取SessionKey
*
* @param loginReq
* @return
*/
Result<Object> getSessionKey(LoginReq loginReq);
/**
* 微信用户绑定手机号
@ -24,6 +31,15 @@ public interface AppletLoginService {
*/
Result<Object> bindPhone(CodeBeanModel codeBeanModel);
Result<Object> bindPhone2(String code);
// /**
// * 微信小程序登录绑定手机号码接口
// * @param code
// * @return
// */
// Result<Object> bindPhone(String code);
Result<Object> updateUserInfo(CodeBeanModel codeBeanModel, String token);
Result<JSONObject> role(ReqUserRole reqUserRole, String token);


+ 175
- 11
jeecg-boot-module-system/src/main/java/org/jeecg/modules/userCode/service/impl/AppletLoginServiceImpl.java View File

@ -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("修改成功");


Loading…
Cancel
Save