java实现微信公众号加签的例子
时间: 2023-12-17 07:03:32 浏览: 83
好的,以下是一个使用 Java 实现微信公众号加签的示例代码:
```java
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
public class WxSignUtil {
// 与开发者中心页面上的配置信息一致
private static final String token = "your_token";
/**
* 验证签名
*
* @param signature 微信加密签名
* @param timestamp 时间戳
* @param nonce 随机数
* @return
*/
public static boolean checkSignature(String signature, String timestamp, String nonce) {
// 1. 将 token、timestamp、nonce 三个参数进行字典序排序
String[] arr = new String[]{token, timestamp, nonce};
Arrays.sort(arr);
// 2. 将三个参数字符串拼接成一个字符串
String str = arr[0] + arr[1] + arr[2];
// 3. 对拼接后的字符串进行 SHA1 加密
String sha1Str = sha1(str);
// 4. 将加密后的字符串与 signature 进行比较,判断消息是否来自于微信服务器
return sha1Str.equals(signature);
}
/**
* 对字符串进行 SHA1 加密
*
* @param str
* @return
*/
private static String sha1(String str) {
try {
MessageDigest digest = MessageDigest.getInstance("SHA-1");
digest.update(str.getBytes());
byte[] messageDigest = digest.digest();
StringBuilder sb = new StringBuilder();
for (byte b : messageDigest) {
sb.append(String.format("%02x", b));
}
return sb.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return "";
}
}
```
在这个示例中,我们定义了一个 `WxSignUtil` 工具类,其中包含了一个 `checkSignature()` 方法,用于验证微信服务器发送的消息的签名是否正确。在该方法中,我们首先将 `token`、`timestamp`、`nonce` 三个参数按照字典序排序,然后拼接成一个字符串,再对该字符串进行 SHA1 加密,并将加密后的结果与 `signature` 进行比较,以判断消息是否来自于微信服务器。如果验证通过,则返回 `true`,否则返回 `false`。
需要注意的是,我们在 `WxSignUtil` 类中定义的 `token` 常量需要设置成自己在微信公众平台上设置的 Token 值。同时,我们需要将 `signature`、`timestamp`、`nonce` 等参数传递给 `checkSignature()` 方法进行验证。具体的调用方法可以参考微信公众平台的开发文档。
阅读全文