zhaops 5 年之前
父节点
当前提交
dd3c247691

+ 169 - 0
zzcx-service/src/main/java/com/diagbot/facade/WeixinFacade.java

@@ -0,0 +1,169 @@
+package com.diagbot.facade;
+
+import com.alibaba.fastjson.JSON;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.vo.WeixinVO;
+import org.springframework.stereotype.Component;
+
+import java.io.InputStream;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.UUID;
+
+/**
+ * @Description:
+ * @Author:zhoutg
+ * @time: 2020/2/6 12:22
+ */
+@Component
+public class WeixinFacade {
+
+    public Map getConfig(WeixinVO weixinVO) {
+        Map<String, String> map = new LinkedHashMap<>();
+        String appid =  "wxedd53be102996426";
+        String secret = "c164e280950342f166a933dd7aa6daf7";
+        String url=weixinVO.getUrl();
+            try {
+               /* Map<String, Object> map2  = WxUtil.oppen_id(request, request.getSession());
+                String oppen_id = (String) map2.get("oppen_id");
+                String accessToken  = (String) map2.get("access_token");*/
+            String accessToken = getAccessToken(appid,secret);
+            //2、获取Ticket
+            String jsapi_ticket = getTicket(accessToken);
+
+            //3、时间戳和随机字符串
+            String noncestr = UUID.randomUUID().toString().replace("-", "").substring(0, 16);//随机字符串
+            String timestamp = String.valueOf(System.currentTimeMillis() / 1000);//时间戳
+
+            System.out.println("accessToken:"+accessToken+"\njsapi_ticket:"+jsapi_ticket+"\n时间戳:"+timestamp+"\n随机字符串:"+noncestr);
+
+            //4、获取url
+            //String url="http://shuiqitong.com/xzw/jNotice/jNotice_templet/templet.jsp";
+                /*根据JSSDK上面的规则进行计算
+                String[] ArrTmp = {"jsapi_ticket","timestamp","nonce","url"};
+                Arrays.sort(ArrTmp);
+                StringBuffer sf = new StringBuffer();
+                for(int i=0;i<ArrTmp.length;i++){
+                    sf.append(ArrTmp[i]);
+                }
+                */
+
+            //5、将参数排序并拼接字符串
+            String str = "jsapi_ticket="+jsapi_ticket+"&noncestr="+noncestr+"&timestamp="+timestamp+"&url="+url;
+
+            //6、将字符串进行sha1加密
+            String signature =SHA1(str);
+            System.out.println("参数:"+str+"\n签名:"+signature);
+            map.put("ticket", jsapi_ticket);
+            map.put("timestamp", timestamp);
+            map.put("noncestr", noncestr);
+            map.put("signature", signature);
+            map.put("url", url);
+            map.put("appid", appid);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return map;
+    }
+
+
+    //获取access_token
+    public static String getAccessToken(String appid,String secret) {
+        String access_token = "";
+        String grant_type = "client_credential";//获取access_token填写client_credential
+        String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type="+grant_type+"&appid="+appid+"&secret="+secret;
+        //这个url链接地址和参数皆不能变
+        String requestUrl = "";
+        String oppid="";
+        String openid ="";
+        String requestUrl2="";
+        String userInfoStr="";
+        try {
+            //获取code后,请求以下链接获取access_token
+            URL urlGet = new URL(url);
+            HttpURLConnection http = (HttpURLConnection) urlGet.openConnection();
+            http.setRequestMethod("GET"); // 必须是get方式请求
+            http.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
+            http.setDoOutput(true);
+            http.setDoInput(true);
+            System.setProperty("sun.net.client.defaultConnectTimeout", "30000");// 连接超时30秒
+            System.setProperty("sun.net.client.defaultReadTimeout", "30000"); // 读取超时30秒
+            http.connect();
+            InputStream is = http.getInputStream();
+            int size = is.available();
+            byte[] jsonBytes = new byte[size];
+            is.read(jsonBytes);
+            String message = new String(jsonBytes, "UTF-8");
+            Map<String,String> map = JSON.parseObject(message, Map.class);
+            System.out.println(map);
+            access_token = map.get("access_token");
+            System.out.println(access_token);
+            //            is.close();
+            //
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return access_token;
+    }
+
+    //获取ticket
+    public static String getTicket(String access_token) {
+        String ticket = null;
+        String url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="+ access_token +"&type=jsapi";//这个url链接和参数不能变
+        try {
+            URL urlGet = new URL(url);
+            HttpURLConnection http = (HttpURLConnection) urlGet.openConnection();
+            http.setRequestMethod("GET"); // 必须是get方式请求
+            http.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
+            http.setDoOutput(true);
+            http.setDoInput(true);
+            System.setProperty("sun.net.client.defaultConnectTimeout", "30000");// 连接超时30秒
+            System.setProperty("sun.net.client.defaultReadTimeout", "30000"); // 读取超时30秒
+            http.connect();
+            InputStream is = http.getInputStream();
+            int size = is.available();
+            byte[] jsonBytes = new byte[size];
+            is.read(jsonBytes);
+            String message = new String(jsonBytes, "UTF-8");
+
+            Map<String,String> map = JSON.parseObject(message, Map.class);
+            System.out.println(map);
+            ticket = map.get("ticket");
+            //            JSONObject demoJson = JSONObject.fromObject(message);
+            //            System.out.println("JSON字符串:"+demoJson);
+            //            ticket = demoJson.getString("ticket");
+            //            is.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return ticket;
+    }
+
+
+    public static String SHA1(String decript) {
+        try {
+            MessageDigest digest = java.security.MessageDigest.getInstance("SHA-1");
+            digest.update(decript.getBytes());
+            byte messageDigest[] = digest.digest();
+            // Create Hex String
+            StringBuffer hexString = new StringBuffer();
+            // 字节数组转换为 十六进制 数
+            for (int i = 0; i < messageDigest.length; i++) {
+                String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
+                if (shaHex.length() < 2) {
+                    hexString.append(0);
+                }
+                hexString.append(shaHex);
+            }
+            return hexString.toString();
+
+        } catch (NoSuchAlgorithmException e) {
+            e.printStackTrace();
+        }
+        return "";
+    }
+}

+ 19 - 0
zzcx-service/src/main/java/com/diagbot/vo/WeixinVO.java

@@ -0,0 +1,19 @@
+package com.diagbot.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/2/3 9:21
+ */
+@Getter
+@Setter
+public class WeixinVO {
+    private String url;
+}

+ 34 - 0
zzcx-service/src/main/java/com/diagbot/web/WexinController.java

@@ -0,0 +1,34 @@
+package com.diagbot.web;
+
+import com.diagbot.dto.RespDTO;
+import com.diagbot.facade.WeixinFacade;
+import com.diagbot.vo.WeixinVO;
+import io.swagger.annotations.Api;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import java.util.Map;
+
+/**
+ * @Description:
+ * @Author:zhoutg
+ * @time: 2020/2/6 10:48
+ */
+@RestController
+@Api(value = "微信", tags = { "微信API" })
+@SuppressWarnings("unchecked")
+@RequestMapping("/weixin")
+public class WexinController {
+
+    @Autowired
+    WeixinFacade weixinFacade;
+
+    @PostMapping("/getConfig")
+    public RespDTO<Map> getConfig(@RequestBody WeixinVO weixinVO) {
+        Map<String, String> map = weixinFacade.getConfig(weixinVO);
+        return RespDTO.onSuc(map);
+    }
+
+}

+ 10 - 0
zzcx-service/src/main/resources/static/index.html

@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+</head>
+<body>
+    欢迎!
+</body>
+</html>