最近做了一个企业微信接入的项目,JS-SDK使用权限签名算法附源码,觉得有用记得点赞转发,感谢!
/*---生成验签规则开始------*/
@Autowired
EnterWeChatView enterWeChatView;//自定义类获取properties里面的参数
public Map<String, String> makeWXTicket(String url) {
String jsApiTicket = null;
try {
jsApiTicket = this.ewJsSdk();
Map<String, String> ret = new HashMap<String, String>();
String timestamp = createTimestamp();
/*-----------------------*/
Map<String, String> params = new HashMap<String, String>();
params.put("jsapi_ticket", jsApiTicket);
params.put("noncestr", getSign());
params.put("timestamp", timestamp);
params.put("url", url);
//1.1 对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)
Map<String, String> sortParams = sortAsc(params);
//1.2 使用URL键值对的格式拼接成字符串
String str = mapJoin(sortParams, false);
// 获取指定摘要算法的messageDigest对象
MessageDigest messageDigest = null; // 此处的sha代表sha1
try {
messageDigest = MessageDigest.getInstance("SHA");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
// 调用digest方法,进行加密操作
byte[] cipherBytes = messageDigest.digest(str.getBytes());
String cipherStr = Hex.encodeHexString(cipherBytes);
System.out.println(cipherStr);
ret.put("appId", enterWeChatView.getCorpid());
ret.put("timestamp", timestamp);
ret.put("noncestr", getSign());
ret.put("signature", cipherStr);
/*-----------------------*/
return ret;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
private HashMap<String, String> sortAsc(Map<String, String> map) {
HashMap<String, String> tempMap = new LinkedHashMap