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

add Wechat token interface.

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