Browse Source

微信第三方平台

dev_shibei_match
zxc 5 years ago
parent
commit
e8bcc8c0a6
  1. 1
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/constant/NumConstant.java
  2. 81
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/ComponentVerifyTicketDTO.java
  3. 30
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/ComponentVerifyTicketFormDTO.java
  4. 44
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/result/AuthorizationInfoResultDTO.java
  5. 15
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/constant/ModuleConstant.java
  6. 7
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/constant/ThirdPlatformConstant.java
  7. 63
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/ComponentVerifyTicketController.java
  8. 78
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/WeChatNotifyController.java
  9. 36
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/dao/ComponentVerifyTicketDao.java
  10. 56
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/entity/ComponentVerifyTicketEntity.java
  11. 35
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/redis/RedisThird.java
  12. 13
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/ComponentVerifyTicketService.java
  13. 92
      epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/ComponentVerifyTicketServiceImpl.java
  14. 35
      epmet-module/epmet-third/epmet-third-server/src/main/resources/mapper/ComponentVerifyTicketDao.xml

1
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/constant/NumConstant.java

@ -31,6 +31,7 @@ public interface NumConstant {
int THIRTY = 30;
int FORTY = 40;
int FIFTY = 50;
int SIXTY = 60;
int ONE_HUNDRED = 100;
int ONE_THOUSAND = 1000;
int MAX = 99999999;

81
epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/ComponentVerifyTicketDTO.java

@ -0,0 +1,81 @@
/**
* Copyright 2018 人人开源 https://www.renren.io
* <p>
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* <p>
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* <p>
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.epmet.dto;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
/**
* 微信发送的ticket表
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2020-07-08
*/
@Data
public class ComponentVerifyTicketDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
private String id;
/**
* 第三方平台ID
*/
private String appid;
/**
* component_verify_ticket
*/
private String typeInfo;
/**
* 票据内容
*/
private String componentVerifyTicket;
/**
* 删除标识 0-1-
*/
private String delFlag;
/**
* 创建人
*/
private String createdBy;
/**
* 创建时间
*/
private Date createdTime;
/**
* 更新人
*/
private String updatedBy;
/**
* 更新时间
*/
private Date updatedTime;
}

30
epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/form/ComponentVerifyTicketFormDTO.java

@ -3,6 +3,7 @@ package com.epmet.dto.form;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* @Author zxc
@ -14,22 +15,37 @@ public class ComponentVerifyTicketFormDTO implements Serializable {
private static final long serialVersionUID = -6547893374373422628L;
/**
* 第三方平台 appid
* 主键
*/
private String appId;
private String id;
/**
* 时间戳单位s
* 第三方平台ID
*/
private Integer CreateTime;
private String appid;
/**
* 固定为"component_verify_ticket"
* component_verify_ticket
*/
private String InfoType = "component_verify_ticket";
private String typeInfo = "component_verify_ticket";
/**
* Ticket 内容
* 票据内容
*/
private String componentVerifyTicket;
/**
* 删除标识 0-1-
*/
private String delFlag = "0";
/**
* 创建人
*/
private String createdBy = "APP_USER";
/**
* 更新人
*/
private String updatedBy = "APP_USER";
}

44
epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/result/AuthorizationInfoResultDTO.java

@ -0,0 +1,44 @@
package com.epmet.dto.result;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
/**
* 权限集列表
* @Author zxc
* @CreateTime 2020/7/8 13:39
*/
@Data
public class AuthorizationInfoResultDTO implements Serializable {
private static final long serialVersionUID = 3253989119352850315L;
/**
* 授权方 appid
*/
private String authorizer_appid;
/**
* 接口调用令牌在授权的公众号/小程序具备 API 权限时才有此返回值
*/
private String authorizer_access_token;
/**
* authorizer_access_token 的有效期在授权的公众号/小程序具备API权限时才有此返回值单位
*/
private Integer expires_in;
/**
* 刷新令牌在授权的公众号具备API权限时才有此返回值刷新令牌主要用于第三方平台获取和刷新已授权用户的 authorizer_access_token
* 一旦丢失只能让用户重新授权才能再次拿到新的刷新令牌用户重新授权后之前的刷新令牌会失效
*/
private String authorizer_refresh_token;
/**
* 授权给开发者的权限集列表
*/
private List<Map> func_info;
}

15
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/constant/ModuleConstant.java

@ -12,12 +12,23 @@ public interface ModuleConstant {
String SUCCESS = "success";
/**
* 第三方平台 AppId
*/
String COMPONENT_APPID = "component_appid";
String COMPONENT_APPSECRET = "component_appsecret";
/**
* 第三方平台 access_token
*/
String COMPONENT_ACCESS_TOKEN = "component_access_token";
/**
* 有效期
*/
String EXPIRES_IN = "expires_in";
String PRE_AUTH_CODE = "pre_auth_code";
String AUTHORIZATION_CODE = "authorization_code";
@ -54,6 +65,10 @@ public interface ModuleConstant {
String AUTHORIZER_REFRESH_TOKEN_REDIS_KEY = "epmet:wechartthird:authorizerrefreshtoken";
String AUTHORIZATION_CODE_REDIS_KEY = "epmet:wechartthird:authorizationcode";
String AUTH_INFO_REDIS_KEY = "epmet:wechartthird:authinfo";
}

7
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/constant/ThirdPlatformConstant.java

@ -29,7 +29,7 @@ public interface ThirdPlatformConstant {
/**
*
*/
String API_COMPONENT_TOKEN_URl = "https://api.weixin.qq.com/cgi-bin/component/api_create_preauthcode?component_access_token=COMPONENT_ACCESS_TOKEN";
String API_CREATE_PREAUTHCODE_URl = "https://api.weixin.qq.com/cgi-bin/component/api_create_preauthcode?component_access_token=COMPONENT_ACCESS_TOKEN";
/**
*
@ -41,6 +41,9 @@ public interface ThirdPlatformConstant {
*/
String API_QUERY_AUTH_URL = "https://api.weixin.qq.com/cgi-bin/component/api_query_auth?component_access_token=COMPONENT_ACCESS_TOKEN";
/**
* 获取令牌请求地址
*/
String API_COMPONENT_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/component/api_component_token";
}

63
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/ComponentVerifyTicketController.java

@ -1,19 +1,18 @@
package com.epmet.controller;
import com.epmet.commons.tools.utils.Result;
import com.epmet.service.ComponentVerifyTicketService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
/**
* @Author zxc
* @CreateTime 2020/7/6 9:07
*/
@Slf4j
@RestController("wechatthird")
@RestController
@RequestMapping("thirdplatform")
public class ComponentVerifyTicketController {
@Autowired
@ -27,62 +26,12 @@ public class ComponentVerifyTicketController {
* @param postData
* @author zxc
*/
@PostMapping(value = "/ticket")
public Result weChatPlatformEvent(@RequestParam("timestamp") String timestamp,
@PostMapping(value = "/componentverifyticket")
public String componentVerifyTicket(@RequestParam("timestamp") String timestamp,
@RequestParam("nonce") String nonce,
@RequestParam("msg_signature") String msgSignature,
@RequestBody String postData) {
componentVerifyTicketService.parseRequest(timestamp,nonce,msgSignature,postData);
return new Result();
componentVerifyTicketService.componentVerifyTicket(timestamp,nonce,msgSignature,postData);
return "success";
}
/**
* @Description 获取预授权码
* @param
* @author zxc
*/
@PostMapping("ticketjob")
public Result ticketJob() {
componentVerifyTicketService.ticketJob();
return new Result();
}
/**
* @Description 获取预授权码
* @param
* @author zxc
*/
@PostMapping("preauthcode")
public Result preAuthCode(){
componentVerifyTicketService.preAuthCode();
return new Result();
}
/**
* @Description
* @param response
* @param authCode
* @param expiresIn
* @author zxc
*/
@PostMapping(value = "/authcode")
public Result weChatPlatformAuthCode(HttpServletResponse response,
@RequestParam("auth_code") String authCode,
@RequestParam("expires_in") String expiresIn) {
componentVerifyTicketService.weChatPlatformAuthCode(response,authCode,expiresIn);
return new Result();
}
/**
* @Description 获取/刷新接口调用令牌
* @param authorizerAppId 授权方AppId
* @author zxc
*/
@PostMapping("refreshtoken")
public Result refreshToken(@RequestParam("authorizer_appid") String authorizerAppId){
componentVerifyTicketService.refreshToken(authorizerAppId);
return new Result();
}
}

78
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/controller/WeChatNotifyController.java

@ -0,0 +1,78 @@
package com.epmet.controller;
import com.epmet.commons.tools.utils.Result;
import com.epmet.service.ComponentVerifyTicketService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
/**
* @Author zxc
* @CreateTime 2020/7/8 15:06
*/
@RestController
@RequestMapping("wechatthird")
public class WeChatNotifyController {
@Autowired
private ComponentVerifyTicketService componentVerifyTicketService;
/**
* @Description 定时获取 (令牌component_access_token)
* 令牌component_access_token是第三方平台接口的调用凭据令牌的获取是有限制的每个令牌的有效期为 2 小时
* @param
* @author zxc
*/
@PostMapping("componentaccesstoken")
public Result getComponentAccessToken() {
componentVerifyTicketService.getComponentAccessToken();
return new Result();
}
/**
* @Description 获取预授权码
* @param
* @author zxc
*/
@PostMapping("preauthcode")
public Result preAuthCode(){
componentVerifyTicketService.preAuthCode();
return new Result();
}
/**
* @Description 使用授权码获取授权信息
* @param response
* @param authCode
* @param expiresIn
* @author zxc
*/
@PostMapping(value = "/authinfobyauthcode")
public Result authInfoByAuthCode(HttpServletResponse response,
@RequestParam("auth_code") String authCode,
@RequestParam("expires_in") String expiresIn) {
componentVerifyTicketService.authInfoByAuthCode(response,authCode,expiresIn);
return new Result();
}
/**
* @Description 获取/刷新接口调用令牌
* @param authorizerAppId 授权方AppId
* @author zxc
*/
@PostMapping("refreshtoken")
public Result refreshToken(@RequestParam("authorizer_appid") String authorizerAppId){
componentVerifyTicketService.refreshToken(authorizerAppId);
return new Result();
}
@PostMapping("redirecturi")
public Result redirectUri(){
componentVerifyTicketService.redirectUri();
return new Result();
}
}

36
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/dao/ComponentVerifyTicketDao.java

@ -0,0 +1,36 @@
/**
* Copyright 2018 人人开源 https://www.renren.io
* <p>
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* <p>
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* <p>
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.epmet.dao;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.dto.form.ComponentVerifyTicketFormDTO;
import com.epmet.entity.ComponentVerifyTicketEntity;
import org.apache.ibatis.annotations.Mapper;
/**
* 微信发送的ticket表
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2020-07-08
*/
@Mapper
public interface ComponentVerifyTicketDao extends BaseDao<ComponentVerifyTicketEntity> {
void insertComponentVerifyTicket(ComponentVerifyTicketFormDTO formDTO);
}

56
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/entity/ComponentVerifyTicketEntity.java

@ -0,0 +1,56 @@
/**
* Copyright 2018 人人开源 https://www.renren.io
* <p>
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* <p>
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* <p>
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.epmet.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.epmet.commons.mybatis.entity.BaseEpmetEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
/**
* 微信发送的ticket表
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2020-07-08
*/
@Data
@EqualsAndHashCode(callSuper=false)
@TableName("component_verify_ticket")
public class ComponentVerifyTicketEntity extends BaseEpmetEntity {
private static final long serialVersionUID = 1L;
/**
* 第三方平台ID
*/
private String appid;
/**
* component_verify_ticket
*/
private String typeInfo;
/**
* 票据内容
*/
private String componentVerifyTicket;
}

35
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/redis/RedisThird.java

@ -1,6 +1,8 @@
package com.epmet.redis;
import com.epmet.commons.tools.redis.RedisUtils;
import com.epmet.constant.ModuleConstant;
import com.epmet.dto.result.AuthorizationInfoResultDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
@ -18,14 +20,16 @@ public class RedisThird {
@Autowired
private RedisTemplate redisTemplate;
@Autowired
private RedisUtils redisUtils;
/**
* @Description 缓存 component_access_token 有效期2H
* @Description 缓存 component_access_token 有效期1小时59分钟 官网有效期2H
* @param accessToken
* @author zxc
*/
public void setComponentAccessToken (String accessToken){
redisTemplate.opsForValue().set(ModuleConstant.ACCESS_TOKEN_REDIS_KEY+ModuleConstant.COMPONENT_ACCESS_TOKEN, accessToken, 60 * 60 * 2, TimeUnit.SECONDS);
redisTemplate.opsForValue().set(ModuleConstant.ACCESS_TOKEN_REDIS_KEY+ModuleConstant.COMPONENT_ACCESS_TOKEN, accessToken, 60 * 60 * 2 - 60, TimeUnit.SECONDS);
}
/**
@ -47,21 +51,22 @@ public class RedisThird {
}
/**
* @Description 缓存 component_verify_ticket 有效期10min
* @Description 缓存 component_verify_ticket 有效期9min (官方有效期 10分钟)
* @param verifyTicket
* @author zxc
*/
public void setComponentVerifyTicket(String verifyTicket){
redisTemplate.opsForValue().set(ModuleConstant.TICKET_REDIS_KEY+ModuleConstant.TICKET_UNDERLINE_KEY, verifyTicket, 60 * 10, TimeUnit.SECONDS);
redisTemplate.opsForValue().set(ModuleConstant.TICKET_REDIS_KEY+ModuleConstant.TICKET_UNDERLINE_KEY, verifyTicket, 60 * 9, TimeUnit.SECONDS);
}
/**
* @Description 缓存 pre_auth_code 有效期10min
* @param authCode
* @Description 缓存 pre_auth_code 有效期9min (官方有效期 10分钟)
* @param authCode pre_auth_code 预授权码
* @param expiresIn expires_in 有效期
* @author zxc
*/
public void setPreAuthCode(String authCode){
redisTemplate.opsForValue().set(ModuleConstant.PRE_AUTH_CODE_REDIS_KEY+ModuleConstant.PRE_AUTH_CODE, authCode, 60 * 10, TimeUnit.SECONDS);
public void setPreAuthCode(String authCode,Integer expiresIn){
redisTemplate.opsForValue().set(ModuleConstant.PRE_AUTH_CODE_REDIS_KEY+ModuleConstant.PRE_AUTH_CODE, authCode,expiresIn, TimeUnit.SECONDS);
}
/**
@ -84,4 +89,18 @@ public class RedisThird {
return redisTemplate.opsForValue().get(ModuleConstant.AUTHORIZER_REFRESH_TOKEN_REDIS_KEY+key).toString();
}
/**
* @Description 获取授权码
* 授权码, 会在授权成功时回调url返回给第三方平台codeexpiresIn
* @param key
* @author zxc
*/
public String getAuthorizationCode(String key){
return redisTemplate.opsForValue().get(ModuleConstant.AUTHORIZATION_CODE_REDIS_KEY+key).toString();
}
public void setAuthInfo(AuthorizationInfoResultDTO authInfo){
redisUtils.set(ModuleConstant.AUTH_INFO_REDIS_KEY,authInfo,-1);
}
}

13
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/ComponentVerifyTicketService.java

@ -18,13 +18,14 @@ public interface ComponentVerifyTicketService {
* @return 如果获得只需要返回 SUCCESS
* @Author zxc
*/
void parseRequest(String timestamp,String nonce,String msgSignature,String postData);
void componentVerifyTicket(String timestamp,String nonce,String msgSignature,String postData);
/**
* @Description 定时获取 ticket
* @Description 定时获取 (令牌component_access_token)
* 令牌component_access_token是第三方平台接口的调用凭据令牌的获取是有限制的每个令牌的有效期为 2 小时
* @author zxc
*/
void ticketJob();
void getComponentAccessToken();
/**
* @Description 每个预授权码有效期为 10 分钟需要先获取令牌才能调用 获取预授权码
@ -33,13 +34,13 @@ public interface ComponentVerifyTicketService {
void preAuthCode();
/**
* @Description
* @Description 使用授权码获取授权信息
* @param response
* @param authCode
* @param expiresIn
* @author zxc
*/
void weChatPlatformAuthCode(HttpServletResponse response,String authCode,String expiresIn);
void authInfoByAuthCode(HttpServletResponse response,String authCode,String expiresIn);
/**
* @Description 获取/刷新接口调用令牌
@ -48,4 +49,6 @@ public interface ComponentVerifyTicketService {
*/
void refreshToken(String authorizerAppId);
void redirectUri();
}

92
epmet-module/epmet-third/epmet-third-server/src/main/java/com/epmet/service/impl/ComponentVerifyTicketServiceImpl.java

@ -2,12 +2,16 @@ package com.epmet.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.utils.HttpClientManager;
import com.epmet.constant.ModuleConstant;
import com.epmet.constant.ThirdPlatformConstant;
import com.epmet.dao.ComponentVerifyTicketDao;
import com.epmet.dto.form.ComponentVerifyTicketFormDTO;
import com.epmet.dto.result.AuthorizationInfoResultDTO;
import com.epmet.exception.AesException;
import com.epmet.redis.RedisThird;
import com.epmet.service.ComponentVerifyTicketService;
import com.epmet.util.OkHttpHelper;
import com.epmet.util.WXBizMsgCrypt;
import com.epmet.util.WXXmlToMapUtil;
import lombok.extern.slf4j.Slf4j;
@ -15,9 +19,10 @@ import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
@ -34,15 +39,16 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
@Autowired
private RedisThird redisThird;
@Autowired
private OkHttpHelper okHttpHelper;
private ComponentVerifyTicketDao ticketDao;
/**
* @Description 获得授权事件的票据
* @param
* @author zxc
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void parseRequest(String timeStamp,String nonce,String msgSignature,String postData) {
public void componentVerifyTicket(String timeStamp,String nonce,String msgSignature,String postData) {
log.info(ModuleConstant.START_RECEIVE);
try {
//这个类是微信官网提供的解密类,需要用到消息校验Token 消息加密Key和服务平台appid
@ -52,9 +58,15 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
Map<String, String> result = WXXmlToMapUtil.xmlToMap(xml);
String componentVerifyTicket = MapUtils.getString(result, ModuleConstant.TICKET_KEY);
if (StringUtils.isNotEmpty(componentVerifyTicket)) {
// 存储平台授权票据,保存ticket
// 缓存 ticket
redisThird.setComponentVerifyTicket(componentVerifyTicket);
// 存数据库
ComponentVerifyTicketFormDTO ticketFormDTO = new ComponentVerifyTicketFormDTO();
ticketFormDTO.setAppid(PLATFORM_APP_ID);
ticketFormDTO.setComponentVerifyTicket(componentVerifyTicket);
ticketDao.insertComponentVerifyTicket(ticketFormDTO);
} else {
log.error(ModuleConstant.ERROR_TICKET);
throw new RuntimeException(ModuleConstant.ERROR_TICKET);
}
} catch (AesException e) {
@ -64,22 +76,22 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
}
/**
* @Description 定时获取票据
* @Description 定时获取 (令牌component_access_token)
* @param
* @author zxc
*/
@Override
public void ticketJob() {
public void getComponentAccessToken() {
log.info("====================开始执行定时任务获取令牌【component_access_token】====================");
Map<String, String> reMap;
try {
// 核心定时器,每一个小时执行一次
// 核心定时器
String componentVerifyTicket = redisThird.getComponentVerifyTicket(ModuleConstant.TICKET_UNDERLINE_KEY);
JSONObject jsonObject = new JSONObject();
jsonObject.put(ModuleConstant.COMPONENT_APPID, PLATFORM_APP_ID);
jsonObject.put(ModuleConstant.COMPONENT_APPSECRET, PLATFORM_APP_SECRET);
jsonObject.put(ModuleConstant.TICKET_UNDERLINE_KEY, componentVerifyTicket);
String post = okHttpHelper.post(API_COMPONENT_TOKEN_URl, JSON.toJSONString(jsonObject));
String post = HttpClientManager.getInstance().sendPostByJSON(API_CREATE_PREAUTHCODE_URL, JSON.toJSONString(jsonObject)).getData();
HashMap<String, String> hashMap = JSON.parseObject(post, HashMap.class);
String componentAccessToken = hashMap.get(ModuleConstant.COMPONENT_ACCESS_TOKEN);
if (StringUtils.isNotEmpty(componentAccessToken)) {
@ -105,12 +117,14 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
String accessToken = redisThird.getComponentAccessToken(ModuleConstant.COMPONENT_ACCESS_TOKEN);
JSONObject jsonObject = new JSONObject();
jsonObject.put(ModuleConstant.COMPONENT_APPID, PLATFORM_APP_ID);
String post = okHttpHelper.post(API_CREATE_PREAUTHCODE_URL + accessToken, JSON.toJSONString(jsonObject));
String post = HttpClientManager.getInstance().sendPostByJSON(API_CREATE_PREAUTHCODE_URL + accessToken, JSON.toJSONString(jsonObject)).getData();
log.info("====================返回post结果:" + post);
HashMap<String, String> hashMap = JSON.parseObject(post, HashMap.class);
String authCode = hashMap.get("pre_auth_code");
String authCode = hashMap.get(ModuleConstant.PRE_AUTH_CODE);
String expiresIn = hashMap.get(ModuleConstant.EXPIRES_IN);
int ex = Integer.valueOf(expiresIn) - NumConstant.SIXTY;
if (StringUtils.isNotEmpty(authCode)) {
redisThird.setPreAuthCode(authCode);
redisThird.setPreAuthCode(authCode,ex);
} else {
throw new RuntimeException("微信开放平台,第三方平台获取【预授权码】失败");
}
@ -120,22 +134,31 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
log.info("====================结束执行定时任务获取预授权码【pre_auth_code】====================");
}
/**
* @Description 使用授权码获取授权信息
* @param response
* @param authCode
* @param expiresIn
* @author zxc
*/
@Override
public void weChatPlatformAuthCode(HttpServletResponse response, String authCode, String expiresIn) {
public void authInfoByAuthCode(HttpServletResponse response, String authCode, String expiresIn) {
// 获取令牌【component_access_token】
String accessToken = redisThird.getComponentAccessToken(ModuleConstant.COMPONENT_ACCESS_TOKEN);
// 使用授权码获取授权信息
JSONObject jsonObject = new JSONObject();
jsonObject.put(ModuleConstant.COMPONENT_APPID, PLATFORM_APP_ID);
jsonObject.put(ModuleConstant.AUTHORIZATION_CODE, authCode);
String post;
String authInfo;
try {
post = okHttpHelper.post(API_QUERY_AUTH_URL + accessToken, JSON.toJSONString(jsonObject));
HashMap<String,Map> hashMap = JSON.parseObject(post, HashMap.class);
authInfo = HttpClientManager.getInstance().sendPostByJSON(API_QUERY_AUTH_URL + accessToken, JSON.toJSONString(jsonObject)).getData();
HashMap<String,Map> hashMap = JSON.parseObject(authInfo, HashMap.class);
Map map = hashMap.get(ModuleConstant.AUTHORIZATION_INFO);
AuthorizationInfoResultDTO authorizationInfoResultDTO = mapToEntity(map, AuthorizationInfoResultDTO.class);
redisThird.setAuthInfo(authorizationInfoResultDTO);
String authorizerRefreshToken = map.get(ModuleConstant.AUTHORIZER_REFRESH_TOKEN).toString();
redisThird.setAuthorizerRefreshToken(authorizerRefreshToken);
} catch (IOException e) {
} catch (Exception e) {
e.printStackTrace();
}
@ -158,4 +181,39 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
jsonObject.put(ModuleConstant.COMPONENT_APPID,PLATFORM_APP_ID);
jsonObject.put("",redisThird.getAuthorizerRefreshToken(""));
}
@Override
public void redirectUri() {
}
/**
* @Description map Entity
* @param map
* @param entity
* @author zxc
*/
public <T> T mapToEntity(Map<String, Object> map, Class<T> entity) {
T t = null;
try {
t = entity.newInstance();
for(Field field : entity.getDeclaredFields()) {
if (map.containsKey(field.getName())) {
boolean flag = field.isAccessible();
field.setAccessible(true);
Object object = map.get(field.getName());
if (object!= null && field.getType().isAssignableFrom(object.getClass())) {
field.set(t, object);
}
field.setAccessible(flag);
}
}
return t;
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return t;
}
}

35
epmet-module/epmet-third/epmet-third-server/src/main/resources/mapper/ComponentVerifyTicketDao.xml

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.epmet.dao.ComponentVerifyTicketDao">
<resultMap type="com.epmet.entity.ComponentVerifyTicketEntity" id="componentVerifyTicketMap">
<result property="id" column="ID"/>
<result property="appid" column="APPID"/>
<result property="typeInfo" column="TYPE_INFO"/>
<result property="componentVerifyTicket" column="COMPONENT_VERIFY_TICKET"/>
<result property="delFlag" column="DEL_FLAG"/>
<result property="createdBy" column="CREATED_BY"/>
<result property="createdTime" column="CREATED_TIME"/>
<result property="updatedBy" column="UPDATED_BY"/>
<result property="updatedTime" column="UPDATED_TIME"/>
</resultMap>
<insert id="insertComponentVerifyTicket" parameterType="com.epmet.dto.form.ComponentVerifyTicketFormDTO">
INSERT INTO component_verify_ticket ( ID, APPID, TYPE_INFO, COMPONENT_VERIFY_TICKET, DEL_FLAG, CREATED_BY, CREATED_TIME, UPDATED_BY, UPDATED_TIME )
VALUES
(
REPLACE ( UUID(), '-', '' ),
#{appid},
#{typeInfo},
#{componentVerifyTicket},
#{delFlag},
#{createdBy},
NOW(),
#{updatedBy},
NOW()
)
</insert>
</mapper>
Loading…
Cancel
Save