| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- package com.malk.server.dingtalk;
- import lombok.SneakyThrows;
- import java.net.URL;
- import java.net.URLDecoder;
- import java.security.MessageDigest;
- import java.util.Formatter;
- import java.util.Random;
- /**
- * 计算dd.config的签名参数
- **/
- public class DDConfigSign {
- /**
- * 计算dd.config的签名参数
- *
- * @param jsticket 通过微应用appKey获取的jsticket
- * @param nonceStr 自定义固定字符串
- * @param timeStamp 当前时间戳
- * @param url 调用dd.config的当前页面URL
- */
- @SneakyThrows
- public static String sign(String jsticket, String nonceStr, long timeStamp, String url) {
- String plain = "jsapi_ticket=" + jsticket + "&noncestr=" + nonceStr + "×tamp=" + timeStamp + "&url=" + decodeUrl(url);
- MessageDigest sha1 = MessageDigest.getInstance("SHA-256");
- sha1.reset();
- sha1.update(plain.getBytes("UTF-8"));
- return byteToHex(sha1.digest());
- }
- // 字节数组转化成十六进制字符串
- 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;
- }
- /**
- * 因为ios端上传递的url是encode过的,android是原始的url。开发者使用的也是原始url,
- * 所以需要把参数进行一般urlDecode
- */
- private static String decodeUrl(String url) throws Exception {
- URL urler = new URL(url);
- StringBuilder urlBuffer = new StringBuilder();
- urlBuffer.append(urler.getProtocol());
- urlBuffer.append(":");
- if (urler.getAuthority() != null && urler.getAuthority().length() > 0) {
- urlBuffer.append("//");
- urlBuffer.append(urler.getAuthority());
- }
- if (urler.getPath() != null) {
- urlBuffer.append(urler.getPath());
- }
- if (urler.getQuery() != null) {
- urlBuffer.append('?');
- urlBuffer.append(URLDecoder.decode(urler.getQuery(), "utf-8"));
- }
- return urlBuffer.toString();
- }
- /// test
- public static String getRandomStr(int count) {
- String base = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
- Random random = new Random();
- StringBuffer sb = new StringBuffer();
- for (int i = 0; i < count; i++) {
- int number = random.nextInt(base.length());
- sb.append(base.charAt(number));
- }
- return sb.toString();
- }
- }
|