From 809a56390b8ed4dd6c845b976a60fcd4bd6f5e8f Mon Sep 17 00:00:00 2001
From: ck <851316342@qq.com>
Date: Tue, 4 Aug 2020 18:00:21 +0800
Subject: [PATCH] up
---
pom.xml | 6 +
.../bsd/say/controller/WechatController.java | 87 +++++-
.../bsd/say/service/impl/WeixinService.java | 3 +-
.../java/com/bsd/say/util/Xml2MapUtil.java | 255 ++++++++++++++++++
.../com/bsd/say/util/wechat/WeChatUtils.java | 25 ++
src/main/resources/application.yml | 4 +-
6 files changed, 369 insertions(+), 11 deletions(-)
create mode 100644 src/main/java/com/bsd/say/util/Xml2MapUtil.java
create mode 100644 src/main/java/com/bsd/say/util/wechat/WeChatUtils.java
diff --git a/pom.xml b/pom.xml
index 0a4f141..e90d187 100644
--- a/pom.xml
+++ b/pom.xml
@@ -193,6 +193,12 @@
junit
4.12
+
+
+ dom4j
+ dom4j
+ 1.6.1
+
diff --git a/src/main/java/com/bsd/say/controller/WechatController.java b/src/main/java/com/bsd/say/controller/WechatController.java
index 0798b00..8e5c457 100644
--- a/src/main/java/com/bsd/say/controller/WechatController.java
+++ b/src/main/java/com/bsd/say/controller/WechatController.java
@@ -1,23 +1,92 @@
package com.bsd.say.controller;
+import com.bsd.say.util.LogUtils;
import com.bsd.say.util.ResponseUtil;
+import com.bsd.say.util.Xml2MapUtil;
+import com.bsd.say.util.wechat.AesException;
+import com.bsd.say.util.wechat.WXBizMsgCrypt;
+import com.bsd.say.util.wechat.WeChatUtils;
+import org.apache.commons.collections.MapUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;
+import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.HashMap;
+import java.util.Map;
@RestController
@RequestMapping("wechat")
public class WechatController {
-// /**
-// * 接收component_verify_ticket 或 authorized事件
-// */
-// @RequestMapping(value = "/getComponentVerifyTicket")
-// @ResponseBody
-// public String getComponentVerifyTicket(@RequestParam("timestamp")String timestamp, @RequestParam("nonce")String nonce,
-// @RequestParam("msg_signature")String msgSignature, @RequestBody String postData){
-//
-// }
+ @Value("${wechat.aesKey}")
+ private String aesKey;
+ @Value("${wechat.componentToken}")
+ private String componentToken;
+ @Value("${wechat.appId}")
+ private String appId;
+ @Resource
+ private RedisTemplate redisTemplate;
+ Logger logger = LogUtils.getBussinessLogger();
+ /**
+ * 接收component_verify_ticket 或 authorized事件
+ */
+ @RequestMapping(value = "/getComponentVerifyTicket")
+ @ResponseBody
+ public String getComponentVerifyTicket(@RequestParam("timestamp")String timestamp, @RequestParam("nonce")String nonce,
+ @RequestParam("msg_signature")String msgSignature, @RequestBody String postData) throws IOException {
+
+// logger.info("接收component_verify_ticket 或 authorized事件");
+// String nonce = request.getParameter("nonce");
+// String timestamp = request.getParameter("timestamp");
+// String msgSignature = request.getParameter("msg_signature");
+
+// StringBuilder sb = new StringBuilder();
+// BufferedReader in = request.getReader();
+// String line;
+// while((line = in.readLine()) != null) {
+// sb.append(line);
+// }
+ System.out.println("nonce: " + nonce);
+ System.out.println("timestamp: " + timestamp);
+ System.out.println("msgSignature: " + msgSignature);
+ System.out.println("postData: " + postData);
+ try {
+ //这个类是微信官网提供的解密类,需要用到消息校验Token 消息加密Key和服务平台appid
+ WXBizMsgCrypt pc = new WXBizMsgCrypt(componentToken,
+ aesKey, appId);
+ String xml = pc.decryptMsg(msgSignature, timestamp, nonce, postData);
+ Map result = Xml2MapUtil.xml2map(xml);// 将xml转为map
+
+ String componentVerifyTicket = MapUtils.getString(result, "ComponentVerifyTicket");
+ // 存储平台授权票据,保存ticket
+ String TICKET = componentVerifyTicket;
+ redisTemplate.opsForValue().set("component_verify_ticket",TICKET);
+ } catch (Exception e) {
+// log.error(e.getMessage(), e);
+ e.printStackTrace();
+ }
+ return "success";
+ }
+
+
+
+ @RequestMapping(value="/{appid}/callback",method={RequestMethod.GET,RequestMethod.POST})
+ public void callBackEvent(@PathVariable String appid,
+ HttpServletResponse response,HttpServletRequest request){
+ try {
+ logger.info(appid+"进入callback+++++++++++++++++++++++++++++++++");
+// handleMessage(request,response);
+ } catch (Exception e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
}
diff --git a/src/main/java/com/bsd/say/service/impl/WeixinService.java b/src/main/java/com/bsd/say/service/impl/WeixinService.java
index 2d4e97a..5b701ce 100644
--- a/src/main/java/com/bsd/say/service/impl/WeixinService.java
+++ b/src/main/java/com/bsd/say/service/impl/WeixinService.java
@@ -34,7 +34,7 @@ public class WeixinService {
* 刷新第三方accessToken
*/
public void refreshComponentAccessToken(){
- Map reMap;
+// Map reMap;
try {
// 核心定时器,每一个小时执行一次
String ComponentVerifyTicket = redisTemplate.opsForValue().get("component_verify_ticket").toString();
@@ -49,6 +49,7 @@ public class WeixinService {
if (StringUtils.isNotEmpty(componentAccessToken)) {
redisTemplate.opsForValue().set("component_access_token", componentAccessToken, 60 * 60 * 2, TimeUnit.SECONDS);
String accessToken = redisTemplate.opsForValue().get("component_access_token").toString();
+ System.out.println("accessToken"+accessToken);
// logger.debug("====================令牌component_access_token】:【" + accessToken + "】====================");
} else {
throw new RuntimeException("微信开放平台,第三方平台获取【令牌】失败");
diff --git a/src/main/java/com/bsd/say/util/Xml2MapUtil.java b/src/main/java/com/bsd/say/util/Xml2MapUtil.java
new file mode 100644
index 0000000..ec6e499
--- /dev/null
+++ b/src/main/java/com/bsd/say/util/Xml2MapUtil.java
@@ -0,0 +1,255 @@
+package com.bsd.say.util;
+
+
+import org.apache.commons.lang3.StringUtils;
+import org.dom4j.Document;
+import org.dom4j.DocumentHelper;
+import org.dom4j.Element;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+
+
+/**
+ * @version 1.0
+ * @date 创建时间:2019年3月6日 下午4:29:13
+ */
+public class Xml2MapUtil {
+
+ public static Map xml2map(String xml){
+ Map rootmap = new HashMap<>();
+ if(StringUtils.isBlank(xml)){
+ return rootmap;
+ }
+ try{
+ Document doc;
+ doc = DocumentHelper.parseText(xml);
+ Map map = new HashMap<>();
+ if (doc == null)
+ return map;
+ Element rootElement = doc.getRootElement();
+ map = xml2map2(rootElement);
+ rootmap.put(rootElement.getName(), map);
+ }catch(Exception e){
+ e.printStackTrace();
+ }
+
+ return rootmap;
+ }
+
+ private static Map xml2map2(Element _elem) {
+ Map result = new HashMap<>();
+
+ String _elemName = _elem.getName();
+ // String _elemAttriName = _elem.attributeValue("name");
+
+ List list = _elem.elements();
+
+// if (!"struct".equals(_elemName) && !"field".equals(_elemName) && (null == list || list.size() <= 0)) {
+// return result;
+// }
+
+ if ("array".equals(_elemName)) {
+ List