1. 程式人生 > >手把手教你入門微信公眾號開發

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

這是一篇關於微信公眾號開發的入門指南,較為詳細地介紹了開發微信公眾號的基本原理,並且有相應的程式碼實現。如果您正打算要做公眾號開發,卻又苦於找不到一份簡潔明瞭的入門級教學文件,那麼這篇部落格應該能解決您的問題。

緣起

近日騰訊釋出2017年中報,報告中指出,騰訊二季度實現營業收入566.06億元,經營盈利、期內盈利分別達到225.6億元和182.54億元。按照當前利潤與員工數估算,騰訊員工的平均年薪達到80萬…

儘管很多人吐槽王者榮耀裡的小學生太坑爹,但不得不承認,近年來騰訊的變現能力確實強大地嚇人。這之中微信和QQ作為使用者的入口,起到了很大的作用。特別是微信,已然是一款裝機必備的全民軟體,如何藉助這個龐大的平臺搞點事情,分享下微信帶來的使用者紅利,也就成為一件很值得研究的事。微信公眾號是個人或者企業的一個宣傳平臺,通過開發微信公眾號,可以給關注公眾號的使用者提供更多定製化的服務,進一步可以將服務轉化為效益。本文旨在給正準備做微信公眾號開發的朋友分享一點經驗,從而儘快熟悉微信公眾號開發的整體流程。在此基礎上可以繼續去學習一些高階的開發技巧(比如微信支付、賬單系統之類的

),讓自己的公眾號更加地精(zhi)美(qian)。

磨刀不誤砍柴工

微信公眾號大家肯定都用過。目前微信公眾號主要分為訂閱號和服務號,每種賬號又分為未認證和已認證,它們的差別主要在於具有不同的介面許可權,下圖()是一些例子:

不同型別公眾號的許可權

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

開發微信公眾號本質上和通常的網站開發並無區別。當我們進入一個公眾號頁面之後,我們可以向公眾號傳送文字、語音、圖片等訊息,也可以通過點選頁面下方的選單觸發相應的功能。那麼開發者與微信使用者究竟是怎麼進行互動的呢?

實際上我們在公眾號裡的所有操作,都會發送到微信的伺服器上,微信伺服器將這些動作的具體含義按照一定的格式進行封裝後,傳送到微信公眾號所對應的伺服器上(這個伺服器的地址可以由開發者在微信公眾號的後臺進行配置),開發者通過編寫程式碼來處理不同的使用者行為,並將處理後的結果按照一定的格式返回給微信伺服器,再由微信伺服器傳送到微信公眾號裡面,從而完成了一次互動過程。在這裡借用方倍老師部落格中的一張圖片來展示下這個過程,可以幫助大家理解地更清楚:

微信使用者與開發者的互動流程

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

巧婦難為無米之炊

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

微信公眾號

微信公眾號可以在微信公眾平臺的官網上申請。前文說過,微信公眾號分為幾種型別,不同的型別具有不同的許可權,具體的許可權列表可以檢視微信公眾平臺技術文件。值得注意的是,現在已經不再支援個人型別的公眾賬號申請微信認證。申請的過程無非是填寫下郵箱和資訊,建議使用QQ郵箱,畢竟是自家的東西。

伺服器

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

擼起袖子加油幹

以下是詳細步驟:

開啟公眾號開發者模式

為了讓微信伺服器知道開發者伺服器的存在,必須在公眾號後臺進行相應的配置。
(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框架編寫:

驗證開發者伺服器

編寫伺服器業務邏輯

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

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

各個欄位的具體含義就如欄位名所示,比較直觀。我們首先需要解析這個XML物件,並提取出各個欄位用於後續的處理:

解析XML物件

解析之後,我們可以在主函式中根據訊息的不同型別,來呼叫不同的處理函式得到相應的處理結果,然後我們要將處理結果封裝成同樣的XML格式返回給微信伺服器,封裝XML物件的程式碼如下所示(以文字訊息為例):

封裝XML物件

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

更上一層樓

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

(1) access_token:前面我們所做的實際是被動回覆訊息,微信伺服器發起POST請求,我們將處理後的內容藉由微信伺服器返回給使用者。如果我們需要主動地和使用者進行互動,比如主動地向用戶發一條訊息,我們就需要呼叫微信公眾平臺提供的相應介面,並且需要主動告訴微信伺服器我們的身份,這是通過access_token實現的。

access_token是微信公眾號的全域性唯一介面呼叫憑據,公眾號在呼叫各個介面時都需要使用access_token

如上所述,在我們呼叫各個介面前,需要先使用公眾號的appidappsecret資訊(這兩個值可以從微信公眾號的網頁上檢視)向微信伺服器請求獲取access_token,然後帶著這個值去呼叫微信公眾平臺提供的介面,實現相應的功能。

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

從這裡出發

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

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