记录:使用DJANGO从0开始搭建微信公众平台(0)
開發之前需要準備的內容
- 1.一個服務器
- 2.申請微信公眾平臺。
- 為服務器配置MYSQL+DJANGO2.X
1.一個服務器
進行了各方面的對比后,我選擇了穩定和相對熟悉的阿里云服務器Elastic Compute Service(ECS),ECS的優點可以百度了解,這里就不贅述。
鏡像選用了 ubuntu_18_04_64系統。
值得一提的是,阿里云服務器提供了服務器私鑰串。 在使用SSH時,需要將私鑰串配置好才可以進行SSH遠程連接以修改服務器設置。
私鑰配置過程參考如下鏈接:
https://blog.csdn.net/winhye/article/details/75221311
私鑰配置完成后 SSH不再需要提供用戶名密碼就可以直接連接到遠程云服務器。
2.申請微信公眾平臺。
由于我是以個人的方式來申請微信公眾平臺,所以我只能申請微信訂閱號,但是訂閱號配合上服務器,也能實現很多的功能。如果想做WX支付功能,訂閱號是無法提供接口的,那需要服務號才可以。
申請完畢后,需要為訂閱號進行開發者配置。
在開發者選項的基本配置中,分別確認和設置 APPID 、APPSECRET、IP白名單。
當啟動開發者模式時,服務器和WX服務器的每一次數據傳遞,都需要APPID和APPSECRET的參與。所以APPID和APPSECRET應設置為常量儲存在服務器配置文件中,方便調用和查詢。
IP白名單定義了WX公眾號只會接收來自白名單內來源的的數據傳遞。
在開發者選項的服務器配置中,分別配置URL、TOKEN、EncodingAESKey、以及設置消息的加密解密模式。
所有發送給WX公眾號的用戶消息,都會被轉發到URL服務器,服務器只支持80或是443端口。
TOKEN為自定義內容,也會做為參數參與到服務器之間的通信中。用來識別數據的合法性。
EncodingAESKey可以隨機生成。
消息的加密解密模式暫時設置成明文模式。這樣做的目的是為了在開發過程用根據收到和發出的內容判斷BUG出現的位置和排錯。
為服務器配置MYSQL+DJANGO2.X
首先python2.7 會在2020年1月1日后停止更新, 這里使用了PYTHON3.6.8
DJANGO使用了2.2.3版本
在使用python3時,舊的MySQLdb庫對Python3不支持,采用了PyMySQL庫來代替,會導致出現各種BUG,特別是執行以下命令的時候:
python manage.py makemigrations
python manage.py migrate
BUG1:
無論是否執行pip3 install mysqlclient安裝最新版,都會拋出:當前的mysqlclient版本過低,需要使用mysqlclient 1.3.3或以上的版本。
這時要找到python3目錄中的mysql包以及mysql包中的base.py文件。將拋出這一錯誤的代碼注釋掉。
安裝路徑下的django\db\backends\mysql\base.py文件
可以使用pip3 show django 來顯示django的安裝路徑
BUG2:
File “/usr/local/lib/python3.6/dist-packages/django/db/backends/mysql/operations.py”, line 146, in last_executed_query
query = query.decode(errors=‘replace’)
AttributeError: ‘str’ object has no attribute ‘decode’
解決方法是找到這個文件的第146行
將原本的
修改為:
(記得別忘了引入force_str方法)
from django.utils.encoding import force_str
然后在mysql中創建庫,并聲明UTF8編碼,這樣做是為了方便存儲中文數據。
CREATE DATABASE databasename CHARACTER SET utf8 COLLATE utf8_general_ci;
在服務器和微信平臺都準備就緒后。
我們需要先用服務器接入微信公眾平臺。
在上一步的提交微信公眾平臺中的服務器配置時,微信服務器會發送GET請求到服務器配置好的URL中去。
我們需要提取到請求中的echostr參數,并原樣返回給發送的來源服務器。
當來源服務器成功接收到我們返回的echostr參數時,公眾平臺的服務器配置才能提交成功。
在服務器配置提交成功后,所有用戶發給公眾號的消息,理論上會直接以POST+XML的方式被轉發到我們的服務器上,但是到了這一步,我試驗了很久,測試向公眾號發送用戶數據,期間服務器都沒有收到任何的數據或是請求。
在查閱了相關資料后,得到如下結論。
我當前所配置配置的接口是不支持302重定向的!如果指向URL是http://xxx.xx/test這樣的格式的話,認證是可以通過的,但是消息接口數據不走。
參考了如下鏈接,繞了好幾個彎,直到發現這個貼子。問題才以最簡單的方式解決。
https://blog.csdn.net/laven90/article/details/43965825?locationNum=8
解決方法就是在settings.py中添加新的控制開關。
APPEND_SLASH=True
到現在為止,公眾號發送的信息,終于可以轉發到我的服務器了。
這時出現了新的錯誤。CSRF安全機制禁止了外部的POST請求。
這個錯誤只需要注釋掉settings.py中的這一行即可。
現在重新測試,使用WX向公眾號發送了一條test消息.
收到一組xml消息。
其中ToUserName代表公眾號ID
FromUserName代表用戶的openid (同一用戶在不同公眾號下的openid是不相同的)
MsgType代表消息的類型。微信的消息分為文本、語音、圖片、圖文等等不同類型的消息。
Content 代表內容。
當前使用的是明文傳遞方式。
在項目開發完成后,可以將消息的傳遞方式改為密文。再配合加密解密模塊,可以提高安全性。
總結
以上是生活随笔為你收集整理的记录:使用DJANGO从0开始搭建微信公众平台(0)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【墨尘】变态心理学(北京大学)
- 下一篇: 服务器被攻击了怎么办?海外服务器有什么有