Browse Source

微信第三方平台

master
zxc 5 years ago
parent
commit
98c3767a77
  1. 1
      epmet-module/epmet-third-platform/epmet-third-platform-server/pom.xml
  2. 4
      epmet-module/epmet-third-platform/epmet-third-platform-server/src/main/java/com/epmet/constant/ModuleConstant.java
  3. 35
      epmet-module/epmet-third-platform/epmet-third-platform-server/src/main/java/com/epmet/redis/RedisThird.java
  4. 22
      epmet-module/epmet-third-platform/epmet-third-platform-server/src/main/java/com/epmet/service/impl/ComponentVerifyTicketServiceImpl.java
  5. 30
      epmet-module/epmet-third-platform/epmet-third-platform-server/src/main/java/com/epmet/util/OkHttpHelper.java

1
epmet-module/epmet-third-platform/epmet-third-platform-server/pom.xml

@ -100,7 +100,6 @@
<version>4.3.1</version> <version>4.3.1</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId> <artifactId>spring-boot-starter-test</artifactId>

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

@ -42,6 +42,10 @@ public interface ModuleConstant {
String TICKET_REDIS_KEY = "epmet:wechartthird:componentverifyticket"; String TICKET_REDIS_KEY = "epmet:wechartthird:componentverifyticket";
String PRE_AUTH_CODE_REDIS_KEY = "epmet:wechartthird:preauthcode";
String ACCESS_TOKEN_REDIS_KEY = "epmet:wechartthird:preauthcode";
} }

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

@ -17,29 +17,52 @@ import java.util.concurrent.TimeUnit;
@Component @Component
public class RedisThird { public class RedisThird {
@Autowired
private RedisUtils redisUtils;
@Autowired @Autowired
private RedisTemplate redisTemplate; private RedisTemplate redisTemplate;
/**
* @Description 缓存 component_access_token 有效期2H
* @param accessToken
* @author zxc
*/
public void setComponentAccessToken (String accessToken){ public void setComponentAccessToken (String accessToken){
redisTemplate.opsForValue().set(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, TimeUnit.SECONDS);
} }
/**
* @Description 获取 component_access_token
* @param key
* @author zxc
*/
public String getComponentAccessToken(String key){ public String getComponentAccessToken(String key){
return redisTemplate.opsForValue().get(key).toString(); return redisTemplate.opsForValue().get(ModuleConstant.ACCESS_TOKEN_REDIS_KEY+key).toString();
} }
/**
* @Description 获取 component_verify_ticket
* @param key
* @author zxc
*/
public String getComponentVerifyTicket(String key){ public String getComponentVerifyTicket(String key){
return redisTemplate.opsForValue().get(key).toString(); return redisTemplate.opsForValue().get(ModuleConstant.TICKET_REDIS_KEY+ModuleConstant.TICKET_REDIS_KEY+key).toString();
} }
/**
* @Description 缓存 component_verify_ticket 有效期10min
* @param verifyTicket
* @author zxc
*/
public void setComponentVerifyTicket(String verifyTicket){ 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 * 10, TimeUnit.SECONDS);
} }
/**
* @Description 缓存 pre_auth_code 有效期10min
* @param authCode
* @author zxc
*/
public void setPreAuthCode(String authCode){ public void setPreAuthCode(String authCode){
redisTemplate.opsForValue().set(ModuleConstant.PRE_AUTH_CODE, authCode, 60 * 10, TimeUnit.SECONDS); redisTemplate.opsForValue().set(ModuleConstant.PRE_AUTH_CODE_REDIS_KEY+ModuleConstant.PRE_AUTH_CODE, authCode, 60 * 10, TimeUnit.SECONDS);
} }
} }

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

@ -2,14 +2,13 @@ package com.epmet.service.impl;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.constant.ModuleConstant; import com.epmet.constant.ModuleConstant;
import com.epmet.constant.ThirdPlatformConstant; import com.epmet.constant.ThirdPlatformConstant;
import com.epmet.dto.form.ThirdPlatformEventFormDTO;
import com.epmet.dto.form.WeChatPlatformAuthCodeFormDTO; import com.epmet.dto.form.WeChatPlatformAuthCodeFormDTO;
import com.epmet.exception.AesException; import com.epmet.exception.AesException;
import com.epmet.redis.RedisThird; import com.epmet.redis.RedisThird;
import com.epmet.service.ComponentVerifyTicketService; import com.epmet.service.ComponentVerifyTicketService;
import com.epmet.util.OkHttpHelper;
import com.epmet.util.WXBizMsgCrypt; import com.epmet.util.WXBizMsgCrypt;
import com.epmet.util.WXXmlToMapUtil; import com.epmet.util.WXXmlToMapUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -18,6 +17,7 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.io.IOException;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@ -33,6 +33,8 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
@Autowired @Autowired
private RedisThird redisThird; private RedisThird redisThird;
@Autowired
private OkHttpHelper okHttpHelper;
/** /**
* @Description 获得授权事件的票据 * @Description 获得授权事件的票据
@ -77,9 +79,8 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
jsonObject.put(ModuleConstant.COMPONENT_APPID, PLATFORM_APP_ID); jsonObject.put(ModuleConstant.COMPONENT_APPID, PLATFORM_APP_ID);
jsonObject.put(ModuleConstant.COMPONENT_APPSECRET, PLATFORM_APP_SECRET); jsonObject.put(ModuleConstant.COMPONENT_APPSECRET, PLATFORM_APP_SECRET);
jsonObject.put(ModuleConstant.TICKET_UNDERLINE_KEY, componentVerifyTicket); jsonObject.put(ModuleConstant.TICKET_UNDERLINE_KEY, componentVerifyTicket);
// String post = OkHttpHelper.post(API_COMPONENT_TOKEN_URl, JSON.toJSONString(jsonObject)); // todo OkHttpHelper 无法引入
String post = null; String post = okHttpHelper.post(API_COMPONENT_TOKEN_URl, JSON.toJSONString(jsonObject));
log.info("====================返回post结果:" + post);
HashMap<String, String> hashMap = JSON.parseObject(post, HashMap.class); HashMap<String, String> hashMap = JSON.parseObject(post, HashMap.class);
String componentAccessToken = hashMap.get(ModuleConstant.COMPONENT_ACCESS_TOKEN); String componentAccessToken = hashMap.get(ModuleConstant.COMPONENT_ACCESS_TOKEN);
if (StringUtils.isNotEmpty(componentAccessToken)) { if (StringUtils.isNotEmpty(componentAccessToken)) {
@ -102,18 +103,15 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
public void preAuthCode() { public void preAuthCode() {
log.info("====================开始执行定时任务获取预授权码【pre_auth_code】===================="); log.info("====================开始执行定时任务获取预授权码【pre_auth_code】====================");
try { try {
// String accessToken = redisTemplate.opsForValue().get(ModuleConstant.COMPONENT_ACCESS_TOKEN).toString();
String accessToken = redisThird.getComponentAccessToken(ModuleConstant.COMPONENT_ACCESS_TOKEN); String accessToken = redisThird.getComponentAccessToken(ModuleConstant.COMPONENT_ACCESS_TOKEN);
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
jsonObject.put(ModuleConstant.COMPONENT_APPID, PLATFORM_APP_ID); jsonObject.put(ModuleConstant.COMPONENT_APPID, PLATFORM_APP_ID);
// String post = OkHttpHelper.post(API_CREATE_PREAUTHCODE_URL + accessToken, JSON.toJSONString(jsonObject)); String post = okHttpHelper.post(API_CREATE_PREAUTHCODE_URL + accessToken, JSON.toJSONString(jsonObject));
String post = null;
log.info("====================返回post结果:" + post); log.info("====================返回post结果:" + post);
HashMap<String, String> hashMap = JSON.parseObject(post, HashMap.class); HashMap<String, String> hashMap = JSON.parseObject(post, HashMap.class);
String authCode = hashMap.get("pre_auth_code"); String authCode = hashMap.get("pre_auth_code");
if (StringUtils.isNotEmpty(authCode)) { if (StringUtils.isNotEmpty(authCode)) {
redisThird.setPreAuthCode(authCode); redisThird.setPreAuthCode(authCode);
// redisTemplate.opsForValue().set("pre_auth_code", authCode, 60 * 10, TimeUnit.SECONDS);
} else { } else {
throw new RuntimeException("微信开放平台,第三方平台获取【预授权码】失败"); throw new RuntimeException("微信开放平台,第三方平台获取【预授权码】失败");
} }
@ -133,7 +131,11 @@ public class ComponentVerifyTicketServiceImpl implements ComponentVerifyTicketSe
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
jsonObject.put(ModuleConstant.COMPONENT_APPID, PLATFORM_APP_ID); jsonObject.put(ModuleConstant.COMPONENT_APPID, PLATFORM_APP_ID);
jsonObject.put(ModuleConstant.AUTHORIZATION_CODE, authCode); jsonObject.put(ModuleConstant.AUTHORIZATION_CODE, authCode);
// String post = OkHttpHelper.post(API_QUERY_AUTH_URL + accessToken, JSON.toJSONString(jsonObject)); try {
String post = okHttpHelper.post(API_QUERY_AUTH_URL + accessToken, JSON.toJSONString(jsonObject));
} catch (IOException e) {
e.printStackTrace();
}
// 重定向地址 // 重定向地址
// response.sendRedirect("/wechat/authcode"); // response.sendRedirect("/wechat/authcode");
} }

30
epmet-module/epmet-third-platform/epmet-third-platform-server/src/main/java/com/epmet/util/OkHttpHelper.java

@ -0,0 +1,30 @@
package com.epmet.util;
import okhttp3.*;
import org.springframework.stereotype.Component;
import java.io.IOException;
/**
* @Author zxc
* @CreateTime 2020/7/7 17:39
*/
@Component
public class OkHttpHelper {
public static final MediaType JSON = MediaType.get("application/json; charset=utf-8");
OkHttpClient client = new OkHttpClient();
public String post(String url, String json) throws IOException {
RequestBody body = RequestBody.create(JSON, json);
Request request = new Request.Builder()
.url(url)
.post(body)
.build();
try (Response response = client.newCall(request).execute()) {
return response.body().string();
}
}
}
Loading…
Cancel
Save