上一篇我們已經(jīng)通過(guò)詳細(xì)的步驟搞定了微信公眾號(hào)的自動(dòng)回復(fù)(鏈接這里:使用flask框架+新浪sae+圖靈機(jī)器人api來(lái)做微信公眾號(hào)自動(dòng)回復(fù)的超詳細(xì)方法郑兴,但是一開始不是這么順利的中間遇到各種坑鹏漆,下面一一道來(lái)!
1.新浪云應(yīng)用的坑
因?yàn)槭堑谝淮斡肧AE,所以就跟著網(wǎng)上各種教程在走,然而一開始配置的時(shí)候沒(méi)注意他們基本都是用的共享環(huán)境的云應(yīng)用!2嗜印!所以文件都配錯(cuò)了僻爽,怪不得在token驗(yàn)證那里一直報(bào)錯(cuò)3娴铩!胸梆!后來(lái)幾經(jīng)波折再問(wèn)了客服敦捧,客服發(fā)現(xiàn)我跟錯(cuò)文檔了,甩了一份獨(dú)享環(huán)境的文檔給我碰镜。就是下面這份:
不得不說(shuō)兢卵,這份文檔寫的詳細(xì)多了,比網(wǎng)站上另一份文檔易懂绪颖,不知道為啥新浪不更新這份文檔到官網(wǎng)去济蝉,不過(guò)新浪sae服務(wù)器的架構(gòu)圖倒是不錯(cuò)的,可以仔細(xì)看看就能明白其中的原理:
按照這份文檔去配置云應(yīng)用就比較簡(jiǎn)單菠发,要注意Procfile這個(gè)文件
是用來(lái)啟動(dòng)容器讓程序運(yùn)行的,直接用記事本
寫就可以了贺嫂,里面填上:
wb: python app.py
注意wb后面的冒號(hào)還需要再空格一下
才行滓鸠!
一開始沒(méi)有這個(gè)文件,導(dǎo)致git最后上傳遠(yuǎn)程倉(cāng)庫(kù)老是報(bào)錯(cuò)如下:
第二個(gè)小坑是最好申請(qǐng)了新浪云應(yīng)用后就進(jìn)行實(shí)名認(rèn)證
!
認(rèn)證成功后是這樣的
為什么我要建議你這么做呢第喳,因?yàn)榈谝唬?br> 新浪云的云豆其實(shí)扣的很快的一旦你的服務(wù)器搭好后糜俗,一天一百多云豆在扣,不認(rèn)證兩天就用完了。悠抹。珠月。雖然我們只是體驗(yàn),但是還沒(méi)體驗(yàn)就結(jié)束了是不是太扯了楔敌?
第二:如果沒(méi)有驗(yàn)證有可能會(huì)引起后面token驗(yàn)證通不過(guò)啤挎,這是據(jù)部分網(wǎng)友反應(yīng)的,所以還是驗(yàn)證吧卵凑,還多300云豆庆聘。
2. flask框架的小坑
從新浪云的坑爬起來(lái)后,我又掉入了flask的坑勺卢。伙判。。別問(wèn)為什么黑忱,就是我太菜了??第一次用flask框架宴抚,一開始連本地應(yīng)用都沒(méi)跑通,后來(lái)多次檢查才發(fā)現(xiàn)環(huán)境選錯(cuò)了甫煞,要選在虛擬環(huán)境
下菇曲,看我紅色畫出的部分:
爬出虛擬的坑,又跌進(jìn)
外網(wǎng)無(wú)法訪問(wèn)
的問(wèn)題危虱,于是又開始各種問(wèn)谷歌羊娃,最后被我找到了解決的辦法,看pycharm的官方文檔介紹:原來(lái)代碼中指定的ip和端口是無(wú)效的埃跷,需要在以下位置設(shè)置龙屉,先找到“Edit Configuration"這地方叉瘩,點(diǎn)開:
然后你看到下面這個(gè)頁(yè)面,在我紅框圈住的地方添加那一段代碼保存就ok了:
再次運(yùn)行就看到這樣的畫面:
好了,flask這里的坑也爬出來(lái)了懂鸵,二級(jí)域名也可以訪問(wèn)了,下面我們轉(zhuǎn)站到微信公眾號(hào)??
3.微信公眾號(hào)的坑坑坑
當(dāng)新浪云容器啟動(dòng)了跟伏,二級(jí)域名也正常打開了耻姥,我們就來(lái)到微信公眾號(hào)平臺(tái)這里打算開啟“開發(fā)者模式”。按照步驟一步步配置后點(diǎn)擊提交厕吉,滿以為是個(gè)輕松的配置酱固。納尼?卻出現(xiàn)“token驗(yàn)證失敗”
:
這是神馬鬼项钮?趕緊再次谷歌了一下班眯,發(fā)現(xiàn)網(wǎng)上說(shuō)出現(xiàn)此種情況的原因很多OM!!署隘!有說(shuō)是沒(méi)有實(shí)名認(rèn)證的宠能、有說(shuō)是二級(jí)域名末尾沒(méi)有加斜杠的(就是/wechat 這種應(yīng)該改為 /wechat/ 這樣、還有說(shuō)token填寫不一致的等等磁餐。好吧 违崇,小白掌柜決定一一來(lái)排查。
首先崖媚,新浪云已經(jīng)實(shí)名認(rèn)證
了亦歉,所以排除;再次token兩方都是一致
的畅哑,也排除肴楷;再來(lái)給app.route后面的函數(shù)綁定加斜杠
,再次驗(yàn)證還是失敗荠呐,排除了這種赛蔫;查看token前后都無(wú)空格
,所以也排除泥张;最后是sha1算法驗(yàn)證
這里出的問(wèn)題呵恢,直接改成這樣:
返回空值就ok! 好啦媚创,再次提交渗钉,終于爬出了token的坑,一不小心就要來(lái)到最后一個(gè)大坑了钞钙!
當(dāng)小白我把圖靈機(jī)器人的api代碼和解析微信回復(fù)的代碼加入后鳄橘,再次更新遠(yuǎn)程倉(cāng)庫(kù)成功后應(yīng)該發(fā)出文字就有回應(yīng)了,但是公眾號(hào)卻出現(xiàn)下面這個(gè)芒炼!
是的瘫怜,你沒(méi)有看錯(cuò),就是
“該公眾號(hào)提供的服務(wù)出現(xiàn)故障本刽,請(qǐng)稍后再試”
這個(gè)大坑>ㄅ取!子寓!瓦特暗挑,這又是怎么回事?搜索了一圈斜友,發(fā)現(xiàn)好多小伙伴遇到這個(gè)問(wèn)題窿祥,而且這個(gè)問(wèn)題的原因也跟token一樣有很多種。蝙寨。晒衩。于是乎,又開始“掃雷”之路墙歪,第一種:
-
你的接口返回值里面有空格(這個(gè)巨坑)看官方文檔里面是一堆空格L怠!虹菲!
我們來(lái)看微信公眾平臺(tái)的官方文檔:
看到?jīng)]靠胜,官方文檔都是空格,這樣就會(huì)導(dǎo)致服務(wù)出現(xiàn)故障毕源。解決方法:
去掉xml中的所有空格就ok(尤其要注意符號(hào)之間的空格浪漠,請(qǐng)嚴(yán)格檢查)
。不過(guò)小白檢查過(guò)自己的代碼不是這個(gè)原因霎褐,所以排除址愿;
-
第二種:接口返回值的字段取值不對(duì)!
我們?cè)賮?lái)看官方文檔:
ToUserName冻璃、FromUserName參數(shù)值取錯(cuò)這個(gè)也很容易導(dǎo)致出現(xiàn)故障响谓。
因?yàn)楸粍?dòng)回復(fù)用戶信息返回值里面的ToUserName、FromUserName參數(shù)值
應(yīng)該取值對(duì)應(yīng)
接收普通消息接口里面的FromUserName省艳、ToUserName娘纷。不過(guò)小白發(fā)現(xiàn)自己并沒(méi)有搞錯(cuò),所以也排除了跋炕;
-
第三種:之前公眾號(hào)給第三方授權(quán)過(guò)
解決辦法就是直接去“授權(quán)管理”那里點(diǎn)擊取消就可以了赖晶!然而小白打開自己的授權(quán)管理發(fā)現(xiàn)如下:
空空如也唱起來(lái)??所以繼續(xù)排除這種;
-
第四種:開發(fā)者回復(fù)異常的數(shù)據(jù)
我們來(lái)看微信官方文檔對(duì)“服務(wù)出現(xiàn)故障辐烂,請(qǐng)稍后再試”的解釋:
根據(jù)這個(gè)小白覺(jué)得應(yīng)該是回復(fù)了異常數(shù)據(jù)遏插,于是開啟了微信“接口告警”這個(gè)功能:
不得不說(shuō)微信公眾平臺(tái)的這個(gè)功能還是要有用的!接著去修改了下面的報(bào)警次數(shù):
(其實(shí)不改也行棉圈,就是默認(rèn)的5分鐘超過(guò)30次就會(huì)在群里報(bào)警提示)
就這樣終于讓小白收到了錯(cuò)誤提示如下圖:
所以是在解析微信公眾號(hào)回復(fù)并做出響應(yīng)的時(shí)候涩堤,自動(dòng)回復(fù)的格式出錯(cuò)了!這下終于找到錯(cuò)誤所在分瘾,就可以對(duì)癥下藥了??胎围。經(jīng)過(guò)一番吭哧吭哧的鼓搗,終于成功了德召,再次看到下面的圖很是欣慰:
最后終于爬出這個(gè)大坑白魂,走上光明大道??。經(jīng)過(guò)這次項(xiàng)目上岗,找到了自己的各種不足福荸,通過(guò)搜索n個(gè)頁(yè)面來(lái)查錯(cuò)??:
學(xué)會(huì)了查看服務(wù)器的日志跟運(yùn)維接口告警這些也是挺好的。希望上面的總結(jié)能幫你避開坑坑坑肴掷,一路666敬锐!