快三大小单双口诀引言
今天在写微信公众号的时候,发现微信公众号初始接入总是提示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 */@RestControllerpublic 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注解就会无法返回字符串,因为默认的是视图解析,所以这里要注意一下!谢谢!