自己在申请测试号的时候,一直报这个错,折腾了一天也没有成功,前提是自己设置的域名没毛病,官方要求是 微信公众号接口必须以http://或https://开头,分别支持80端口和443端口。但是自己也没有成功,网上查了半天也没有正确的解决方法,一直报 {"errcode":-106,"errmsg":"token check fail"},所以我决定通过一次次测试,彻底解决这个虽然很小但是很烦的问题。

先确定报错信息,浏览器F12进入开发者模式,提交后发现报错信息 {"errcode":-106,"errmsg":"token check fail"}

如果域名或者url有问题,可能会报-107,timeout 错误信息,大家一定要注意区别

-106 的错误经过反复的定位,问题还是在后端服务器那边,我也是在不断的重试中总结出来两点:

解决问题:

1.设置  ContentType格式为text/html

2.通过 response.getWriter().print() 方式输出 echoStr,而不是直接return  echoStr 字符串

3.根返回类型是不是Long类型其实无关,网上有很多说必须是Long类型

直接放代码 (JAVA):

 @GetMapping(value = "/auth")
    @ResponseBody
    public void auth6(HttpServletRequest request,
                      HttpServletResponse response){
        log.info("auth checking start...");
        try {
            String nonce = request.getParameter("nonce");
            String timestamp = request.getParameter("timestamp");
            String signature = request.getParameter("signature");
            String echoStr = request.getParameter("echostr");
            log.info("auth,nonce:{},timestamp:{},signature:{},echoStr:{}",nonce,timestamp,signature,echoStr);
            response.setContentType("text/html");
            response.getWriter().print(echoStr);
            log.info("auth echoStr:"+echoStr);
            log.info("auth checking success!");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

就这么简简单单的几行代码,折腾了很久。只怪微信官方的文档不够详细,也饶了很多弯

这里的nonce,timestamp,signature 几个参数暂时没有什么用处,我打印只是为了观察下微信回调的时候这些值

再次测试一下,就成功了。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐