天天看點

Python開發微信公衆号背景(系列一)

通過這一系列的文章,我們來介紹一下如何用Python開發微信公衆号的背景。

主要工具:SAE+微信公衆号+Git+Python本地環境(最好已經安裝好了Git并配置好了Python IDE,比如Pycharm)

首先要簡單介紹一下一些準備工作。

第一步是要注冊一個個人微信公衆号(個人賬号不支援認證),按照https://mp.weixin.qq.com/ 給出的過程依次填寫需要的資訊就可以完成申請,如果已有賬号的話可以直接登入。

登入以後可以看到左邊欄中的自動回複功能:

Python開發微信公衆号背景(系列一)

在一般的使用中,我們可以通過設定關鍵字實作一些基本的自動回複功能,但是這樣的關鍵字回複遠遠不能滿足我們的實際需求,比如我們要實作一個查快遞的功能,必然是要通過調用快遞接口對不同使用者的不同輸入給出不同的輸出結果,在這樣的情況下關鍵字回複就顯得很雞肋了。于是我們選擇了開發者模式。

Python開發微信公衆号背景(系列一)

在基本配置中,我們隻需要修改URL、Token和EncodingAESKey三項配置即可,由于我們現在還沒有配好自己的伺服器,微信公衆号這邊的設定到這裡暫停,等我們有了伺服器擷取了位址以後回來填寫就可以了。

選擇雲應用,進入控制台後建立新應用。

Python開發微信公衆号背景(系列一)

輸入二級域名和應用名稱(必填項),在下面的運作環境中選擇 Python2.7 - 空應用。

Python開發微信公衆号背景(系列一)

成功建立應用後,會獲得相應的一些配置資料和密鑰,當然這些内容這次用不到,主要用到的就是登陸賬号和安全密碼。

Python開發微信公衆号背景(系列一)

SAE平台的代碼版本控制分為Git和SVN,兩者可以自由選擇,這次我們選擇使用Git進行代碼的上傳操作。

Python開發微信公衆号背景(系列一)

1.3 Git

對于Windows系統,電腦上如果安裝了 Github Desktop 的話,應該就自帶了 Git Bash 和 Git Shell 這樣的工具,如果之前沒有安裝過 Git 相關的軟體,可以自行搜尋 Git 以後安裝 Git for Windows。

下面就讓我們進入到真正的開發階段吧!

猶記得我大一的時候公衆号剛剛興起,當時我還興緻沖沖地注冊了賬号,設定了一大堆的關鍵字自動回複,堅持了數天的圖文消息推送,但是當我真正開始研究開發者模式,真正想去調用一些接口時卻發現,好像自己該學的也都學了,該用的也都用過,就是串不到一起去,做不出想要的東西來(當時用的好像還是 PHP ),後面一直擱置了公衆号這樣的東西,一下子就拖到了現在。這兩天試了一下 Python 伺服器的配置,發現完全就是一層窗戶紙,其實一捅就破,完全沒有當初的糾結和複雜了。

由于我們之前在 SAE 平台建立的是空應用,是以我們需要做一些基礎的配置工作。這次我們選擇使用 web.py (Python 2.7)來進行伺服器搭建,如果本地沒有 web.py 庫的話可以通過 pip 指令進行安裝(pip install web.py)。

之後我們需要建立一個項目,并編輯如下的基本代碼。

這兩部分是 web.py 的基礎配置檔案,之後我們需要開始編寫實作微信公衆平台功能的代碼。

建立weixinInterface.py

編寫好這三部分的代碼後,我們就實作了最簡單的微信平台認證配置,這三部分代碼中需要修改的隻有 token 字段,需要和你在微信平台中輸入的 token 保持一緻。(之後有機會再詳細寫具體的認證過程吧,這次隻羅列一下實作過程,需要注意的是認證 token 我們隻需要用 GET 方法而之後的發消息需要用 POST 方法。)

這時我們需要把代碼上傳到 SAE 平台,然後在微信平台進行認證請求。

在檔案根目錄右鍵打開 Git Bash,依次輸入如下指令,過程中可能會需要輸入 SAE 的使用者名和安全密碼,按照提示操作即可。

之後回到公衆平台的開發者頁面,填寫 URL 為http://xxxx.sinaapp.com/weixin 填寫 Token 與代碼中的 token 一緻,EncodingAESKey 随機生成,然後點選送出認證,如果上面步驟沒有操作錯誤,這一步就可以認證成功了。

在微信公衆号的認證完成以後,就可以針對使用者的消息搞一些事情了。(消息類型開發文檔詳見https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140453&token=&lang=zh_CN)

使用者與公衆号之間的消息互動類型分為文本、圖檔、語音、視訊、小視訊、地理位置、連結等,本文中主要會用到文本和圖檔兩種消息類型。

使用者消息以 XML形式傳至我們搭建好的伺服器中,我們需要解析 XML 資訊,擷取出需要的資訊,進行處理後對使用者回複結果。

我們先來簡單看一下文本消息和圖檔消息的 XML 結構。

文本:

可以看到,兩者共有的字段為ToUserName、FromUserName、CreateTime、MsgType和MsgId,對于文本消息,我們可以通過Content字段直接提取出消息文本内容,但是對于圖檔消息,我們需要通過PicUrl或MediaId擷取圖檔資訊後進行處理。

擷取到使用者發送的消息後,我們需要考慮如何給使用者發消息,其實并不難,我們隻需要給定一個消息模闆,并在相應的功能最後設定傳回值即可

在目錄下建立 <code>templates/reply_text.xml</code>

然後編輯weixinInterface.py

以上操作的功能為:判斷使用者消息類型,如果消息類型為文本,則擷取其内容content,并原樣傳回 content 作為消息。

完成以上修改後,重複 git 操作将修改 push 到遠端倉庫即可。

測試效果圖:

Python開發微信公衆号背景(系列一)

原文釋出時間為:2016-12-05 

本文作者:段曉晨