太強了!基于公眾號用 Python 開發(fā)一個抽獎程序
大家好
上周在公眾號做了個抽象的活動,程序是自己臨時寫的,就是下面這種效果?;貜椭付P鍵字系統(tǒng)會自動給你分配一個抽獎號碼
回復另一個關鍵字可以查看當前有沒有中獎,功能可以說非常簡單。

有些小伙伴拿到代碼之后,問有沒有詳細的教程,光是看代碼不知道怎么運行。
于是就有了這篇文章。
本文假設你已經有一個自己的公眾號,還沒有公眾號的可以在平臺注冊一個,地址是:http://mp.weixin.qq.com 。
首先登錄公眾號平臺,填寫服務器配置

URL 不能亂填,這個是你的服務器地址, 比如:http://123.33.44.55/wx ,IP 地址是服務器的公網IP,所以前提你還得有一臺服務器。
你可以選擇國內的虛擬主機服務商,比如阿里云、騰訊云或者Ucloud(三位廠商記得給我廣告費?。┒伎梢?/p>
填寫完直接提交會驗證失敗的,因為服務器還沒接入進來。
所以要先驗證服務器地址的有效性。
驗證服務器地址的有效性就是下面的處理邏輯,我這里是用的flask框架。

微信服務器請求URL的時候,會傳4個參數給你,分別是

所謂驗證服務器地址的有效性,就是要確認請求是否來自微信服務器,因為發(fā)起請求的也有可能是某個黑客。我們可以通過檢驗signature對請求進行校驗,若確認此次GET請求來自微信服務器,原樣返回echostr參數內容,則接入生效,成為開發(fā)者成功,否則接入失敗。
加密/校驗流程如下:
1)將token、timestamp、nonce三個參數進行字典序排序
2)將三個參數字符串拼接成一個字符串進行sha1加密
3)開發(fā)者獲得加密后的字符串可與signature對比,標識該請求來源于微信。
將代碼部署到自己服務器之后,這時候再去提交,會提示你提交成功。驗證成功后,就可以開始實現(xiàn)業(yè)務邏輯了。
實現(xiàn)抽獎邏輯
當用戶在公眾號發(fā)送消息時,微信會以POST請求的方式將消息轉發(fā)給業(yè)務服務器(就是我們自己處理業(yè)務邏輯的程序),然后我們根據用戶發(fā)送的內容進行相應的邏輯處理。

微信會通過POST請求,以xml的格式發(fā)送給我們業(yè)務服務器,里面的內容包括發(fā)送的消息內容、時間、還有open_id, open_id 唯一對應用戶。雖然你不知道用戶的昵稱,但是只要知道open_id 就可以唯一確定是哪個用戶。
定義數據模型
實現(xiàn)抽獎系統(tǒng),我們首先定義了數據模型

只要三個字段就夠了,number 是抽獎號碼,open_id 表示誰獲得了該抽獎號碼, 初始為空, valid 表示該號碼是否為中獎號碼。初始化系統(tǒng)時,我們會隨機給一些數據設置valid有True, 比如你想抽3個獎品,就隨機弄3條數據為True。
模型建立完成后,接下來就可以處理具體的業(yè)務邏輯了。當用戶發(fā)送抽獎關鍵字時,我們要做3件事。
1、判斷當前用戶是否還有抽獎資格
2、生成抽獎號碼
3、查詢剩余抽獎次數
回復另一個關鍵字查詢是否中獎時,我們只需要判斷它的抽獎號碼里面有沒有匹配的valid為True的數據即可。我都這些邏輯都封裝在models里面,所以看起來也沒幾行代碼。

以上就是整個抽獎小程序的全部思路。剩下的事情就是把代碼部署到服務器,就能實現(xiàn)文章開頭的效果了。
是不是超級簡單。源代碼獲取請回復“公眾號”
如果你正想實現(xiàn)一個類似的小程序,例如做個天氣預報查詢等有趣味的程序,如果編程過程中總是遇到各種問題卡殼,可以加我微信 "yueryounali",好的問題勝過無數個好答案。我們的python交流群也有很多高手。
學編程關鍵在于動手,提高在于實踐。
推薦:
