Procházet zdrojové kódy

1.增加微信事件接受处理增加json和xml。

tomatozq před 5 roky
rodič
revize
afea39d367

+ 2 - 0
picc-admin-server/src/main/java/com/jpsoft/picc/modules/admin/controller/JwtsUserController.java

@@ -138,6 +138,7 @@ public class JwtsUserController {
             }
         }
         catch (Exception ex){
+            log.error(ex.getMessage(),ex);
             msgResult.setMessage(ex.getMessage());
             msgResult.setResult(false);
         }
@@ -206,6 +207,7 @@ public class JwtsUserController {
             }
         }
         catch (Exception ex){
+            log.error(ex.getMessage(),ex);
             msgResult.setMessage(ex.getMessage());
             msgResult.setResult(false);
         }

+ 2 - 2
picc-enterprise-server/pom.xml

@@ -114,10 +114,10 @@
             <version>1.9.2</version>
         </dependency>
         <!--websocket start-->
-        <dependency>
+<!--        <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-websocket</artifactId>
-        </dependency>
+        </dependency>-->
         <!--websocket end-->
     </dependencies>
 

+ 0 - 29
picc-enterprise-server/src/main/java/com/jpsoft/picc/config/WebSocketConfig.java

@@ -1,29 +0,0 @@
-package com.jpsoft.picc.config;
-
-import org.springframework.context.annotation.Configuration;
-import org.springframework.messaging.simp.config.MessageBrokerRegistry;
-import org.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer;
-import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
-import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
-import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;
-
-@Configuration
-public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
-    @Override
-    public void registerStompEndpoints(StompEndpointRegistry stompEndpointRegistry) {
-        stompEndpointRegistry.addEndpoint("/stomp")
-                .setAllowedOrigins("*")
-                .withSockJS();
-    }
-
-    @Override
-    public void configureMessageBroker(MessageBrokerRegistry registry) {
-    	// TODO Auto-generated method stub
-
-    	//这句话表示在topic和user这两个域上可以向客户端发消息
-        registry.enableSimpleBroker("/user");
-
-        //这句话表示给指定用户发送一对一的主题前缀是"/user"
-        registry.setUserDestinationPrefix("/user");
-    }
-}

+ 2 - 2
picc-enterprise-server/src/main/java/com/jpsoft/picc/modules/pub/controller/UserController.java

@@ -22,9 +22,7 @@ import org.jasig.cas.client.authentication.AttributePrincipal;
 import org.jsoup.Jsoup;
 import org.jsoup.nodes.Document;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.data.redis.core.ValueOperations;
-import org.springframework.messaging.simp.SimpMessagingTemplate;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.*;
 import javax.servlet.http.HttpServletRequest;
@@ -84,6 +82,7 @@ public class UserController {
             }
         }
         catch (Exception ex){
+            log.error(ex.getMessage(),ex);
             msgResult.setMessage(ex.getMessage());
             msgResult.setResult(false);
         }
@@ -170,6 +169,7 @@ public class UserController {
             }
         }
         catch (Exception ex){
+            log.error(ex.getMessage(),ex);
             msgResult.setMessage(ex.getMessage());
             msgResult.setResult(false);
         }

+ 1 - 1
picc-enterprise-server/src/main/resources/application-test.yml

@@ -9,7 +9,7 @@ spring:
 
 logger:
   level: WARN
-  dir: C:\\picc\\logs\\picc-enterprise-server\\
+  dir: C:\\picc\\logs\\picc-enterprise-test\\
 
 nginx:
   port: 7070

+ 1 - 0
weixin-middleware/src/main/java/com/jpsoft/weixin/config/WeixinConfig.java

@@ -12,4 +12,5 @@ public class WeixinConfig {
     private String tokenUrl;
     private String createQrCodeUrl;
     private String showQrCodeUrl;
+    private String contentType;
 }

+ 30 - 6
weixin-middleware/src/main/java/com/jpsoft/weixin/controller/WeixinController.java

@@ -2,6 +2,8 @@ package com.jpsoft.weixin.controller;
 
 import cn.hutool.core.date.DateTime;
 import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import com.itextpdf.text.io.StreamUtil;
 import com.jpsoft.weixin.callback.EventCallback;
 import com.jpsoft.weixin.config.PICCAdminScanConfig;
 import com.jpsoft.weixin.config.PICCEntScanConfig;
@@ -27,14 +29,18 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.data.redis.core.ValueOperations;
 import org.springframework.stereotype.Controller;
+import org.springframework.util.StreamUtils;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.io.BufferedReader;
 import java.io.IOException;
+import java.io.InputStreamReader;
 import java.net.URLEncoder;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
 
 @Api(description = "微信中控")
 @Controller
@@ -71,7 +77,7 @@ public class WeixinController {
             return echostr;
         }
         else{
-            return null;
+            return "index";
         }
     }
 
@@ -132,18 +138,30 @@ public class WeixinController {
     @PostMapping("/")
     public void processEvent(HttpServletRequest request, HttpServletResponse response){
         try{
-            Map<String,Object> dataMap = WeixinUtil.xmlToMap(request.getInputStream());
+            log.warn("收到post请求");
+
+            JSONObject requestJson = null;
+
+            if("json".equals(weixinConfig.getContentType())){
+                String jsonStr = new BufferedReader(new InputStreamReader(request.getInputStream()))
+                        .lines().parallel().collect(Collectors.joining(System.lineSeparator()));
+
+                requestJson = new JSONObject(jsonStr);
+            }
+            else {
+                requestJson = WeixinUtil.xmlToJson(request.getInputStream());
+            }
 
             //{Ticket=gQEH8DwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyckZDekV1RHg5SFAxczNwYjF1MWIAAgTX10teAwQsAQAA, CreateTime=1582028776, EventKey=1457, Event=SCAN, ToUserName=gh_b6e865f48dea, FromUserName=op6Frsy4xuXYGqjaJ12Xv5Q-9NtU, MsgType=event}
-            log.warn(dataMap.toString());
+            log.warn(requestJson.toString());
 
             response.setContentType("UTF-8");
             response.setContentType("text/html; charset=UTF-8");
             response.setCharacterEncoding("UTF-8");
 
-            String eventKey = (String)dataMap.get("EventKey");
-            String toUserName = (String)dataMap.get("ToUserName");
-            String fromUserName = (String)dataMap.get("FromUserName");
+            String eventKey = requestJson.getStr("EventKey");
+            String toUserName = requestJson.getStr("ToUserName");
+            String fromUserName = requestJson.getStr("FromUserName");
 
             List<EventCallback> callbackList = registerCallbackList();
 
@@ -171,6 +189,12 @@ public class WeixinController {
         }
         catch (Exception ex){
             log.error(ex.getMessage(),ex);
+
+            try {
+                response.getWriter().print("fail");
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
         }
     }
 

+ 35 - 0
weixin-middleware/src/main/java/com/jpsoft/weixin/util/WeixinUtil.java

@@ -1,10 +1,12 @@
 package com.jpsoft.weixin.util;
 
 import cn.hutool.core.date.DateTime;
+import cn.hutool.json.JSONObject;
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
 import org.xml.sax.helpers.DefaultHandler;
 
+import javax.servlet.ServletInputStream;
 import javax.servlet.http.HttpServletResponse;
 import javax.xml.parsers.SAXParser;
 import javax.xml.parsers.SAXParserFactory;
@@ -106,4 +108,37 @@ public class WeixinUtil {
             e.printStackTrace();
         }
     }
+
+    public static JSONObject xmlToJson(ServletInputStream inputStream) throws Exception {
+        JSONObject jsonObject = new JSONObject();
+
+        // 创建sax解析工厂
+        SAXParserFactory factory = SAXParserFactory.newInstance();
+        // 创建sax转换工具
+        SAXParser saxParser = factory.newSAXParser();
+
+        saxParser.parse(inputStream,new DefaultHandler(){
+            private String tagName;
+
+            @Override
+            public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
+                tagName = qName;
+            }
+
+            @Override
+            public void endElement(String uri, String localName, String qName) throws SAXException {
+                tagName = null;
+            }
+
+            @Override
+            public void characters(char[] ch, int start, int length) throws SAXException {
+                if(tagName!=null){
+                    String content = new String(ch,start,length);
+                    jsonObject.put(tagName,content);
+                }
+            }
+        });
+
+        return jsonObject;
+    }
 }

+ 1 - 21
weixin-middleware/src/main/resources/application-dev.yml

@@ -3,27 +3,6 @@ spring:
     add-properties: false
     restart:
       enabled: true
-  redis:
-    # Redis数据库索引(默认为0)
-    database: 1
-    # Redis服务器地址
-    host: 127.0.0.1
-    # Redis服务器连接端口
-    port: 6379
-    # Redis服务器连接密码(默认为空)
-    password:
-    # 连接池最大连接数(使用负值表示没有限制)
-    pool:
-      max-active: 8
-      # 连接池最大阻塞等待时间(使用负值表示没有限制)
-      max-wait: -1
-      # 连接池中的最大空闲连接
-      max-idle: 8
-      # 连接池中的最小空闲连接
-      min-idle: 0
-      # 连接超时时间(毫秒)
-      timeout: 0
-
 logger:
   level: WARN
   dir: D:\\Logs\\picc\\weixin-middleware\\
@@ -34,6 +13,7 @@ weixin:
   refreshOAuth2TokenUrl: "https://api.weixin.qq.com/sns/oauth2/refresh_token"
   createQrCodeUrl: "https://api.weixin.qq.com/cgi-bin/qrcode/create"
   showQrCodeUrl: "https://mp.weixin.qq.com/cgi-bin/showqrcode"
+  contentType: xml
 
 qrcode:
   picc:

+ 32 - 0
weixin-middleware/src/main/resources/application-production.yml

@@ -0,0 +1,32 @@
+spring:
+  devtools:
+    add-properties: false
+    restart:
+      enabled: true
+
+logger:
+  level: WARN
+  dir: /opt/logs/weixin-middleware/
+
+
+weixin:
+  token: weixin
+  tokenUrl: "https://api.weixin.qq.com/cgi-bin/token"
+  refreshOAuth2TokenUrl: "https://api.weixin.qq.com/sns/oauth2/refresh_token"
+  createQrCodeUrl: "https://api.weixin.qq.com/cgi-bin/qrcode/create"
+  showQrCodeUrl: "https://mp.weixin.qq.com/cgi-bin/showqrcode"
+
+qrcode:
+  picc:
+    enterprise:
+      scan:
+        loginCode: "5000"
+        loginCallbackUrl: "http://gyxm.jing-zhou.gov.cn/picc-enterprise-test/qrcode/login/scan"
+        bindingCode: "5001"
+        bindingCallbackUrl: "http://gyxm.jing-zhou.gov.cn/picc-enterprise-test/qrcode/binding/scan"
+    admin:
+      scan:
+        loginCode: "6000"
+        loginCallbackUrl: "http://gyxm.jing-zhou.gov.cn/picc-admin-server/pub/qrcode/login/scan"
+        bindingCode: "6001"
+        bindingCallbackUrl: "http://gyxm.jing-zhou.gov.cn/picc-admin-server/pub/qrcode/binding/scan"

+ 24 - 1
weixin-middleware/src/main/resources/application-test.yml

@@ -6,4 +6,27 @@ spring:
 
 logger:
   level: WARN
-  dir: C:\\Logs\\picc\\weixin-middleware\\
+  dir: C:\\picc\\logs\\weixin-middleware\\
+  contentType: xml
+
+weixin:
+  token: weixin
+  tokenUrl: "https://api.weixin.qq.com/cgi-bin/token"
+  refreshOAuth2TokenUrl: "https://api.weixin.qq.com/sns/oauth2/refresh_token"
+  createQrCodeUrl: "https://api.weixin.qq.com/cgi-bin/qrcode/create"
+  showQrCodeUrl: "https://mp.weixin.qq.com/cgi-bin/showqrcode"
+
+qrcode:
+  picc:
+    enterprise:
+      scan:
+        loginCode: "5000"
+        loginCallbackUrl: "http://gyxm.jing-zhou.gov.cn/picc-enterprise-test/qrcode/login/scan"
+        bindingCode: "5001"
+        bindingCallbackUrl: "http://gyxm.jing-zhou.gov.cn/picc-enterprise-test/qrcode/binding/scan"
+    admin:
+      scan:
+        loginCode: "6000"
+        loginCallbackUrl: "http://gyxm.jing-zhou.gov.cn/picc-admin-server/pub/qrcode/login/scan"
+        bindingCode: "6001"
+        bindingCallbackUrl: "http://gyxm.jing-zhou.gov.cn/picc-admin-server/pub/qrcode/binding/scan"

+ 21 - 1
weixin-middleware/src/main/resources/application.yml

@@ -12,4 +12,24 @@ spring:
     restart:
       enabled: true
   profiles:
-    active: @active.profile@
+    active: @active.profile@
+  redis:
+    # Redis数据库索引(默认为0)
+    database: 1
+    # Redis服务器地址
+    host: 127.0.0.1
+    # Redis服务器连接端口
+    port: 6379
+    # Redis服务器连接密码(默认为空)
+    password:
+    # 连接池最大连接数(使用负值表示没有限制)
+    pool:
+      max-active: 8
+      # 连接池最大阻塞等待时间(使用负值表示没有限制)
+      max-wait: -1
+      # 连接池中的最大空闲连接
+      max-idle: 8
+      # 连接池中的最小空闲连接
+      min-idle: 0
+      # 连接超时时间(毫秒)
+      timeout: 0