|
@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.qmth.boot.core.solar.model.WxappAccessToken;
|
|
|
+import com.qmth.boot.core.solar.model.WxappSession;
|
|
|
import com.qmth.boot.core.solar.service.SolarService;
|
|
|
import com.qmth.sop.business.bean.result.LoginResult;
|
|
|
import com.qmth.sop.business.cache.CommonCacheService;
|
|
@@ -63,10 +64,11 @@ public class TWxappInfoServiceImpl extends ServiceImpl<TWxappInfoMapper, TWxappI
|
|
|
*/
|
|
|
@Override
|
|
|
public LoginResult wxappLogin(String loginCode) throws NoSuchAlgorithmException {
|
|
|
- JSONObject auth = getAuthorization(loginCode);
|
|
|
- String openId = ByteUtil.toHexAscii(ShaUtils.sha256(auth.getString(SystemConstant.OPEN_ID)));
|
|
|
+ WxappSession wxappSession = getAuthorization(loginCode);
|
|
|
+ String openId = ByteUtil.toHexAscii(ShaUtils.encode(wxappSession.getOpenId()));
|
|
|
TWxappInfo tWxappInfo = tWxappInfoService.getOne(new QueryWrapper<TWxappInfo>().lambda().eq(TWxappInfo::getOpenId, openId));
|
|
|
- Optional.ofNullable(tWxappInfo).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("微信用户未绑定"));
|
|
|
+// Optional.ofNullable(tWxappInfo).orElseThrow(() -> ParameterExceptions.OPENID_NOT_FOUND);
|
|
|
+ Optional.ofNullable(tWxappInfo).orElseThrow(() -> ExceptionResultEnum.WXAPP_OPENID_NO_DATA.exception());
|
|
|
List<SysUser> sysUserList = sysUserService.list(new QueryWrapper<SysUser>().lambda().eq(SysUser::getMobileNumber, tWxappInfo.getPhone()));
|
|
|
if (CollectionUtils.isEmpty(sysUserList)) {
|
|
|
throw ExceptionResultEnum.ERROR.exception("用户不存在");
|
|
@@ -124,8 +126,8 @@ public class TWxappInfoServiceImpl extends ServiceImpl<TWxappInfoMapper, TWxappI
|
|
|
if (!sysUser.getEnable()) {
|
|
|
throw ExceptionResultEnum.ERROR.exception("该用户已禁用");
|
|
|
}
|
|
|
- JSONObject auth = getAuthorization(loginCode);
|
|
|
- String openId = ByteUtil.toHexAscii(ShaUtils.sha256(auth.getString(SystemConstant.OPEN_ID)));
|
|
|
+ WxappSession wxappSession = getAuthorization(loginCode);
|
|
|
+ String openId = ByteUtil.toHexAscii(ShaUtils.encode(wxappSession.getOpenId()));
|
|
|
TWxappInfo tWxappInfo = tWxappInfoService.getOne(new QueryWrapper<TWxappInfo>().lambda().eq(TWxappInfo::getOpenId, openId));
|
|
|
tWxappInfo = Objects.isNull(tWxappInfo) ? new TWxappInfo(openId, phone) : tWxappInfo;
|
|
|
tWxappInfoService.saveOrUpdate(tWxappInfo);
|
|
@@ -143,9 +145,9 @@ public class TWxappInfoServiceImpl extends ServiceImpl<TWxappInfoMapper, TWxappI
|
|
|
@Override
|
|
|
@Transactional
|
|
|
public LoginResult wxappLoginByEncryptedData(String loginCode, String encryptedData, String iv) throws NoSuchAlgorithmException {
|
|
|
- JSONObject auth = getAuthorization(loginCode);
|
|
|
- String openId = ByteUtil.toHexAscii(ShaUtils.sha256(auth.getString(SystemConstant.OPEN_ID)));
|
|
|
- JSONObject jo = decrypt(encryptedData, iv, auth.getString(SystemConstant.SESSION_KEY));
|
|
|
+ WxappSession wxappSession = getAuthorization(loginCode);
|
|
|
+ String openId = ByteUtil.toHexAscii(ShaUtils.sha256(wxappSession.getOpenId()));
|
|
|
+ JSONObject jo = decrypt(encryptedData, iv, wxappSession.getSessionKey());
|
|
|
String phone = jo.getString(SystemConstant.PURE_PHONE_NUMBER);
|
|
|
List<SysUser> sysUserList = sysUserService.list(new QueryWrapper<SysUser>().lambda().eq(SysUser::getMobileNumber, phone));
|
|
|
if (CollectionUtils.isEmpty(sysUserList)) {
|
|
@@ -207,31 +209,9 @@ public class TWxappInfoServiceImpl extends ServiceImpl<TWxappInfoMapper, TWxappI
|
|
|
* @param loginCode
|
|
|
* @return
|
|
|
*/
|
|
|
- private JSONObject getAuthorization(String loginCode) {
|
|
|
+ private WxappSession getAuthorization(String loginCode) {
|
|
|
SysConfig sysConfigWxappId = commonCacheService.addSysConfigCache(SystemConstant.WXAPP_APP_ID);
|
|
|
Optional.ofNullable(sysConfigWxappId).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("未配置微信小程序appid"));
|
|
|
-
|
|
|
- SysConfig sysConfigWxappRequestUrl = commonCacheService.addSysConfigCache(SystemConstant.WXAPP_REQUEST_URL);
|
|
|
- Optional.ofNullable(sysConfigWxappRequestUrl).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("未配置微信小程序请求url"));
|
|
|
-
|
|
|
- WxappAccessToken wxappAccessToken = solarService.getWxappAccessToken(sysConfigWxappId.getConfigValue());
|
|
|
- Optional.ofNullable(wxappAccessToken).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("未查询到微信accessToken"));
|
|
|
-
|
|
|
- Map<String, Object> params = new HashMap<>();
|
|
|
- params.put(SystemConstant.APP_ID, sysConfigWxappId.getConfigValue());
|
|
|
- params.put(SystemConstant.SECRET, wxappAccessToken.getAccessToken());
|
|
|
- params.put(SystemConstant.JS_CODE, loginCode);
|
|
|
- params.put(SystemConstant.GRANT_TYPE, SystemConstant.AUTHORIZATION_CODE);
|
|
|
- String ret = null;
|
|
|
- try {
|
|
|
- ret = HttpUtil.get(sysConfigWxappRequestUrl.getConfigValue(), params, null, null);
|
|
|
- } catch (Exception e) {
|
|
|
- throw ExceptionResultEnum.ERROR.exception("登录失败");
|
|
|
- }
|
|
|
- JSONObject jo = JSONObject.parseObject(ret);
|
|
|
- if (jo.containsKey(SystemConstant.ERR_CODE)) {
|
|
|
- throw ExceptionResultEnum.ERROR.exception("登录失败," + jo.getString(SystemConstant.ERR_MSG));
|
|
|
- }
|
|
|
- return jo;
|
|
|
+ return solarService.getWxappSessionByCode(sysConfigWxappId.getConfigValue(), loginCode);
|
|
|
}
|
|
|
}
|