Commit 38b6b2cd authored by 王亮's avatar 王亮

add Wechat token interface.

parent 0ccbdc69
...@@ -3,7 +3,9 @@ package cn.quantgroup.xyqb.controller.api.v2; ...@@ -3,7 +3,9 @@ package cn.quantgroup.xyqb.controller.api.v2;
import cn.quantgroup.xyqb.Constants; import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.model.JsonResult; import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.model.session.SessionStruct; import cn.quantgroup.xyqb.model.session.SessionStruct;
import cn.quantgroup.xyqb.model.webchat.AccessTokenResponse;
import cn.quantgroup.xyqb.session.XyqbSessionContextHolder; import cn.quantgroup.xyqb.session.XyqbSessionContextHolder;
import com.alibaba.fastjson.JSON;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
...@@ -21,8 +23,7 @@ public class WechatApiV2Controller { ...@@ -21,8 +23,7 @@ public class WechatApiV2Controller {
@GetMapping("/accessToken") @GetMapping("/accessToken")
public JsonResult<String> token(String appId) { public JsonResult<String> token(String appId) {
SessionStruct sessionStruct = XyqbSessionContextHolder.getXSession(); SessionStruct sessionStruct = XyqbSessionContextHolder.getXSession();
String accessToken = redisTemplate.opsForValue().get(Constants.WECHAT_ACCESS_TOKEN_REDIS + sessionStruct.getTenantId() + ":" + appId); AccessTokenResponse accessTokenResponse = JSON.parseObject(redisTemplate.opsForValue().get(Constants.WECHAT_ACCESS_TOKEN_REDIS + sessionStruct.getTenantId() + ":" + appId), AccessTokenResponse.class);
return JsonResult.buildSuccessResultGeneric(accessTokenResponse.getAccessToken());
return JsonResult.buildSuccessResultGeneric(accessToken);
} }
} }
...@@ -2,6 +2,7 @@ package cn.quantgroup.xyqb.service.v2; ...@@ -2,6 +2,7 @@ package cn.quantgroup.xyqb.service.v2;
import cn.quantgroup.xyqb.Constants; import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.config.data.WechatConfiguration; import cn.quantgroup.xyqb.config.data.WechatConfiguration;
import cn.quantgroup.xyqb.constant.UserConstant;
import cn.quantgroup.xyqb.constant.enums.LoginType; import cn.quantgroup.xyqb.constant.enums.LoginType;
import cn.quantgroup.xyqb.controller.req.v2.LoginReq; import cn.quantgroup.xyqb.controller.req.v2.LoginReq;
import cn.quantgroup.xyqb.entity.User; import cn.quantgroup.xyqb.entity.User;
...@@ -13,6 +14,7 @@ import cn.quantgroup.xyqb.model.session.SessionStruct; ...@@ -13,6 +14,7 @@ import cn.quantgroup.xyqb.model.session.SessionStruct;
import cn.quantgroup.xyqb.model.v2.login.BaseLoginParam; import cn.quantgroup.xyqb.model.v2.login.BaseLoginParam;
import cn.quantgroup.xyqb.model.v2.login.WechatMiniLoginParam; import cn.quantgroup.xyqb.model.v2.login.WechatMiniLoginParam;
import cn.quantgroup.xyqb.model.v2.login.WechatMiniPhoneLoginParam; import cn.quantgroup.xyqb.model.v2.login.WechatMiniPhoneLoginParam;
import cn.quantgroup.xyqb.model.webchat.AccessTokenResponse;
import cn.quantgroup.xyqb.remote.WechatRemoteService; import cn.quantgroup.xyqb.remote.WechatRemoteService;
import cn.quantgroup.xyqb.repository.IUserRepository; import cn.quantgroup.xyqb.repository.IUserRepository;
import cn.quantgroup.xyqb.repository.IWeChatUserRepository; import cn.quantgroup.xyqb.repository.IWeChatUserRepository;
...@@ -20,6 +22,8 @@ import cn.quantgroup.xyqb.service.register.IUserRegisterService; ...@@ -20,6 +22,8 @@ import cn.quantgroup.xyqb.service.register.IUserRegisterService;
import cn.quantgroup.xyqb.service.session.ISessionService; import cn.quantgroup.xyqb.service.session.ISessionService;
import cn.quantgroup.xyqb.session.XyqbSessionContextHolder; import cn.quantgroup.xyqb.session.XyqbSessionContextHolder;
import cn.quantgroup.xyqb.util.StringUtils; import cn.quantgroup.xyqb.util.StringUtils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken; import com.google.gson.reflect.TypeToken;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -31,6 +35,7 @@ import org.springframework.stereotype.Service; ...@@ -31,6 +35,7 @@ import org.springframework.stereotype.Service;
import java.lang.reflect.Type; import java.lang.reflect.Type;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Objects;
/** /**
* 微信小程序手机号码登录 * 微信小程序手机号码登录
...@@ -102,12 +107,12 @@ public class WechatMiniPhoneLoginStrategy implements LoginStrategy { ...@@ -102,12 +107,12 @@ public class WechatMiniPhoneLoginStrategy implements LoginStrategy {
boolean register = false; boolean register = false;
User user; User user;
phoneParam.put("code", loginParam.getPhoneCode()); phoneParam.put("code", loginParam.getPhoneCode());
String accessToken = redisTemplate.opsForValue().get(Constants.WECHAT_ACCESS_TOKEN_REDIS + loginParam.getAppId()); AccessTokenResponse accessTokenResponse = JSON.parseObject(redisTemplate.opsForValue().get(Constants.WECHAT_ACCESS_TOKEN_REDIS+ sessionStruct.getTenantId()+":"+loginParam.getAppId()),AccessTokenResponse.class);
if(StringUtils.isEmpty(accessToken)){ if(Objects.isNull(accessTokenResponse)){
throw new BizException(BizExceptionEnum.EXPIRE_WECHAT_TOKEN); throw new BizException(BizExceptionEnum.EXPIRE_WECHAT_TOKEN);
} }
WechatPhoneBean wechatPhoneBean = wechatRemoteService.getUserPhoneNumber(accessToken, phoneParam); WechatPhoneBean wechatPhoneBean = wechatRemoteService.getUserPhoneNumber(accessTokenResponse.getAccessToken(), phoneParam);
if (wechatPhoneBean.getErrcode() == 0) { if (wechatPhoneBean.getErrcode() == 0) {
//1、查询库中是否存在用户 //1、查询库中是否存在用户
......
package cn.quantgroup.xyqb.service.wechat.impl; package cn.quantgroup.xyqb.service.wechat.impl;
import cn.quantgroup.xyqb.Constants; import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.constant.UserConstant;
import cn.quantgroup.xyqb.exception.BizException;
import cn.quantgroup.xyqb.exception.BizExceptionEnum;
import cn.quantgroup.xyqb.model.JsonResult; import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.model.webchat.*; import cn.quantgroup.xyqb.model.webchat.*;
import cn.quantgroup.xyqb.repository.IWeChatInfoRelationRepository; import cn.quantgroup.xyqb.repository.IWeChatInfoRelationRepository;
import cn.quantgroup.xyqb.service.http.IHttpService; import cn.quantgroup.xyqb.service.http.IHttpService;
import cn.quantgroup.xyqb.service.wechat.IWechatFollowService; import cn.quantgroup.xyqb.service.wechat.IWechatFollowService;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -120,17 +124,8 @@ public class WechatFollowServiceImpl implements IWechatFollowService { ...@@ -120,17 +124,8 @@ public class WechatFollowServiceImpl implements IWechatFollowService {
@Override @Override
public AccessTokenResponse getToken() { public AccessTokenResponse getToken() {
try { try {
String response = httpService.get(accessTokenUrl); AccessTokenResponse accessTokenResponse = JSON.parseObject(redisTemplate.opsForValue().get(Constants.WECHAT_ACCESS_TOKEN_REDIS+ UserConstant.defaultTenantId +":"+appId),AccessTokenResponse.class);
if (StringUtils.isEmpty(response)) {
return null;
}
AccessTokenResponse accessTokenResponse = JSONObject.parseObject(response,
AccessTokenResponse.class);
if (accessTokenResponse == null) {
return null;
}
accessTokenResponse.setInitialTime(System.currentTimeMillis() - Constants.MILLIS_OF_TEN_SECOND); accessTokenResponse.setInitialTime(System.currentTimeMillis() - Constants.MILLIS_OF_TEN_SECOND);
redisTemplate.opsForValue().set(WECHAT_FOLLOW_TOKEN_KEY_PREFIX, JSONObject.toJSONString(accessTokenResponse), accessTokenResponse.getExpiresIn() + Constants.THOUSAND_SECOND, TimeUnit.SECONDS);
return accessTokenResponse; return accessTokenResponse;
} catch (Exception ex) { } catch (Exception ex) {
return null; return null;
......
...@@ -3,6 +3,7 @@ package cn.quantgroup.xyqb.xxlJob; ...@@ -3,6 +3,7 @@ package cn.quantgroup.xyqb.xxlJob;
import cn.quantgroup.xyqb.Constants; import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.config.data.WechatConfiguration; import cn.quantgroup.xyqb.config.data.WechatConfiguration;
import cn.quantgroup.xyqb.remote.WechatRemoteService; import cn.quantgroup.xyqb.remote.WechatRemoteService;
import com.alibaba.fastjson.JSON;
import com.xxl.job.core.handler.annotation.XxlJob; import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -39,7 +40,7 @@ public class WechatTokenReloadJobHandler { ...@@ -39,7 +40,7 @@ public class WechatTokenReloadJobHandler {
if (result.containsKey("errcode")) { if (result.containsKey("errcode")) {
log.error("微信获取token失败:{}", i.getAppId()); log.error("微信获取token失败:{}", i.getAppId());
} else { } else {
redisTemplate.opsForValue().set(Constants.WECHAT_ACCESS_TOKEN_REDIS+i.getTenantId()+":"+i.getAppId(),result.get("access_token")); redisTemplate.opsForValue().set(Constants.WECHAT_ACCESS_TOKEN_REDIS+i.getTenantId()+":"+i.getAppId(), JSON.toJSONString(result));
} }
}); });
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment