From 963d5957875c33a69691c45fbfb4bb297e9586a4 Mon Sep 17 00:00:00 2001 From: ck <851316342@qq.com> Date: Wed, 12 Aug 2020 11:52:00 +0800 Subject: [PATCH] =?UTF-8?q?js=20sdk=20=E7=AD=BE=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bsd/say/service/impl/WeixinService.java | 17 ++++ .../java/com/bsd/say/util/wechat/Sign.java | 86 +++++++++++++++++++ src/main/resources/application.yml | 1 + 3 files changed, 104 insertions(+) create mode 100644 src/main/java/com/bsd/say/util/wechat/Sign.java 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 2df6ccf..08e2d45 100644 --- a/src/main/java/com/bsd/say/service/impl/WeixinService.java +++ b/src/main/java/com/bsd/say/service/impl/WeixinService.java @@ -44,6 +44,8 @@ public class WeixinService extends WxOpenServiceImpl { private String getUnionIdUrl; @Value("${wechat.getWxUserInfoUrl}") private String getWxUserInfoUrl; + @Value("${wechat.getTicketUrl}") + private String getTicketUrl; @Resource private RedisTemplate redisTemplate; @@ -140,4 +142,19 @@ public class WeixinService extends WxOpenServiceImpl { logger.info("userInfo:"+ jsonObject.toString()); return jsonObject; } + + /** + * 通过accessToken刷新ticket + */ + public void getTicket(){ + String result1 = HttpRequestUtils.sendGet("https://api.weq.me/wx/token.php?id=15969759463491&key=1234567890123456"); + JSONObject result2 = JSONObject.parseObject(result1); + String access_token = result2.getString("access_token"); + String getTicketNewUrl = getTicketUrl + access_token + "&type=jsapi"; + String ticketResult = HttpRequestUtils.sendGet(getTicketNewUrl); + JSONObject ticketJson = JSONObject.parseObject(ticketResult); + String jsapi_ticket = ticketJson.getString("ticket"); + redisTemplate.opsForValue().set("jsapi_ticket",jsapi_ticket); + } + } diff --git a/src/main/java/com/bsd/say/util/wechat/Sign.java b/src/main/java/com/bsd/say/util/wechat/Sign.java new file mode 100644 index 0000000..93af73f --- /dev/null +++ b/src/main/java/com/bsd/say/util/wechat/Sign.java @@ -0,0 +1,86 @@ +package com.bsd.say.util.wechat; + +import java.io.UnsupportedEncodingException; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.Formatter; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +/** + * CK + * 2020/8/12 + * 微信JS-SDK使用权限签名算法 + */ + +public class Sign { + public static void main(String[] args) { + String jsapi_ticket = "sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg"; + + // 注意 URL 一定要动态获取,不能 hardcode + String url = "http://mp.weixin.qq.com?params=value"; + Map ret = sign(jsapi_ticket, url); + for (Map.Entry entry : ret.entrySet()) { + System.out.println(entry.getKey() + ", " + entry.getValue()); + } + } + + public static Map sign(String jsapi_ticket, String url) { + Map ret = new HashMap(); + String nonce_str = create_nonce_str(); + String timestamp = create_timestamp(); + String string1; + String signature = ""; + + //注意这里参数名必须全部小写,且必须有序 + string1 = "jsapi_ticket=" + jsapi_ticket + + "&noncestr=" + nonce_str + + "×tamp=" + timestamp + + "&url=" + url; +// System.out.println(string1); + + try + { + MessageDigest crypt = MessageDigest.getInstance("SHA-1"); + crypt.reset(); + crypt.update(string1.getBytes("UTF-8")); + signature = byteToHex(crypt.digest()); + } + catch (NoSuchAlgorithmException e) + { + e.printStackTrace(); + } + catch (UnsupportedEncodingException e) + { + e.printStackTrace(); + } + + ret.put("url", url); + ret.put("jsapi_ticket", jsapi_ticket); + ret.put("nonceStr", nonce_str); + ret.put("timestamp", timestamp); + ret.put("signature", signature); + + return ret; + } + + private static String byteToHex(final byte[] hash) { + Formatter formatter = new Formatter(); + for (byte b : hash) + { + formatter.format("%02x", b); + } + String result = formatter.toString(); + formatter.close(); + return result; + } + + private static String create_nonce_str() { + return UUID.randomUUID().toString(); + } + + private static String create_timestamp() { + return Long.toString(System.currentTimeMillis() / 1000); + } +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 0181ea2..d7b89eb 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -54,6 +54,7 @@ wechat: getAccessTokenUrl: https://api.weixin.qq.com/sns/oauth2/component/access_token?appid= getUnionIdUrl: https://api.weixin.qq.com/sns/userinfo?access_token= getWxUserInfoUrl: https://api.weixin.qq.com/cgi-bin/user/info?access_token= + getTicketUrl: https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token= bsd: