python 微信公眾平臺開發
利用微信公眾平臺提供的訊息介面,搭建自己的訊息處理伺服器,訊息的處理和回覆將更加靈活,以期給訂閱使用者提供更加定製化和個性化的資訊。本文將結合SAE,基於Python Flask框架,搭建一個公眾賬號“豆米查書”(微訊號doumibook)的訊息伺服器。該公眾號的基本功能是:輸入書籍標題、作者或者isbn條碼號等關鍵字,查詢書籍的基本資訊。書籍資料來源豆瓣網,使用了douban api v2。
一、申請微信公眾平臺賬號
到這裡註冊微信公眾平臺賬號,登陸,設定必要的名稱、地區和使用者資訊等內容。在“高階功能”中開啟“開發模式”。
仔細閱讀微信公眾平臺的官方文件。
二、在SAE上建立Python應用
建立Python應用,二級域名和應用名稱為doumibook,那麼基本地址為http://doumibook.sinaapp.com。
三、申請訊息介面並驗證
1,訊息介面配置
到“高階功能”-->“開發模式”-->“成為開發者”中填寫介面配置資訊,有URL和Token,URL用於介面驗證和訊息推送,本例中填寫步驟二中的接入地址,Token用於介面驗證,任意填寫即可,例如填寫“doumitest”。
2,訊息介面驗證(網址接入)
資訊填寫完成後,點選提交,會提示認證“伺服器未正確響應的Token驗證”,這是正常的,因為我們雖然建立了SAE應用,但沒有處理介面驗證訊息。點選提交時,微信伺服器會發送一條Http GET請求,攜帶signature、timestamp、nouce和echostr四個引數,對URL進行合法性的校驗(參考微信官方的
import hashlib @app.route('/weixin', methods=['GET']) def weixin_verify(): signature = request.args.get('signature') timestamp = request.args.get('timestamp') nonce = request.args.get('nonce') echostr = request.args.get('echostr') token= 'doumitest' #和申請訊息介面時的Token一致 tmplist = [token, timestamp, nonce] tmplist.sort() tmpstr = ''.join(tmplist) hashstr = hashlib.sha1(tmpstr).hexdigest() if hashstr == signature: return echostr #success return 'access verification fail' #fail
四、訊息推送和訊息回覆
1,訊息推送
URL介面驗證以後,公眾平臺賬號收到的訊息將由微信伺服器使用HTTP POST推送至該URL。訊息內容為XML格式,訊息型別有文字、圖片和地理位置等,例如文字訊息由以下幾個部分組成。
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1348831860</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[this is a test]]></Content> </xml>
其中,ToUserName和FromUserName分別為公眾帳號和使用者帳號的表識串。MsgType標識訊息型別,“text”表明訊息是文字訊息,文字內容放置在Content欄位。其他型別訊息的xml結構請參照官方文件。
使用下面的程式碼片段,解析xml資料,以dict形式儲存:
import xml.etree.ElementTree as ET def parse_msg(rawmsgstr): root = ET.fromstring(rawmsgstr) msg = {} for child in root: msg[child.tag] = child.text return msg
2,使用者訂閱訊息
當有新使用者關注公眾號時,微信伺服器會發送一條通知訊息到訊息伺服器,訊息伺服器可以返回初次訂閱的歡迎和幫助資訊。目前,微信啟用了新的使用者訂閱通知方法,即使用事件推送。
事件推送的MsgType為“event”,是微信4.5版開始支援的一種訊息格式,可以傳送使用者訂閱( subscribe)、退訂(unsubscribe)以及自定義選單點選(CLICK)等事件訊息。訊息格式為:
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[FromUser]]></FromUserName> <CreateTime>123456789</CreateTime> <MsgType><![CDATA[event]]></MsgType> <Event><![CDATA[EVENT]]></Event> <EventKey><![CDATA[EVENTKEY]]></EventKey> </xml>
微信官方已經發布通告,在2013年3月26日起由原來的傳送一條內容為“Hello2BizUser”的訂閱訊息,切換至事件推送方法。
3,書籍資訊獲取
簡單起見,目前僅支援微信使用者傳送書籍isbn條碼號給doumibook,來查詢作者和書名。使用douban api v2版介面,獲取書籍資訊,douban返回的json資料。程式碼片段如下:
import urllib2 import json bookurlbase = 'http://api.douban.com/v2/book/isbn/' DOUBAN_APIKEY = '' #豆瓣上申請的APIKEY def query_book_info(isbn): url = '%s%s?apikey=%s' % (bookurlbase, isbn, DOUBAN_APIKEY) resp = urllib2.urlopen(url) book = json.loads(resp.read()) info = ''.join(book['author']) + ': ' + book['title'] return info
4,訊息回覆
查詢到書籍資訊之後,訊息伺服器響應微信伺服器的訊息推送,回覆內容結構同樣是XML,假設我們回覆文字訊息,基本結構如下:
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>12345678</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[content]]></Content> <FuncFlag>0</FuncFlag> </xml>
其中的ToUserName和FromUserName與訊息推送中的相關。
構造回覆訊息程式碼片段如下:
def response_msg(recvmsg, content): textTpl = """<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[%s]]></MsgType> <Content><![CDATA[%s]]></Content> <FuncFlag>0</FuncFlag> </xml>""" echostr = textTpl % (recvmsg['FromUserName'], recvmsg['ToUserName'], recvmsg['CreateTime'], recvmsg['MsgType'], content) return echostr
注意到,回覆文字訊息,內容比較單一,這裡可以使用MsgType為“news”的圖文訊息格式進行回覆,這裡不再贅述,請參考官方文件以及本文末尾給出的原始碼連結。
4,綜合
訊息推送HTTP POST請求的處理程式碼如下:
@app.route('/weixin', methods=['POST']) def weixin_msg(): data = request.data msg = parse_msg(data) content = 'not found' if msg.has_key('Content'): content = query_book_info(msg['Content']) return response_msg(msg, content)
五、總結
本文以doumibook為例,使用Python Flask框架,介紹了在SAE上搭建微信公眾平臺賬號訊息伺服器的基本步驟。
doumibook目前僅實現了很簡單的功能,還沒有實用的價值,例如輸入“浪潮之巔”,則返回:
相關推薦
python 微信公眾平臺開發
利用微信公眾平臺提供的訊息介面,搭建自己的訊息處理伺服器,訊息的處理和回覆將更加靈活,以期給訂閱使用者提供更加定製化和個性化的資訊。本文將結合SAE,基於Python Flask框架,搭建一個公眾賬號“豆米查書”(微訊號doumibook)的訊息伺服器。該公眾號的基本功能是:輸入書籍標題、作者或者isbn
微信公眾平臺開發Python 版本
上一篇說到了Java的開發,這一篇來介紹一下Python版本的。用java是感覺自己稍微熟悉一些,後來涉及到關於爬蟲的東西,不太方便呼叫。哦對了,這裡也再介紹一下java和python之間的通訊吧。之前試過有一個叫做Jython的東西,結果它只支援到2.x,而且有很多另外匯
微信公眾平臺開發—access_token的獲取儲存與更新(Python開發)
access_token是公眾號的全域性唯一票據,公眾號呼叫各介面時都需使用access_token。 正常情況下access_token有效期為7200秒,重複獲取將導致上次獲取的access_token失效。由於獲取access_token的api呼叫次數非常有限,建
微信公眾平臺開發之萬能表單
平臺 體驗 src .net 等等 art net 獎勵 功能 微信公眾平臺開發之萬能表單是為了方便我們得到用戶的信息。我們能夠在後臺設置不論什麽須要用戶填寫的信息,比方:電話,姓名,性別,工作等等信息,當然我們也能夠設置一定的獎勵,僅僅要完好這些信息就能夠得到一定
【微信公眾平臺開發】利用百度接口,制作一鍵導航功能
顯示 12px font -c cati blog ltr vertica 拾取 微信開發中,非常多商家用戶都要求點詳細地址。能在百度或者soso地圖上面顯示自己的地址。 而這種功能。利用百度api接口地圖標點功能就能夠非常easy實現。 1.功能說明例如以下:
微信公眾平臺開發之留言板
tracking time 方法 ref font img 建議 south data- 微信公眾平臺開發之留言板是方便用戶互相之間交流的最好方法。關註微信公號的用戶之間是不能進行對話的。為了方便用戶之間的交流留言板起到了非常大的作用。當用戶進入留言板後能夠在上面留
微信公眾平臺開發,那些走過的坑
內置瀏覽器 點滴 播放 中一 ffmpeg 時間 想要 文件 設計 最近接手了一個微信公眾平臺的項目,歷時兩個月,基本完工,終於有時間可以總結一下這過程當中遇到的點點滴滴。 1、關於微信的內置瀏覽器 開始以為,微信內置瀏覽器是一個瀏覽器,對於安卓機和蘋果機都是一樣的,後來發
微信公眾平臺開發——為何不能在網頁調用微信jsapi?
什麽 ket 平臺 使用 scrip ken 進行 兩個 pro 說到這問題,相信大部分程序員老手都會輕蔑一笑,當然是跨域導致的啊!但是為了一些小白,我覺得還是很有必要再說一次的。 首先介紹什麽是跨域,由於瀏覽器的同源策略,出於防範跨站腳本的攻擊,禁止客戶端腳本( 主要是J
微信公眾平臺開發教程(三) 基礎框架搭建
開發 images wxs user 設計實現 bytes trre 來源 app 上一章,我們已經初步講解了微信公眾賬號開發的基本原理,今天我們來探索設計實現。 首先我們設計了模塊層次圖,當然圖中只是給出一種實現方式,不局限於此。具體見下圖。 主要功能介紹如下: 1)請求
微信公眾平臺開發教程(一) 微信公眾賬號註冊流程
身份證 logs 政府 提交 註意 bsp 訪問服務器 定義 htm 具體的操作步驟 1、註冊公眾賬號 註冊地址:http://mp.weixin.qq.com/ 1)首先需要郵箱註冊: 2)郵箱激活。郵箱將會收到激活郵件,點擊激活鏈接即可。 3)需要登記個人信息。這裏需
微信公眾平臺開發教程(八)Session處理
class 如果 obj returns name ref car opera 信用 在微信窗口,輸入的信息有限,我們需要將一些信息分多次請求。 比如:在進行用戶綁定時,我們需要輸入用戶的相關信息,比如:用戶名、密碼,或者姓名、電話號碼,服務端驗證通過,即可將系統用戶與微信
微信公眾平臺開發教程(十) 訂閱號與服務號的區別
接口文檔 lpad 手機 全部 oauth2.0 spa 上傳 ima lsp 為了消除大家對訂閱號與服務號的疑問,特總結如下: 功能點 介紹 訂閱號 服務號 註冊 註冊賬號 個人信息 個人信息和企業相關信息 展示 在
微信公眾平臺開發教程(二) 基本原理及消息接口
username 普通用戶 縮放 地理位置 cfb 位置 註意 獲得 基本 一、基本原理 在開始做之前,大家可能對這個很感興趣,但是又比較茫然。是不是很復雜?很難學啊? 其實恰恰相反,很簡單。為了打消大家的顧慮,先簡單介紹了微信公眾平臺的基本原理。 微信服務器就相當於一個轉
微信公眾平臺開發教程(五)自定義菜單
打開鏈接 delete toolbar 推送 優化 pcl reader 接口查詢 robot 應大家強烈要求,將自定義菜單功能課程提前。 一、概述: 如果只有輸入框,可能太簡單,感覺像命令行。自定義菜單,給我們提供了很大的靈活性,更符合用戶的操作習慣。在一個小小的微信對話
Java微信公眾平臺開發之OAuth2.0網頁授權
col nts har 順序 pan getcount iba unionid syn 根據官方文檔點擊查看在微信公眾號請求用戶網頁授權之前,開發者需要先到公眾平臺官網中的“開發 - 接口權限 - 網頁服務 - 網頁帳號 - 網頁授權獲取用戶基本信息”的配置選項中,修改授權
java微信公眾平臺開發
http style 消息發送 req gets 信號 多說 接收消息 servle 微信公眾平臺的開發,總體說來也是簡單的,就是先大概看下微信公眾平臺接口文檔。 請先大概瀏覽一下API手冊,我們會發現,推送給微信服務器的數據有兩種:xml的形式,和json的形式. 那麽
微信公眾平臺開發—利用OAuth2.0獲取微信用戶基本信息
arch getjson code back acc unicom toc gets down 1、首先在某微信平臺下配置OAuth2.0授權回調頁面: 2、通過appid構造url獲取微信回傳code值(appid可在微信平臺下找到) 1)、微信不彈出授權頁面ur
微信公眾平臺開發問題小結
安全 空白 color 用戶登錄 公眾平臺開發 相同 空白頁 微信 request Q:用戶網頁授權成功,添加後臺會員表信息後,手動刪除會員信息,網頁版微信用戶登錄失敗(手機版OK),顯示空白頁。打開分享鏈接提示“已停止訪問該網頁”? A:網頁版微信用戶退出微信,重新登錄再
微信公眾平臺開發(二)網頁授權
是否 color 平臺開發 基本 業務 自動跳轉 str gpo 點擊 微信公眾平臺OAuth2.0授權詳細步驟如下: 1. 用戶關註微信公眾賬號。2. 微信公眾賬號提供用戶請求授權頁面URL。3. 用戶點擊授權頁面URL,將向服務器發起請求4. 服務器詢問用戶是否同意授權