到了這一步,在微信上關(guān)注那個(gè)測試賬號(hào),發(fā)送的信息已經(jīng)會(huì)到我們的 SAE 的 app 服務(wù)上了。
微信過來的信息都是 XML 格式的,具體地可以參考文檔:
http://mp.weixin.qq.com/wiki/index.php?title=%E6%8E%A5%E6%94%B6%E6%99%AE%E9%80%9A%E6%B6%88%E6%81%AF
雖然文檔上有具體的數(shù)據(jù)例子,但是,一般還是自己親眼看到過來的數(shù)據(jù),心理上才會(huì)踏實(shí)一些吧,所以,我們?cè)诖a上添加一些邏輯,使用 storage 服務(wù)把請(qǐng)求過來的數(shù)據(jù)保存下來。SAE 環(huán)境上標(biāo)準(zhǔn)的輸出不太好用,所以開發(fā)時(shí)把 storage 當(dāng)成記日志的地方就好了,還有現(xiàn)成的 Web 工具可以直接查看呢。
先去把應(yīng)用的 storage 服務(wù)開啟,并創(chuàng)建一個(gè) Bucket,Bucket 我這里取的名字是 log
,為了方便查看,把權(quán)限改成 public 。
然后修改 index.wsgi
代碼:
# -*- coding: utf-8 -*- import re import time from sae.storage import Bucket def application(environ, start_response): if environ.get('REQUEST_METHOD', 'GET') == 'GET': q = environ.get('QUERY_STRING') m = re.findall('echostr=(.*)', q)[0] s = m.split('&', 1)[0] start_response('200 ok', [('content-type', 'text/plain')]) return [s] length = environ.get('CONTENT_LENGTH', 0) length = int(length) body = environ['wsgi.input'].read(length) bucket = Bucket('log') bucket.put_object('%s.txt' % int(time.time()), body) start_response('200 ok', [('content-type', 'text/plain')]) return ['']
用戶的數(shù)據(jù)都是通過 POST 方法過來的,所以,對(duì)于 GET 方法,我們還是原來的邏輯,直接返回 echostr
的數(shù)據(jù)即可。
wsgi 接口上,獲取 POST 數(shù)據(jù)的簡單方法,就是先拿到 CONTENT_LENGTH
頭,它標(biāo)識(shí)了 HTTP 請(qǐng)求的 body 部分的長度。然后從 environ['wsgi.input']
這個(gè) file like 對(duì)象中讀取指定長度的數(shù)據(jù)即可。
上面代碼中,body
就是一個(gè) XML 形式的數(shù)據(jù)了,我們目前也不做任何處理,直接以時(shí)間戳為名,存到 storage 中去。
提交代碼,然后在微信上向這個(gè)測試賬號(hào)發(fā)一些不同類型的信息吧,文字,圖像,語音。
文字內(nèi)容:
<xml><ToUserName><![CDATA[gh_b47caeadeeb7]]></ToUserName> <FromUserName><![CDATA[ov_QzuF0iskLIXqu0r71qOLmZV6B]]></FromUserName> <CreateTime>1407299911</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[文本內(nèi)容]]></Content> <MsgId>6044307093609310161</MsgId> </xml>
圖像內(nèi)容:
<xml><ToUserName><![CDATA[gh_b47caeadeeb7]]></ToUserName> <FromUserName><![CDATA[ov_QzuF0iskLIXqu0r71qOLmZV6B]]></FromUserName> <CreateTime>1407300008</CreateTime> <MsgType><![CDATA[image]]></MsgType> <PicUrl><![CDATA[http://mmbiz.qpic.cn/mmbiz/EiaMylXxR8B.../0]]></PicUrl> <MsgId>6044307510221137887</MsgId> <MediaId><![CDATA[HFQ8FFcieYaRJaNJZecI602qXXU16pqDz3SGY44PGDWbe_mqQBPiQbD_62_N6UDu]]></MediaId> </xml>
直接訪問 PicUrl
都可以看到圖片的。
語音內(nèi)容:
<xml><ToUserName><![CDATA[gh_b47caeadeeb7]]></ToUserName> <FromUserName><![CDATA[ov_QzuF0iskLIXqu0r71qOLmZV6B]]></FromUserName> <CreateTime>1407300099</CreateTime> <MsgType><![CDATA[voice]]></MsgType> <MediaId><![CDATA[qYVLd_UHsrXw5xPiu5ZMNFtIhxpjVojHICbuCvXLPWnarPF8hvY0Ft-GaF2pfUVo]]></MediaId> <Format><![CDATA[amr]]></Format> <MsgId>6044307901063161835</MsgId> <Recognition><![CDATA[]]></Recognition> </xml>
現(xiàn)在也不用去管這堆 XML 的解析問題,了解一下這些數(shù)據(jù)就可以了。
更多建議: