后台点下启用按钮,页面转了一圈弹出token验证失败,不少第一次做微信公众号开发的人就卡在这一步,卡一下午的都大有人在。其实验证本身不复杂,就是微信往你填的URL发一个GET请求,你按规则回话。真正让人栽跟头的,是那些没写在明面上的细节。
验证不过,按这个顺序排查
第一看URL和端口:只认80和443端口,域名必须备案,路径随便写但不能带奇怪字符。第二看返回:微信发来echostr,你解完签名后要原样把echostr返回去,多一个空格、多一段HTML都不行,很多框架默认输出的调试信息就是罪魁祸首。第三看token:后台填的Token要和代码里算签名用的一致,大小写都算数。这三处过了,基本一次就能验证通过。顺带一提,签名算法别自己发明,官方文档里四个参数排序拼接再sha1,照抄就好。还有人栽在反向代理上:配置文件里做了转发,日志里看到的请求和实际到达的对不上,排查时把中间层也看一眼。
本地开发,别急着上服务器
改一行代码传一次服务器,效率低得让人想砸键盘。常用做法是内网穿透,把本机服务映射成一个公网地址,测试号直接指向它,断点想怎么打就怎么打。工具不固定,natapp、frp之类的都行,免费的随机域名每次启动会变,验证配置要重填,赶时间的话花十几块钱买个固定隧道更省心。顺便说一句,测试号的接口权限虽全,但和正式号有差异,正式环境的变量、证书、域名都要在正式号上再验一遍,别测试完就当成交付。等功能跑稳了再部署到正式环境,一遍过。
验证通过不等于万事大吉
有三件事要在通过后立刻做:消息加解密模式先想好选哪种,明文、兼容、安全三选一,中途切换会有一段消息丢失期;服务器IP加入白名单,不然后面获取access_token会报错;把验证代码留着,别验证完就删,微信改配置时还要重新验证。另外服务器地址提交后,旧的配置不会立刻失效,测试时别被缓存迷惑。
- URL必须是备案过的80或443端口地址
- echostr要原样返回,不能有任何多余输出
- 本地联调用内网穿透加测试号,效率高得多
- 配置信息记进共享文档,人员变动交接有据可查
接入这关说难不难,讲究的是细心。多人协作的团队,把服务器地址、token、加解密模式、IP白名单这些配置记进一份共享文档,交接时照单清点,能少走很多弯路。自己反复折腾仍过不了的,可以找比格网络这类常年做微信公众号开发的团队远程看十分钟,多数问题一眼就能定位,比硬耗划算。