这段时间研究微信公众号,发现了很多坑,现在贴出来做个记录
1、微信公众号在做开发的时候,首先就是对微信的服务接口的配置。让微信能够响应我们的接口。官方的接口文档吧可以这么说,你懂的或者了解他了吧可以说简单些,但是当你刚接触的时候,你会感觉写的是啥啊,压根看不懂。
好了步入正题
首先接口配置,这个就不多说了,图上标的很清楚
这个配置好了就是后台接收微信的验证参数了先来看看微信对这个接口的说明吧
就四个参数,你需要对这几个参数进行加解密啊等操作,然后确认是不是微信发送来的请求,完事后,看到图片上标红的地方了吧,原样返回。
1、什么是原样返回,我接收的string类型,那么我这个接口返回spring类型就ok了,但是问题来了 验证token是吧
2、继续怀疑微信发来的参数都是加密的,需不需要给他解密下返回原来样子了(猜想,但是我明显勾选的的是明文啊),还是token验证失败
3、换个思路,是不是我这就return这种echostr不对了。那就像原来最老的那种返回,咱们把参数直接write到response里面
上图
@GetMapping("/welcome")public void checkName(@RequestParam(name = "signature") String signature,@RequestParam(name = "timestamp") String timestamp,@RequestParam(name = "nonce") String nonce,@RequestParam(name = "echostr") String echostr,HttpServletResponse response) throws IOException, AesException {System.out.println("-----------------------开始校验------------------------");//排序String sortString = CheckoutUntil.sort(TOKEN, timestamp, nonce);//加密String myString = CheckoutUntil.sha1(sortString);//校验if (myString != null && myString != "" && myString.equals(signature)) {System.out.println("签名校验通过");//如果检验成功原样返回echostr,微信服务器接收到此输出,才会确认检验完成。PrintWriter out = null;try {out = response.getWriter();// 通过检验signature对请求进行校验,若校验成功则原样返回echostr,否则接入失败out.print(echostr);} catch (IOException e) {e.printStackTrace();} finally {out.close();}}
这样返回,发现验证成功了。
网上的说法五法八门的,有的说是要返回xml文本,有的说返回的格式不对,还有的说返回的编码格式不对。最后这种直接写的方法我是配置成功了。后来有人问我为啥一直配置失败,我把我的这个给他,反正他也成功了,记录下。你要成功了点个赞吧哈哈哈