使用flask框架和新浪云sae搭建微信公众号自动回复的各种坑

上一篇我们已经通过详细的步骤搞定了微信公众号的自动回复(链接这里:使用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服务器的架构图倒是不错的,可以仔细看看就能明白其中的原理:


sae架构图

按照这份文档去配置云应用就比较简单,要注意Procfile这个文件是用来启动容器让程序运行的,直接用记事本写就可以了,里面填上:

wb: python app.py

注意wb后面的冒号还需要再空格一下才行!
一开始没有这个文件,导致git最后上传远程仓库老是报错如下:

第二个小坑是最好申请了新浪云应用后就进行实名认证!
认证成功后是这样的


为什么我要建议你这么做呢,因为第一:
新浪云的云豆其实扣的很快的一旦你的服务器搭好后,一天一百多云豆在扣,不认证两天就用完了。。。虽然我们只是体验,但是还没体验就结束了是不是太扯了?

第二:如果没有验证有可能会引起后面token验证通不过,这是据部分网友反应的,所以还是验证吧,还多300云豆。

2. flask框架的小坑
从新浪云的坑爬起来后,我又掉入了flask的坑。。。别问为什么,就是我太菜了第一次用flask框架,一开始连本地应用都没跑通,后来多次检查才发现环境选错了,要选在虚拟环境下,看我红色画出的部分:


爬出虚拟的坑,又跌进外网无法访问的问题,于是又开始各种问谷歌,最后被我找到了解决的办法,看pycharm的官方文档介绍:
clipboard.png

原来代码中指定的ip和端口是无效的,需要在以下位置设置,先找到“Edit Configuration"这地方,点开:

然后你看到下面这个页面,在我红框圈住的地方添加那一段代码保存就ok了:

再次运行就看到这样的画面:

好了,flask这里的坑也爬出来了,二级域名也可以访问了,下面我们转站到微信公众号

3.微信公众号的坑坑坑
当新浪云容器启动了,二级域名也正常打开了,我们就来到微信公众号平台这里打算开启“开发者模式”。按照步骤一步步配置后点击提交,满以为是个轻松的配置。纳尼?却出现“token验证失败”

token验证失败。。。.png

这是神马鬼?赶紧再次谷歌了一下,发现网上说出现此种情况的原因很多!!!有说是没有实名认证的、有说是二级域名末尾没有加斜杠的(就是/wechat 这种应该改为 /wechat/ 这样、还有说token填写不一致的等等。好吧 ,小白掌柜决定一一来排查。

首先,新浪云已经实名认证了,所以排除;再次token两方都是一致的,也排除;再来给app.route后面的函数绑定加斜杠,再次验证还是失败,排除了这种;查看token前后都无空格,所以也排除;最后是sha1算法验证这里出的问题,直接改成这样:

image.png

返回空值就ok! 好啦,再次提交,终于爬出了token的坑,一不小心就要来到最后一个大坑了!

当小白我把图灵机器人的api代码和解析微信回复的代码加入后,再次更新远程仓库成功后应该发出文字就有回应了,但是公众号却出现下面这个!


是的,你没有看错,就是“该公众号提供的服务出现故障,请稍后再试”这个大坑!!!瓦特,这又是怎么回事?搜索了一圈,发现好多小伙伴遇到这个问题,而且这个问题的原因也跟token一样有很多种。。。于是乎,又开始“扫雷”之路,第一种:

  • 你的接口返回值里面有空格(这个巨坑)看官方文档里面是一堆空格!!!

我们来看微信公众平台的官方文档:


看到没,官方文档都是空格,这样就会导致服务出现故障。解决方法:
去掉xml中的所有空格就ok(尤其要注意符号之间的空格,请严格检查)。不过小白检查过自己的代码不是这个原因,所以排除;

  • 第二种:接口返回值的字段取值不对!

我们再来看官方文档:

文本消息.png

ToUserName、FromUserName参数值取错这个也很容易导致出现故障。
因为被动回复用户信息返回值里面的ToUserName、FromUserName参数值
应该取值对应接收普通消息接口里面的FromUserName、ToUserName。不过小白发现自己并没有搞错,所以也排除了;

  • 第三种:之前公众号给第三方授权过

解决办法就是直接去“授权管理”那里点击取消就可以了!然而小白打开自己的授权管理发现如下:


授权管理

空空如也唱起来所以继续排除这种;

  • 第四种:开发者回复异常的数据

我们来看微信官方文档对“服务出现故障,请稍后再试”的解释:


故障官方解释.png

根据这个小白觉得应该是回复了异常数据,于是开启了微信“接口告警”这个功能:


接口告警.png

不得不说微信公众平台的这个功能还是要有用的!接着去修改了下面的报警次数:
告警阈值.png

(其实不改也行,就是默认的5分钟超过30次就会在群里报警提示)
就这样终于让小白收到了错误提示如下图:


错误样例.png

所以是在解析微信公众号回复并做出响应的时候,自动回复的格式出错了!这下终于找到错误所在,就可以对症下药了。经过一番吭哧吭哧的鼓捣,终于成功了,再次看到下面的图很是欣慰:
成功.png

最后终于爬出这个大坑,走上光明大道。经过这次项目,找到了自己的各种不足,通过搜索n个页面来查错:


nnn.PNG

学会了查看服务器的日志跟运维接口告警这些也是挺好的。希望上面的总结能帮你避开坑坑坑,一路666!

你可能感兴趣的:(使用flask框架和新浪云sae搭建微信公众号自动回复的各种坑)