上一篇我们已经通过详细的步骤搞定了微信公众号的自动回复(链接这里:使用flask框架+新浪sae+图灵机器人api来做微信公众号自动回复的超详细方法,但是一开始不是这么顺利的中间遇到各种坑,下面一一道来!
1.新浪云应用的坑
因为是第一次用SAE,所以就跟着网上各种教程在走,然而一开始配置的时候没注意他们基本都是用的共享环境的云应用!!!所以文件都配错了,怪不得在token验证那里一直报错!!!后来几经波折再问了客服,客服发现我跟错文档了,甩了一份独享环境的文档给我。就是下面这份:
http://document.applinzi.com/sae/python-docker.html#%E8%BF%90%E8%A1%8C%E7%8E%AF%E5%A2%83%E8%AF%B4%E6%98%8E
不得不说,这份文档写的详细多了,比网站上另一份文档易懂,不知道为啥新浪不更新这份文档到官网去,不过新浪sae服务器的架构图倒是不错的,可以仔细看看就能明白其中的原理:
按照这份文档去配置云应用就比较简单,要注意Procfile这个文件
是用来启动容器让程序运行的,直接用记事本
写就可以了,里面填上:
wb: python app.py
注意wb后面的冒号还需要再空格一下
才行!
一开始没有这个文件,导致git最后上传远程仓库老是报错如下:
第二个小坑是最好申请了新浪云应用后就进行实名认证
!
认证成功后是这样的
为什么我要建议你这么做呢,因为第一:
新浪云的云豆其实扣的很快的一旦你的服务器搭好后,一天一百多云豆在扣,不认证两天就用完了。。。虽然我们只是体验,但是还没体验就结束了是不是太扯了?
第二:如果没有验证有可能会引起后面token验证通不过,这是据部分网友反应的,所以还是验证吧,还多300云豆。
2. flask框架的小坑
从新浪云的坑爬起来后,我又掉入了flask的坑。。。别问为什么,就是我太菜了第一次用flask框架,一开始连本地应用都没跑通,后来多次检查才发现环境选错了,要选在虚拟环境
下,看我红色画出的部分:
爬出虚拟的坑,又跌进
外网无法访问
的问题,于是又开始各种问谷歌,最后被我找到了解决的办法,看pycharm的官方文档介绍:
原来代码中指定的ip和端口是无效的,需要在以下位置设置,先找到“Edit Configuration"这地方,点开:
然后你看到下面这个页面,在我红框圈住的地方添加那一段代码保存就ok了:
再次运行就看到这样的画面:
好了,flask这里的坑也爬出来了,二级域名也可以访问了,下面我们转站到微信公众号
3.微信公众号的坑坑坑
当新浪云容器启动了,二级域名也正常打开了,我们就来到微信公众号平台这里打算开启“开发者模式”。按照步骤一步步配置后点击提交,满以为是个轻松的配置。纳尼?却出现“token验证失败”
:
这是神马鬼?赶紧再次谷歌了一下,发现网上说出现此种情况的原因很多!!!有说是没有实名认证的、有说是二级域名末尾没有加斜杠的(就是/wechat 这种应该改为 /wechat/ 这样、还有说token填写不一致的等等。好吧 ,小白掌柜决定一一来排查。
首先,新浪云已经实名认证
了,所以排除;再次token两方都是一致
的,也排除;再来给app.route后面的函数绑定加斜杠
,再次验证还是失败,排除了这种;查看token前后都无空格
,所以也排除;最后是sha1算法验证
这里出的问题,直接改成这样:
返回空值就ok! 好啦,再次提交,终于爬出了token的坑,一不小心就要来到最后一个大坑了!
当小白我把图灵机器人的api代码和解析微信回复的代码加入后,再次更新远程仓库成功后应该发出文字就有回应了,但是公众号却出现下面这个!
是的,你没有看错,就是
“该公众号提供的服务出现故障,请稍后再试”
这个大坑!!!瓦特,这又是怎么回事?搜索了一圈,发现好多小伙伴遇到这个问题,而且这个问题的原因也跟token一样有很多种。。。于是乎,又开始“扫雷”之路,第一种:
-
你的接口返回值里面有空格(这个巨坑)看官方文档里面是一堆空格!!!
我们来看微信公众平台的官方文档:
看到没,官方文档都是空格,这样就会导致服务出现故障。解决方法:
去掉xml中的所有空格就ok(尤其要注意符号之间的空格,请严格检查)
。不过小白检查过自己的代码不是这个原因,所以排除;
-
第二种:接口返回值的字段取值不对!
我们再来看官方文档:
ToUserName、FromUserName参数值取错这个也很容易导致出现故障。
因为被动回复用户信息返回值里面的ToUserName、FromUserName参数值
应该取值对应
接收普通消息接口里面的FromUserName、ToUserName。不过小白发现自己并没有搞错,所以也排除了;
-
第三种:之前公众号给第三方授权过
解决办法就是直接去“授权管理”那里点击取消就可以了!然而小白打开自己的授权管理发现如下:
空空如也唱起来所以继续排除这种;
-
第四种:开发者回复异常的数据
我们来看微信官方文档对“服务出现故障,请稍后再试”的解释:
根据这个小白觉得应该是回复了异常数据,于是开启了微信“接口告警”这个功能:
不得不说微信公众平台的这个功能还是要有用的!接着去修改了下面的报警次数:
(其实不改也行,就是默认的5分钟超过30次就会在群里报警提示)
就这样终于让小白收到了错误提示如下图:
所以是在解析微信公众号回复并做出响应的时候,自动回复的格式出错了!这下终于找到错误所在,就可以对症下药了。经过一番吭哧吭哧的鼓捣,终于成功了,再次看到下面的图很是欣慰:
最后终于爬出这个大坑,走上光明大道。经过这次项目,找到了自己的各种不足,通过搜索n个页面来查错:
学会了查看服务器的日志跟运维接口告警这些也是挺好的。希望上面的总结能帮你避开坑坑坑,一路666!