⼩程序启⽤消息推送验证token
刚刚开始处理处理⼩程序消息推送的时候有点懵,处理完之后也是豁然开朗,所以贴上代码给⼤家分享。说明⼀下,我⽤的是SpringBoot。
实现功能分别⽤了三个类:1、entity:WeChatMessage.java、2、controller:WeChatMessageController.java、3、service:WeCharMessageService.java
直接上代码:⾸先是entity
1public class WeChatMessage {
2
3//加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数
4private String signature;
5
6//时间戳
7private String timestamp;
8
9//随机数
10private String nonce;
11
12//随机字符串
13private String echostr;
14
15public String getSignature() {
16return signature;
17 }
18
19public void setSignature(String signature) {
20this.signature = signature;
21 }
22
23public String getTimestamp() {
24return timestamp;
25 }
26
27public void setTimestamp(String timestamp) {
28this.timestamp = timestamp;
29 }
30
31public String getNonce() {
32return nonce;
33 }
34
35public void setNonce(String nonce) {
< = nonce;
37 }
38
39public String getEchostr() {
40return echostr;
41 }
42
43public void setEchostr(String echostr) {
45 }
46
47 }
其次是controller
@RestController
public class WeChatMessageController {
@Autowired
private WeChatMessageService service;
@RequestMapping(value="/getMessage.do", method=RequestMethod.GET)
public String getMessage(WeChatMessage message) {
return service.checkSignature(message);
}
}
最后是service:
@Service
public class WeChatMessageService {
小程序 字符串转数组public String checkSignature(WeChatMessage message) {
String signature = Signature();
String timestamp = Timestamp();
String nonce = Nonce();
String token = "XXXXXXX"; //必须与请求参数中的token⼀致
//将token、timestamp、nonce三个参数进⾏字典排序
String[] arr = new String[] {token, timestamp, nonce};
Arrays.sort(arr);
StringBuilder content = new StringBuilder();
for (int i = 0; i < arr.length; i++) {
content.append(arr[i]);
}
MessageDigest md = null;
String tmpStr = null;
try {
md = Instance("SHA-1");
// 将三个参数字符串拼接成⼀个字符串进⾏sha1加密
byte[] digest = md.String().getBytes());
tmpStr = byteToStr(digest);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return tmpStr != null ? tmpStr.UpperCase()) ? Echostr() : "" : ""; }
/
**
* 将字节数组转换为⼗六进制字符串
* @param byteArray
* @return
*/
private String byteToStr(byte[] byteArray) {
String strDigest = "";
for (int i = 0; i < byteArray.length; i++) {
strDigest += byteToHexStr(byteArray[i]);
}
return strDigest;
}
/**
* 将字节转换为⼗六进制字符串
* @param mByte
* @return
*/
private String byteToHexStr(byte mByte) {
char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
char[] tempArr = new char[2];
tempArr[0] = Digit[(mByte >>> 4) & 0X0F];
tempArr[1] = Digit[mByte & 0X0F];
String s = new String(tempArr);
return s;
}
}
以上代码亲测可⽤,有不好的地⽅请朋友们多多指正。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论