From 3cd9cb27a9724827e09844c708f64c4f9f657370 Mon Sep 17 00:00:00 2001 From: "kuang.yife" Date: Wed, 19 Jun 2024 16:27:45 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BE=AE=E4=BF=A1ticket=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/controller/tool/WxController.java | 6 +- .../com/playlet/web/service/WxService.java | 4 +- .../web/service/impl/WxServiceImpl.java | 60 ++++++++++++++++++- 3 files changed, 66 insertions(+), 4 deletions(-) diff --git a/playlet-admin/src/main/java/com/playlet/web/controller/tool/WxController.java b/playlet-admin/src/main/java/com/playlet/web/controller/tool/WxController.java index 590358f..8649e4d 100644 --- a/playlet-admin/src/main/java/com/playlet/web/controller/tool/WxController.java +++ b/playlet-admin/src/main/java/com/playlet/web/controller/tool/WxController.java @@ -9,6 +9,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; +import java.util.Map; + /** *

微信服务端接口

* @author clunt @@ -49,8 +51,8 @@ public class WxController { @ApiOperation(value = "获取jsapi_ticket", httpMethod = "GET") @GetMapping("/getWxTicket") @ResponseBody - public Result getWxTicket(){ - return Result.success(wxService.getWxTicket()); + public Result> getWxTicket(@RequestParam(value = "url") String url){ + return Result.success(wxService.getWxTicket(url)); } } diff --git a/playlet-admin/src/main/java/com/playlet/web/service/WxService.java b/playlet-admin/src/main/java/com/playlet/web/service/WxService.java index a8fa59a..f669d4b 100644 --- a/playlet-admin/src/main/java/com/playlet/web/service/WxService.java +++ b/playlet-admin/src/main/java/com/playlet/web/service/WxService.java @@ -1,5 +1,7 @@ package com.playlet.web.service; +import java.util.Map; + /** *

微信service类

* @author clunt @@ -14,6 +16,6 @@ public interface WxService { String getWxInfo(String openId, String accessToken); - String getWxTicket(); + Map getWxTicket(String requestUrl); } diff --git a/playlet-admin/src/main/java/com/playlet/web/service/impl/WxServiceImpl.java b/playlet-admin/src/main/java/com/playlet/web/service/impl/WxServiceImpl.java index 5e0f4c8..ee61cba 100644 --- a/playlet-admin/src/main/java/com/playlet/web/service/impl/WxServiceImpl.java +++ b/playlet-admin/src/main/java/com/playlet/web/service/impl/WxServiceImpl.java @@ -10,6 +10,12 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.security.MessageDigest; +import java.util.Formatter; +import java.util.HashMap; +import java.util.Map; +import java.util.Random; + @Slf4j @Service @RequiredArgsConstructor(onConstructor = @__(@Autowired)) @@ -62,7 +68,7 @@ public class WxServiceImpl implements WxService { } @Override - public String getWxTicket() { + public Map getWxTicket(String requestUrl) { String accessTokenResult = HttpUtils.sendGet("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx2b7d9259c1188067&secret=919165aae35838480986555f6c03ae6f"); log.info("accessTokenResult : {} ", accessTokenResult); String accessToken = JSONObject.parseObject(accessTokenResult).getString("access_token"); @@ -70,6 +76,58 @@ public class WxServiceImpl implements WxService { log.info("调用微信获取Ticket,入参url:{}", url); String result = HttpUtils.sendGet(url); log.info("调用微信获取Ticket,响应内容:{}", result); + String ticket = JSONObject.parseObject(result).getString("ticket"); + //生成11位时间戳 + long time11 = System.currentTimeMillis() / 1000; + String timestamp = String.valueOf(time11); + //生成16位随机字符串 + String nonce = create16String(); + String string1 = "jsapi_ticket=" + ticket + "&noncestr=" + nonce + "×tamp=" + timestamp + "&url=" + requestUrl; + // 2.1这里利用了hutool的加密工具类 + log.info("使用sha1加密前的细信息:===>【{}】", string1); + String signature = ""; + try { + MessageDigest crypt = MessageDigest.getInstance("SHA-1"); + crypt.reset(); + crypt.update(string1.getBytes("UTF-8")); + signature = encryptSha1(crypt.digest()); + } catch (Exception e) { + log.info(e.getMessage()); + } + Map resultMap = new HashMap(); + resultMap.put("signature", signature); + resultMap.put("timestamp", timestamp); + resultMap.put("nonce", nonce); + resultMap.put("url", url); + resultMap.put("ticket", ticket); + return resultMap; + } + + + /*** + * 生成微信sha1方法签名 + **/ + public static String encryptSha1(final byte[] hash) { + Formatter formatter = new Formatter(); + for (byte b : hash) { + formatter.format("%02x", b); + } + String result = formatter.toString(); + formatter.close(); return result; } + + + /*** + * 生成16位随机大小写加数字的字符串 + **/ + public static String create16String(){ + String a = "ZXCVBNMASDFGHJKLQWERTYUIOPzxcvbnmasdfghjklqwertyuiop0123456789"; + StringBuilder con = new StringBuilder(); + Random random = new Random(); + for (int i = 0; i < 16; i++) { + con.append(a.charAt(random.nextInt(62))); + } + return con.toString(); + } }