收藏
回答

【已解决】Token校验失败,请检查确认

框架类型 问题类型 操作时间 AppID
小程序 Bug 2023-05-21 wx7cbfa0a1691dce1c

将之前已经配置好了的消息推送的URL由http更换为https后一直报错【Token校验失败,请检查确认】。

使用postman、curl服务端都正常响应,但是点击提交验证,服务端收不到微信的请求。

搜了一圈,有个帖子说不能用代理,这个好像不太可能吧,和代理应该是没有关系的。

还有个帖子说是域名刚刚经过备案微信还没来得及更新?我的域名确实是昨天刚刚通过备案的,但这个应该也不影响的吧,公网已经可以正常访问了,微信没有理由无法访问呀。

curl测试连接:

$ curl -v https://api.customizer.cc/wechatmessage


*   Trying 47.100.178.1:443...
* Connected to api.customizer.cc (47.100.178.1) port 443 (#0)
* ALPN: offers h2
* ALPN: offers http/1.1
CAfile: /etc/ssl/cert.pem
CApath: none
* (304) (OUT), TLS handshake, Client hello (1):
* (304) (IN), TLS handshake, Server hello (2):
* (304) (IN), TLS handshake, Unknown (8):
* (304) (IN), TLS handshake, Certificate (11):
* (304) (IN), TLS handshake, CERT verify (15):
* (304) (IN), TLS handshake, Finished (20):
* (304) (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / AEAD-AES256-GCM-SHA384
* ALPN: server did not agree on a protocol. Uses default.
* Server certificate:
subject: CN=api.customizer.cc
start date: May 18 00:00:00 2023 GMT
expire date: May 17 23:59:59 2024 GMT
subjectAltName: host "api.customizer.cc" matched cert's "api.customizer.cc"
issuer: C=US; O=DigiCert Inc; OU=www.digicert.com; CN=Encryption Everywhere DV TLS CA - G1
SSL certificate verify ok.
> GET /wechatmessage HTTP/1.1
> Host: api.customizer.cc
> User-Agent: curl/7.86.0
> Accept: */*
> 
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< access-control-allow-credentials: true
< access-control-allow-origin: *
< access-control-expose-headers: *, Authorization, X-Authorization
< referrer-policy: no-referrer-when-downgrade
< vary: Origin
< date: Sat, 20 May 2023 11:04:15 GMT
< content-length: 27
< content-type: text/plain; charset=utf-8
< x-envoy-upstream-service-time: 0
< server: envoy
< 
* Connection #0 to host api.customizer.cc left intact


可以看到「SSL certificate verify ok」,说明 SSL 证书是没问题的。


---------

【已解决】

无意中看到了这个帖子:

请问公众号服务器配置一直提示“token验证失败”,服务器也接收不到请求通知是什么问题?? - 微信开放社区 https://developers.weixin.qq.com/community/develop/doc/0002246df549089553bd69bdc51c00

突然意识到大概率是这个原因,因为我用的是envoy作为入口网关,而envoy默认是拒绝一切HTTP 1.0请求的。

在envoy.yaml中新增以下字段:

http_protocol_options:
    accept_http_10: true


然后再点击验证:

可以看到,配置成功。


总结

微信这个Get请求使用的是 HTTP 1.0 协议,你的服务器一定要开启 HTTP 1.0 支持,否则请求是进不到你的 handler 的,因为会被服务器直接拒绝。

如果有官方人员看到这里,如果你还有点良心,提个内部issue,文档上把这些要求写清楚,而不是啥都不说,就返回个验证失败。

我看到这个问题社区提问几页都翻不完,可见多少开发者在这种不应该花时间的地方花了不知道多少时间,不应该是这个样子。

最后一次编辑于  2023-05-21
回答关注问题邀请回答
收藏

4 个回答

  • 鳖载着理发店
    鳖载着理发店
    04-08

    我用的是ngrok,怎么设置http1.0呢?

    04-08
    有用
    回复 2
    • 哎呀ᯤ⁶ᴳ
      哎呀ᯤ⁶ᴳ
      04-09
      同问有解决的办法了吗 我用的也是ngrok
      04-09
      回复
    • 哎呀ᯤ⁶ᴳ
      哎呀ᯤ⁶ᴳ
      04-09回复哎呀ᯤ⁶ᴳ
      换花生壳吧,我换成花生壳以后好了
      04-09
      回复
  • 白
    2023-09-10

    我用测试公众号能成功通过校验,放到正式的公众号后就一直提示Token超时,真的吐了

    2023-09-10
    有用
    回复 1
    • 从君华
      从君华
      2023-09-18
      所以是什么原因呢
      2023-09-18
      回复
  • 书
    2023-08-08

    我也中招了,HTTP 1.0的问题

    2023-08-08
    有用
    回复 1
    • 从君华
      从君华
      2023-08-18
      哈哈,这帮狗逼文档里面只字不提,就让你遇到了浪费时间。
      2023-08-18
      1
      回复
  • Jianbo
    Jianbo
    2023-05-20

    如果是http下正常的,就检查下ssl证书是否有问题。

    2023-05-20
    有用
    回复 4
    • 从君华
      从君华
      2023-05-20
      https下也是正常的,postman、curl、浏览器访问都正常,就微信无法访问。
      2023-05-20
      回复
    • 刘迪
      刘迪
      2023-07-27回复从君华
      https下也是正常的,postman、curl、浏览器访问都正常返回参数。微信的请求后台服务也能收到。也主动return了。但微信还是报token校验失败。大佬知道为什么么
      2023-07-27
      回复
    • 从君华
      从君华
      2023-07-27回复刘迪
      那大概率是return的内容不对。
      2023-07-27
      回复
    • 鳖载着理发店
      鳖载着理发店
      04-08回复从君华
      请问需要return什么内容呀,我return的是success
      04-08
      回复
登录 后发表内容