入职速递易的第一个任务就是微信公众平台的重构,由于数据量巨大,现今的版本采用的又是灰常冷门 goliath 框架,导致整个系统很难维护了,自然也不敢再在此基础上做更多的功能开发,于是决定重构。

虽然之前有接触过,但是用 rails 接入 微信公众平台,我也是第一做。即使是得到了朋友、同事的很多帮助,但是有些细节依旧要自己摸索。期间也遇到一些诡异的问题。


做微信接入第一步,就是提交 url 和 token,这里本来只是用来做服务器验证的,甚至绝大部分相关的三方插件文档都直接跳过了这一步。但是 遇到的第一个问题就在这里

我搭起来的环境通不过!

  1. 检查页面及 http header 输出,没有问题

  2. 用 php 的代码跑一下,配置成功

  3. 对比两者 http header ,找不同,可疑项比较多,无法确认

  4. 检查引用的 gem 包,然后发现在不使用 puma 的情况下,配置成功

  5. 对比有无 puma 时的 http header, 发现有 puma 时 Transfer-encoding=chunked

  6. 查阅 Transfer-encoding=chunked 相关资料,妈蛋我没开过这个啊。。。。 puma 自己开的?

  7. 停用一部分插件后发现,开启 puma 也不再有 Transfer-encoding=chunked ,配置成功


问题分析:

  1. 微信公众服务的接口可能不接受 Transfer-encoding=chunked 的返回数据

  2. puma 支持 chunked (分段传输),但没有默认开启,之前处于启用状态应该是由于开发环境下某个用于 Debug 的 Gem(我使用了一个在报错网页上提供一个控制台的 gem,应该就是它)


关于第一点 其实我也没法确认,有知道的或者遇到相同问题的,可以找我交流一下

总之,微信的坑 真心不少啊~~~