From b6082fe75b377ac9c177736d98f36ae46e7cdb70 Mon Sep 17 00:00:00 2001
From: 罗yu 元桥 <2376770955@qq.com>
Date: 星期三, 28 四月 2021 10:20:55 +0800
Subject: [PATCH] Merge branch 'master' into 'test'

---
 springcloud_k8s_panzhihuazhihuishequ/applets/src/main/java/com/panzhihua/applets/api/WxMessagePushApi.java |  153 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 153 insertions(+), 0 deletions(-)

diff --git a/springcloud_k8s_panzhihuazhihuishequ/applets/src/main/java/com/panzhihua/applets/api/WxMessagePushApi.java b/springcloud_k8s_panzhihuazhihuishequ/applets/src/main/java/com/panzhihua/applets/api/WxMessagePushApi.java
new file mode 100644
index 0000000..abc6977
--- /dev/null
+++ b/springcloud_k8s_panzhihuazhihuishequ/applets/src/main/java/com/panzhihua/applets/api/WxMessagePushApi.java
@@ -0,0 +1,153 @@
+package com.panzhihua.applets.api;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.panzhihua.common.utlis.StringUtils;
+import com.panzhihua.common.utlis.WxUtil;
+import com.panzhihua.common.utlis.WxXCXTempSend;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.PrintWriter;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.Arrays;
+
+@Slf4j
+@RestController
+@RequestMapping("/wx/push/")
+public class WxMessagePushApi {
+
+    private String token = "01A9CB2234D7CBD0AC61B75EB1263805";
+
+    private String url = "www.taobao.com";//图文跳转地址
+
+    private String thumbUrl = "https://www.psciio.com//idcard/f986ba3ae7a241d9bce5cb568adec7da.jpg";//图片地址
+
+    @Resource
+    private WxXCXTempSend wxXCXTempSend;
+
+    /**
+     * 微信接口配置信息认证接口<br>
+     * 需要正确响应微信发送的Token验证。 加密/校验流程如下:<br>
+     * 1. 将token、timestamp、nonce三个参数进行字典序排序<br>
+     * 2. 将三个参数字符串拼接成一个字符串进行sha1加密<br>
+     * 3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
+     */
+    @RequestMapping("/cgi")
+    public void cgi(HttpServletRequest request, HttpServletResponse response) {
+        boolean isGet = request.getMethod().toLowerCase().equals("get");
+        // 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
+        try {
+            if (isGet) {
+                String signature = request.getParameter("signature");
+                // 时间戳
+                String timestamp = request.getParameter("timestamp");
+                // 随机数
+                String nonce = request.getParameter("nonce");
+                // 随机字符串
+                String echostr = request.getParameter("echostr");
+                log.info("signature = "+signature+" , timestamp = "+timestamp+ " , nonce = "+nonce+ " , echostr = "+echostr);
+                String[] strArray = new String[] { token, timestamp, nonce };
+                Arrays.sort(strArray);
+                StringBuilder sb = new StringBuilder();
+                for (String str : strArray) {
+                    sb.append(str);
+                }
+                // SHA1签名生成
+                MessageDigest md = MessageDigest.getInstance("SHA-1");
+                md.update(sb.toString().getBytes());
+                byte[] digest = md.digest();
+
+                StringBuffer hexstr = new StringBuffer();
+                String shaHex = "";
+                for (int i = 0; i < digest.length; i++) {
+                    shaHex = Integer.toHexString(digest[i] & 0xFF);
+                    if (shaHex.length() < 2) {
+                        hexstr.append(0);
+                    }
+                    hexstr.append(shaHex);
+                }
+
+                if (hexstr.toString().equals(signature)) {
+                    response.getOutputStream().write(echostr.getBytes());
+                }
+
+            }else{
+                // 进入POST聊天处理
+                // 将请求、响应的编码均设置为UTF-8(防止中文乱码)
+                request.setCharacterEncoding("UTF-8");
+                response.setCharacterEncoding("UTF-8");
+                // 接收消息并返回消息
+                String result = acceptMessage(request, response);
+
+                // 响应消息
+                PrintWriter out = response.getWriter();
+                out.print(result);
+                out.close();
+            }
+        } catch (Exception ex) {
+            log.error("微信帐号接口配置失败!", ex);
+            ex.printStackTrace();
+        }
+    }
+
+
+    /**
+     * 接受到微信接口数据
+     * @param request
+     * @param response
+     * @return
+     */
+    private String acceptMessage(HttpServletRequest request, HttpServletResponse response) {
+        String respMessage = "";
+        String inputLine = "";
+        String notityXml = "";
+        try {
+            //接收数据
+            while((inputLine = request.getReader().readLine()) != null){
+                notityXml += inputLine;
+            }
+
+            // xml请求解析
+            JSONObject requestJson = JSON.parseObject(notityXml);
+            log.info(">>>>>>>>>>>>>"+requestJson.toString());
+            // 发送方帐号(open_id)
+            String fromUserName = requestJson.get("FromUserName").toString();
+            // 公众帐号
+            String toUserName = requestJson.get("ToUserName").toString();
+            // 消息类型
+            String msgType = requestJson.get("MsgType").toString();
+//            String Event = requestJson.get("Event").toString();  //SCAN 为扫描信息  VIEW 公众号底部点击事件
+            log.info("fromUserName = "+fromUserName+" , ToUserName = "+toUserName+ " , msgType = "+msgType);
+
+            String access_token = wxXCXTempSend.getAccessToken();//获取access_token
+
+            //公众号关注事件消息
+            if(msgType.equals("event")){
+//                log.info("公众号被关注事件..........");
+            }else if(msgType.equals("text")){
+//                if(StringUtils.isNotEmpty(access_token)){
+//                    String mediaId = wxXCXTempSend.getMediaId(access_token);//获取mediaId
+//                    WxUtil.sendKfImagesMessage(fromUserName,access_token,mediaId);
+//                }
+//                log.info("公众号接受文字..........");
+            }else if(msgType.equals("image")){
+//                log.info("公众号接受图片..........");
+            }else if(msgType.equals("miniprogrampage")){
+                if(StringUtils.isNotEmpty(access_token)){
+                    String mediaId = wxXCXTempSend.getMediaId(access_token);//获取mediaId
+                    WxUtil.sendKfImagesMessage(fromUserName,access_token,mediaId);
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return respMessage;
+    }
+
+}

--
Gitblit v1.7.1