- 引言
今天在写微信公众号的时候,发现微信公众号初始接入总是提示token验证失败,于是定位了一下,首先对比一下程序中的token和微信公众平台的token是否一致,发现没有问题,完全一致;然后进行了debug,发现校验也是通过的,返回的echostr字符串也是正确的,最后发现是返回值无法返回的问题。
正确的代码如下
package com.yunxi.wx.verify;
import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* TODO 微信验证方法
*
* @author xiaoshuaishuai
* @date 2019-08-29 15:08
*/
@RestController
public class WeChatVerify {
/**
* 微信服务器地址验证
*
* @param signature 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
* @param timestamp 时间戳
* @param nonce 随机数
* @param echostr 随机字符串
* @return 返回echostr字符串
*/
@GetMapping(value = "/verifyDeveloper")
public String verifyDeveloper(String signature, String timestamp, String nonce, String echostr, HttpServletResponse response) {
StringBuilder stringBuilder = new StringBuilder();
List<String> list = new ArrayList<>(4);
String token = "xiaoshuaishuai123456";
list.add(token);
list.add(timestamp);
list.add(nonce);
Collections.sort(list);
for (String item : list) {
stringBuilder.append(item);
}
String result = DigestUtils.sha1Hex(stringBuilder.toString());
if (signature.equals(result)) {
return echostr;
} else {
return null;
}
}
}
坑:这里如果使用@Controller注解就会无法返回字符串,因为默认的是视图解析,所以这里要注意一下!谢谢!