1. 程式人生 > >python 微信公眾平臺開發

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進行合法性的校驗(參考微信官方的

詳細文件的“網址接入”小節)。如下是flask中處理介面驗證的程式碼:

複製程式碼
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. 服務器詢問用戶是否同意授權