上一篇我們已經(jīng)通過詳細的步驟搞定了微信公眾號的自動回復(鏈接這里:使用flask框架+新浪sae+圖靈機器人api來做微信公眾號自動回復的超詳細方法,但是一開始不是這么順利的中間遇到各種坑,下面一一道來!
1.新浪云應(yīng)用的坑
因為是第一次用SAE,所以就跟著網(wǎng)上各種教程在走,然而一開始配置的時候沒注意他們基本都是用的共享環(huán)境的云應(yīng)用?。?!所以文件都配錯了,怪不得在token驗證那里一直報錯?。?!后來幾經(jīng)波折再問了客服,客服發(fā)現(xiàn)我跟錯文檔了,甩了一份獨享環(huán)境的文檔給我。就是下面這份:

不得不說,這份文檔寫的詳細多了,比網(wǎng)站上另一份文檔易懂,不知道為啥新浪不更新這份文檔到官網(wǎng)去,不過新浪sae服務(wù)器的架構(gòu)圖倒是不錯的,可以仔細看看就能明白其中的原理:

按照這份文檔去配置云應(yīng)用就比較簡單,要注意Procfile這個文件是用來啟動容器讓程序運行的,直接用記事本寫就可以了,里面填上:
wb: python app.py
注意wb后面的冒號還需要再空格一下才行!
一開始沒有這個文件,導致git最后上傳遠程倉庫老是報錯如下:

第二個小坑是最好申請了新浪云應(yīng)用后就進行實名認證!
認證成功后是這樣的
為什么我要建議你這么做呢,因為第一:
新浪云的云豆其實扣的很快的一旦你的服務(wù)器搭好后,一天一百多云豆在扣,不認證兩天就用完了。。。雖然我們只是體驗,但是還沒體驗就結(jié)束了是不是太扯了?

第二:如果沒有驗證有可能會引起后面token驗證通不過,這是據(jù)部分網(wǎng)友反應(yīng)的,所以還是驗證吧,還多300云豆。
2. flask框架的小坑
從新浪云的坑爬起來后,我又掉入了flask的坑。。。別問為什么,就是我太菜了??第一次用flask框架,一開始連本地應(yīng)用都沒跑通,后來多次檢查才發(fā)現(xiàn)環(huán)境選錯了,要選在虛擬環(huán)境下,看我紅色畫出的部分:
爬出虛擬的坑,又跌進
外網(wǎng)無法訪問的問題,于是又開始各種問谷歌,最后被我找到了解決的辦法,看pycharm的官方文檔介紹:
原來代碼中指定的ip和端口是無效的,需要在以下位置設(shè)置,先找到“Edit Configuration"這地方,點開:

然后你看到下面這個頁面,在我紅框圈住的地方添加那一段代碼保存就ok了:

再次運行就看到這樣的畫面:

好了,flask這里的坑也爬出來了,二級域名也可以訪問了,下面我們轉(zhuǎn)站到微信公眾號??
3.微信公眾號的坑坑坑
當新浪云容器啟動了,二級域名也正常打開了,我們就來到微信公眾號平臺這里打算開啟“開發(fā)者模式”。按照步驟一步步配置后點擊提交,滿以為是個輕松的配置。納尼?卻出現(xiàn)“token驗證失敗”:

這是神馬鬼?趕緊再次谷歌了一下,發(fā)現(xiàn)網(wǎng)上說出現(xiàn)此種情況的原因很多?。?!有說是沒有實名認證的、有說是二級域名末尾沒有加斜杠的(就是/wechat 這種應(yīng)該改為 /wechat/ 這樣、還有說token填寫不一致的等等。好吧 ,小白掌柜決定一一來排查。
首先,新浪云已經(jīng)實名認證了,所以排除;再次token兩方都是一致的,也排除;再來給app.route后面的函數(shù)綁定加斜杠,再次驗證還是失敗,排除了這種;查看token前后都無空格,所以也排除;最后是sha1算法驗證這里出的問題,直接改成這樣:

返回空值就ok! 好啦,再次提交,終于爬出了token的坑,一不小心就要來到最后一個大坑了!
當小白我把圖靈機器人的api代碼和解析微信回復的代碼加入后,再次更新遠程倉庫成功后應(yīng)該發(fā)出文字就有回應(yīng)了,但是公眾號卻出現(xiàn)下面這個!

是的,你沒有看錯,就是
“該公眾號提供的服務(wù)出現(xiàn)故障,請稍后再試”這個大坑!?。⊥咛?,這又是怎么回事?搜索了一圈,發(fā)現(xiàn)好多小伙伴遇到這個問題,而且這個問題的原因也跟token一樣有很多種。。。于是乎,又開始“掃雷”之路,第一種:
-
你的接口返回值里面有空格(這個巨坑)看官方文檔里面是一堆空格?。?!
我們來看微信公眾平臺的官方文檔:

看到?jīng)],官方文檔都是空格,這樣就會導致服務(wù)出現(xiàn)故障。解決方法:
去掉xml中的所有空格就ok(尤其要注意符號之間的空格,請嚴格檢查)。不過小白檢查過自己的代碼不是這個原因,所以排除;
-
第二種:接口返回值的字段取值不對!
我們再來看官方文檔:

ToUserName、FromUserName參數(shù)值取錯這個也很容易導致出現(xiàn)故障。
因為被動回復用戶信息返回值里面的ToUserName、FromUserName參數(shù)值
應(yīng)該取值對應(yīng)接收普通消息接口里面的FromUserName、ToUserName。不過小白發(fā)現(xiàn)自己并沒有搞錯,所以也排除了;
-
第三種:之前公眾號給第三方授權(quán)過
解決辦法就是直接去“授權(quán)管理”那里點擊取消就可以了!然而小白打開自己的授權(quán)管理發(fā)現(xiàn)如下:

空空如也唱起來??所以繼續(xù)排除這種;
-
第四種:開發(fā)者回復異常的數(shù)據(jù)
我們來看微信官方文檔對“服務(wù)出現(xiàn)故障,請稍后再試”的解釋:

根據(jù)這個小白覺得應(yīng)該是回復了異常數(shù)據(jù),于是開啟了微信“接口告警”這個功能:

不得不說微信公眾平臺的這個功能還是要有用的!接著去修改了下面的報警次數(shù):

(其實不改也行,就是默認的5分鐘超過30次就會在群里報警提示)
就這樣終于讓小白收到了錯誤提示如下圖:

所以是在解析微信公眾號回復并做出響應(yīng)的時候,自動回復的格式出錯了!這下終于找到錯誤所在,就可以對癥下藥了??。經(jīng)過一番吭哧吭哧的鼓搗,終于成功了,再次看到下面的圖很是欣慰:

最后終于爬出這個大坑,走上光明大道??。經(jīng)過這次項目,找到了自己的各種不足,通過搜索n個頁面來查錯??:
學會了查看服務(wù)器的日志跟運維接口告警這些也是挺好的。希望上面的總結(jié)能幫你避開坑坑坑,一路666!