手把手教你入門微信公眾號開發


磨刀不誤砍柴工

微信公眾號大家肯定都用過。目前微信公眾號主要分為訂閱號和服務號,每種賬號又分為未認證和已認證,它們的差別主要在於具有不同的接口權限,下圖(引用自微信開發實戰系列)是一些例子:

 
不同類型公眾號的權限

總體來說,服務號權限 > 訂閱號權限,認證賬號權限 > 未認證賬號權限。申請訂閱號比較簡單,服務號相對復雜點,另外要認證的話還要額外提交一些材料。我們可以根據不同的業務需求去申請不同類型的賬號,基本上常用的權限列表已經可以滿足大部分的場景。

開發微信公眾號本質上和通常的網站開發並無區別。當我們進入一個公眾號頁面之后,我們可以向公眾號發送文字、語音、圖片等消息,也可以通過點擊頁面下方的菜單觸發相應的功能。那么開發者與微信用戶究竟是怎么進行交互的呢?實際上我們在公眾號里的所有操作,都會發送到微信的服務器上,微信服務器將這些動作的具體含義按照一定的格式進行封裝后,發送到微信公眾號所對應的服務器上(這個服務器的地址可以由開發者在微信公眾號的后台進行配置),開發者通過編寫代碼來處理不同的用戶行為,並將處理后的結果按照一定的格式返回給微信服務器,再由微信服務器發送到微信公眾號里面,從而完成了一次交互過程。在這里借用方倍老師博客中的一張圖片來展示下這個過程,可以幫助大家理解地更清楚:

 
微信用戶與開發者的交互流程

到這里我們可以知道,所謂的微信公眾號開發,其實就是編寫業務代碼來處理用戶的動作請求。這里面會涉及到和微信服務器之間的通信,也就涉及到一些安全認證方面的知識,后文會通過一個實際的例子進行說明。現在,就讓我們來看看具體的流程吧。

巧婦難為無米之炊

開發微信公眾號需要准備以下兩樣食材:

1、微信公眾號

微信公眾號可以在微信·公眾平台的官網上申請。前文說過,微信公眾號分為幾種類型,不同的類型具有不同的權限,具體的權限列表可以查看微信公眾平台技術文檔。值得注意的是,現在已經不再支持個人類型的公眾賬號申請微信認證。申請的過程無非是填寫下郵箱和信息,建議使用QQ郵箱,畢竟是自家的東西。

2、服務器

由於我們的服務器需要與微信服務器進行交互,因此必須能夠讓微信服務器可以訪問到。很多公司都提供了雲服務器租賃,價格不一,可以自行申請,細節在此不表。如果不想花錢申請,也可以使用一些外網穿透工具,將本地的IP暴露到公網中供外部訪問,具體的工具請自行百度,不過大部分軟件穩定性無法保證,而且分配的域名經常改變。個人建議還是申請一台服務器比較方便,等以后公眾號運營良好開始漲(ying)粉(li)了,這些都不是事~

擼起袖子加油干

以下是詳細步驟:

1、開啟公眾號開發者模式

為了讓微信服務器知道開發者服務器的存在,必須在公眾號后台進行相應的配置。

(1)登錄公眾平台官網,找到左邊功能欄的最下方,有一個基本配置的選項

(2)點擊基本配置按鈕,在右邊的頁面中填寫服務器的相關信息。其中URL填寫http://外網IP:端口號/wx,這里外網IP是服務器的外網IP地址,端口號固定填寫80。Token可以自由填寫,用於兩個服務器之間的驗證。具體見下圖:

 
配置微信公眾號

(3)點擊提交按鈕,提示配置失敗。這是自然的,因為我們還需要在開發者服務器上進行配置,才能完成驗證的過程。

(4)前面在配置微信公眾號時為什么提示失敗呢?在此我們有必要探究下這個認證過程。當我們點擊了提交后,微信服務器會向我們所填寫的那個URL發起一個GET請求,並攜帶以下幾個參數:timestamp, nonce, echostr, signature。其中timestamp是一個時間戳,nonce是一個隨機數,echostr也是隨機數,這幾個都很普通,重點在於signature,它的生成方式是將nonce、timestamp和token(也就是我們在網頁中配置的TOKNE)三個字符串按照字典序排序后,對排序后得到的字符串數組使用哈希加密算法得到。我們的服務器在收到這個GET請求后,提取對應的參數,並按照前面說的方式生成hashcode,如果這個值與參數中的signature相同,那么我們就將echostr返回給微信服務器,否則返回空值。微信服務器收到這個echostr之后,驗證這個值與它發送的echostr值是否相同,如果相同,說明這個值的確是由我們的服務器返回的,從而完成驗證,今后所有的信息就都可以發送到這個服務器地址上。這里面涉及到了一些安全認證的相關知識,有興趣的朋友可以去查閱更詳細的資料。總的來說,就是讓通信的雙方都能夠確認對方的真實身份。以下是認證部分的主要代碼,使用Python2.7web.py框架編寫:

 
驗證開發者服務器

2、編寫服務器業務邏輯

前面我們完成了微信服務器與開發者服務器的相互認證過程,接下來我們需要編寫業務邏輯代碼來處理微信服務器發送過來的信息。以文本消息為例,當用戶在公眾號頁面發送了消息后,微信服務器會將這條消息封裝成如下的XML格式,並將其作為請求的內容向開發者服務器發起一個POST請求:

 
微信服務器封裝的請求內容

各個字段的具體含義就如字段名所示,比較直觀。我們首先需要解析這個XML對象,並提取出各個字段用於后續的處理:

 
解析XML對象

解析之后,我們可以在主函數中根據消息的不同類型,來調用不同的處理函數得到相應的處理結果,然后我們要將處理結果封裝成同樣的XML格式返回給微信服務器,封裝XML對象的代碼如下所示(以文本消息為例):

 
封裝XML對象

至此,我們就完成了一個簡單的回復流程(雖然目前這種只能回復文本消息==)。

更上一層樓

以上就是一個基本的微信公眾號開發流程。當然,想要讓我們的公眾號變得多姿多彩,需要掌握的內容還有很多。比如

(1)access_token:前面我們所做的實際是被動回復消息,微信服務器發起POST請求,我們將處理后的內容借由微信服務器返回給用戶。如果我們需要主動地和用戶進行交互,比如主動地向用戶發一條消息,我們就需要調用微信公眾平台提供的相應接口,並且需要主動告訴微信服務器我們的身份,這是通過access_token實現的。

access_token是微信公眾號的全局唯一接口調用憑據,公眾號在調用各個接口時都需要使用access_token

如上所述,在我們調用各個接口前,需要先使用公眾號的appidappSecret信息(這兩個值可以從微信公眾號的網頁上查看)向微信服務器請求獲取access_token,然后帶着這個值去調用微信公眾平台提供的接口,實現相應的功能。

(2)微信網頁開發:網頁開發就是指編寫一系列的HTML5頁面,並在微信公眾號中引導用戶打開我們開發的頁面,從而實現相關的業務邏輯,這一功能使得公眾號可以像一個內嵌在微信當中的應用一樣,能夠實現非常復雜的交互邏輯,而且相比於通常的應用來說更加小巧。

從這里出發

以上就是本文的主體內容。樓主經驗尚淺,斗膽提筆撰文,有不當之處歡迎各位指出。本文主要是一個入門的簡介,后續的開發還有很多內容要學,以下列出一些個人認為比較不錯的文檔和資料,樓主也從中學到了很多,在此感謝各位作者。

(1)微信公眾平台技術文檔

(2)方培工作室-微信公眾平台開發教程

(3)Webot

(4)微信開發者聯盟

(5)微信開發實戰系列

本文中的代碼已上傳到github,里面包含了微信公眾號一些常用功能的實現,僅供參考:微信公眾號開發示例程序

最后,各位如果有任何的問題或者想法,歡迎在評論區交流。



作者:郗南楓
鏈接:https://www.jianshu.com/p/131d0c4a07cf
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM