企业微信代开发回调验证java代码
时间: 2023-09-09 20:01:41 浏览: 134
企业微信代开发回调验证是指通过验证企业微信接收到的外部事件回调(例如消息、联系人等),确保这些事件确实是由企业微信发送的。下面给出一个用Java代码实现企业微信代开发回调验证的示例:
```java
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
public class CallbackVerifier {
private static final String TOKEN = "your_token"; // 企业微信后台配置的Token
// 验证回调请求的签名是否合法
public static boolean verifySignature(String signature, String timestamp, String nonce) {
String[] arr = {TOKEN, timestamp, nonce};
Arrays.sort(arr); // 字典序排序
StringBuilder content = new StringBuilder();
for (String s : arr) {
content.append(s);
}
return signature.equals(sha1(content.toString()));
}
// 使用SHA1算法计算字符串的哈希值
private static String sha1(String str) {
try {
MessageDigest digest = MessageDigest.getInstance("SHA-1");
digest.update(str.getBytes());
byte[] bytes = digest.digest();
StringBuilder sb = new StringBuilder();
for (byte b : bytes) {
String hex = Integer.toHexString(b & 0xff);
if (hex.length() == 1) {
sb.append("0");
}
sb.append(hex);
}
return sb.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return null;
}
// 测试
public static void main(String[] args) {
String signature = "signature"; // 从企业微信接收到的请求参数
String timestamp = "timestamp";
String nonce = "nonce";
boolean isValid = verifySignature(signature, timestamp, nonce);
System.out.println("是否合法:" + isValid);
}
}
```
在上述代码中,首先定义了一个TOKEN常量,即企业微信后台配置的Token。然后定义了一个verifySignature方法,该方法接收从企业微信接收到的signature、timestamp和nonce参数,并通过字典序排序和SHA1算法生成待验证的签名。最后,通过判断生成的签名是否与接收到的signature一致来验证回调请求的合法性。
该示例代码可以直接运行,并且可以将TOKEN替换为实际的Token进行验证。
阅读全文