1. 程式人生 > >微信第三方開放平臺研發實戰

微信第三方開放平臺研發實戰

課程介紹

微信開放平臺之第三方平臺是為了讓公眾號或小程式運營者,在面向垂直行業需求時,可以一鍵授權給第三方平臺,讓其幫助完成業務開發,且是基於微信 CRM 的必要組成模組之一。

對於剛開始接觸第三方平臺開發的人員來說,微信開發平臺的文件相對比較複雜,現階段網上部落格文章較為雜亂零散,無法提供有效的指導。

通過本達人課的學習,讀者將熟悉第三方平臺中的授權流程、Token管理、相關功能的開發等以及通過全網釋出的測試,最終上線。讓您真正能夠從0到1完成第三方平臺的搭建。

為此本達人課主要分為三大部分,逐步介紹環境搭建到正式全網釋出:

第一部分:準備階段,讓你瞭解第三方平臺。主要包括平臺的申請以及開發環境的搭建,為後面實戰階段做準備。

第二部分:實戰階段,針對業務場景進行具體的開發。主要包括平臺授權流程以及利用基於第三方平臺進行開發,包括場景二維碼、分組以及自定義回覆等功能。

第三部分:上線階段。詳細介紹如何滿足微信端的測試進行上線釋出。

作者介紹

李楊,高階研發工程師。OCP 與 PMP 資格認證,曾任某培訓機構 Hadoop 講師;擅長 Java 開發、資料庫設計以及開發等。現就職於一家初創公司,有同名公眾號“LeeYond”。

課程內容

導讀:淺談微信開放平臺之第三方平臺

導讀

如果你針對微信公眾號進行過開發,那麼你肯定曾在微信公眾號後臺,配置過自己的域名伺服器以及金鑰等資訊。之後,基於這個配置,對該公眾號進行定製化開發,例如自動登入、個人中心、自定義二維碼等,乃至當你針對第二個微信公眾號進行開發時,可能仍需要進行重複的步驟,並配置不同的域名以及金鑰等。於此同時,每次開發,你還要儲存公眾號的賬號密碼,並需要獲取公眾號所有者的授權,過程不安全且繁瑣。

隨著要維護的公眾號數量逐步增加,需要投入的資源以及成本也隨之增加(不同公眾號需要不同的域名以及伺服器資源)。此時你可能需要一個平臺,能夠同時管理這些公眾號。無論具體的業務是什麼場景,基於微信的開發必然是基於微信底層提供的各種介面,根據不同業務形態展開。為此我們可以通過抽象出功能層以及業務層來解構每個微信公眾號的開發,其中功能層即微信提供的基礎功能(回覆訊息/微信選單管理/分組管理等),業務層即不同的業務場景。那麼功能層就變成了第三方平臺,一次開發供 N 個公眾號使用,提供標準化的介面服務來滿足業務的基礎需求,業務層基於第三方平臺進行其他更深的業務拓展,例如搭建 CRM 系統。

那麼如何使用第三方平臺呢?對於第三方平臺來說,可以通過掃描二維碼授權給平臺,幫助 N 多個公眾號代實現業務,不再需要理解繁瑣引數設定,並且密碼不提供給開發者,保證安全。根據微信官方介紹,第三方平臺的開放,讓公眾號或小程式運營者在面向垂直行業需求時,可以通過一鍵登入授權給第三方開發者,來完成相關能力。

第三方平臺其本質是對於微信公眾號開發底層功能層的抽象,不同公眾號通過其授權將自身業務嵌入平臺當中。

第三方平臺

業務特點

從業務特徵上來說,第三方平臺特點必須如圖所示:

第三方平臺業務特徵

從具體的業務場景上說,第三方平臺包括以下場景:

  1. 提供行業解決方案,如針對電商行業的解決方案,或針對旅遊行業的解決方案等;
  2. 對公眾平臺功能的優化,如專門優化圖文訊息視覺樣式和排版的工具,或專門定製的 CRM 使用者管理功能,或功能強大的客服系統。

資料安全

在技術上,第三方平臺是通過獲得公眾號或小程式的介面授權,然後代公眾平臺帳號呼叫各業務介面來實現業務的,例如其可以代公眾號呼叫介面、代公眾號處理訊息和事件、代公眾號發起網頁授權等(其實部分功能與公眾號開發重合)。所以第三方平臺本質是針對單個公眾號開發的升級。因此,第三方平臺在呼叫各介面時,同樣必須遵循公眾平臺運營規範。

理論上當使用者將公眾號授權給第三方平臺之後,第三方平臺從某種程度上已經接手公眾號,可以利用公眾號的 Token 進行各種操作,例如修改選單、自定義回覆、建立分組等等。

由於公眾號授權給第三方平臺,使用者與公眾號進行互動的資訊將會傳送到第三方平臺的伺服器上。微信為了保證資料的安全性,進行了較為複雜的授權流程,如下圖所示:

image_1c9rsoma7m711opu1ts41tt9ap39.png-26.5kB

在後面的課程中,我會針對該流程進行詳細講解、分析,以及如何通過程式碼實現完整的授權。

同時要求使用者與公眾號互動的資訊加密傳輸(單獨的公眾號開發的時候是可以選擇明文傳輸),並且有一套相對較為負責的加解密流程進行資料傳輸。官方描述為:首先請注意,開發者在接收訊息和事件時,都需要進行訊息加解密(某些事件可能需要回復,回覆時也需要先進行加密)。但是,通過 API 主動呼叫介面(包括呼叫客服訊息介面發訊息)時,不需要進行加密。

許可權集合

微信為第三方公眾平臺提供的服務包括公眾號以及小程式,其中前者提供了20多種、後者近10種不同的許可權型別。由於不同行業具有不同的特徵,所以這些許可權集合是可以根據自己需求進行個性化選擇的,例如客戶系統,CRM 系統所需要的許可權集合是不一樣的。

並且當第三方平臺進行全網釋出時,根據選擇不同的許可權集合會進行相關的測試,只有當平臺通過測試之後,其他公眾號才能授權給該平臺,利用該平臺代實現業務。

所以綜合來看第三方平臺開發是一個相對複雜的工程,對於一個剛接觸第三方平臺開發的同學來說,想要快速上手是一個相對來說比較困難的事情。同時由於現階段網路上關於第三方平臺介紹的文章殘次不齊,進行資訊篩選將花費較多的時間成本。

達人課目標

第三方平臺開發流程及問題

第三方平臺從申請到全網釋出主要經歷如下幾個步驟:

  1. 授權流程
  2. 公眾號相關介面開發
  3. 小程式相關介面開發(不在此次課程範圍)
  4. 測試以及釋出。

對於步驟1來說,微信每10分鐘會向伺服器推送一個 Verfiy Ticket,平臺需要利用該 Ticket 獲取 Component Access Token,利用該 Token 結合使用者授權碼才可能完成整個授權過程。這裡涉及到 Token 儲存問題、Token 失效重新整理問題、使用者授權資訊儲存問題、使用者授權的公眾號 Token 重新整理問題等。功能性的實現相對比較簡單,但是作為系統來說,必須總體的設計才能穩定提供的服務。

對於步驟2來說,微信針對公眾號提供大約20+許可權集合,每一種許可權集合可能對應不同的應用場景,並且每種許可權集合需要的引數以及介面都不相同。如何合理的設計我們的類,使我們相對優雅的進行開發,這都是我們需要考慮的問題

對於步驟4來說,微信為了保障平臺的穩定性,釋出時需要進行測試,然而這是基於步驟1、2較好的完成的基礎上,如何快速的通過測試,以及不同的測試報錯如何快速定位,都是擺在我們面前的問題。

達人課特點

筆者當初開發時,進行相關資訊檢索發現文章質量較差,無法提供合理的指導,所以比較瞭解剛接觸平臺開發時可能遇到的具體問題。

為此本達人課將從第三方平臺申請開始到釋出結束,系統的介紹每個步驟可能遇到的問題,以及提供相對合理的解決方案。同時針對關鍵的一些功能進行單獨的講解,例如:個性二維碼、自定義分組以及自定義回覆等。

同時本達人課並不是單純的講介面的功能實現,而是結合具體的業務場景規劃我們的資料庫、相應類的設計以及具體的功能設計。並且會在課程中放上具體的步驟或者程式碼,有興趣的同學可以按照具體的步驟進行開發,逐步搭建屬於自己的平臺。

結束語

本次開發主要使用的語言為 Java,採用 SSM(Spring+SpringMVC+Mybaits)框架,同時資料庫表結構設計部分可能採用維度建模的思想。

如果有什麼問題或者在課程中想要著重瞭解的地方,可以在我的讀者圈或者關注我同名公眾號“LeeYond”(微訊號:Mist_L)與我聯絡,此外有意向換工作的 Java 小夥伴,也可以與我聯絡。

備註: 為了更好的學習本達人課,讀者可能需要對 Java 有一定的瞭解,並對作業系統有一定的瞭解,熟悉 JDK 安裝/Tomcat 安裝以及相關環境變數配置等。為了更好的學習本課程,可能需要對 Maven 有一定的瞭解。

其次由於後面可能會涉及到資料庫表結構的設計,所以需要對資料庫也要有一定的瞭解。由於第三方平臺開發相對比較複雜,讀者最好首先熟悉一下官方文件以及相關流程。

第01課:準備階段——開發環境準備以及第三方平臺申請

本文的重點主要介紹第三方平臺開發環境的資訊,現列出相關的配置資訊。

環境準備

硬體環境

  • 開發環境:普通 PC 機器(我的配置是 I5/8G/256G SSD);
  • 生產環境:根據具體的業務場景配置硬體需求。

軟體環境

(1)開發環境:

  • 作業系統:Windows、Linux、Mac OS 都可以進行開發;
  • 軟體要求:JDK1.7+,Tomcat8.X,MariaDB10.X(其他資料庫也可以,但本文講解後開發都使用 MariaDB),IntelliJ IDEA,開發框架選用的 SSM(Spring+SpringMVC+Mybatis);
  • 其他要求:由於申請第三方平臺需要域名,可能需要內網穿透工具,例如花生殼或者其他類似工具,Maven環境,需要將 JAVA_PATH 等新增到環境變數中

(2)生產環境:

  • 作業系統:Linux(建議非必須)
  • 軟體要求::JDK1.7+ ,Tomcat8.X, MariaDB10.X
  • 其他要求:伺服器需要繫結域名(當然繼續使用內網穿透工具也OK,但是1.專業性問題2.頻寬問題),需要配置環境變數

(3)部分軟體下載地址:

申請平臺

申請平臺之前必須有一個正在執行的 Web 環境,否則無法通過後面的申請,為此我們需要先建立一個專案之後才能進行申請。

建立專案

(1)主要利用 Maven 建立開發專案,以 IntelliJ IDEA 為例,大致過程是選擇 “File” -> “New” -> “Project” -> “Maven” -> “Create From archetype”。

選擇 webapp 之後點選 “Next”:

image_1c9rogkoa94074fqbs12cg1nqim.png-400.2kB

根據具體情況填寫相關資訊之後點選“Next”:

image_1c9rolua3mt3ck71e9n1svlil813.png-26.6kB

為了加快專案建立,我一般會配置 archetypeCatalog 如下圖所示:

image_1c9rp1mlq1m035rahnq1oes13jr20.png-113.3kB

儲存之後點選“Next”配置專案儲存路徑:

image_1c9rp43tm1qpsc1b16n5u1me82d.png-29.2kB

點選“Finish”完成建立。

(2)配置 Spring+SpringMVC+Mybatis 環境。網上有太多的文章,大家可以直接搜尋,進行配置。

(3)設定域名(如果有域名的話,可以跳過)。利用內網穿透工具繫結二級域名,並且啟動服務。

(4)啟動 Tomcat。此部分大家可以上網查相關資料,在此略過。

申請平臺

2.開發者資質認證。

登入之後到 “賬號中心” -> “開發者資質認證”,其中該資質認證必須是企業,不能是個人,並且還要300元,稽核還是很快的,似乎一天不到。

3.申請平臺。

申請主要分為四步,包括輸入基本資訊、選擇許可權、填寫開發資料、等待稽核,進入“管理中心”-> “第三方平臺” -> “建立第三方平臺”進入申請頁面。

(1)輸入基本資訊

根據實際情況填寫輸入基本資訊並上傳 ICON,點選“下一步”:

image_1c9rq2fge1esdq7p1ao41to6fge2q.png-235kB

(2)選擇許可權

本課程主要針對公眾號,在公眾號下面選擇許可權集合如下圖所示:

image_1c9rq6unr1tk4qttf8811oj14r1m.png-172.5kB

其中“開放平臺賬戶管理”是實現基於微信 CRM 中的必須選擇的選項(當然選擇的每一個都很重要)。

(3)填寫開發資料(重要)

1)授權流程相關。

image_1c9rqbto21oi8d1v1qqi1ng87kr13.png-63.8kB

  • 授權發起域名:就是你本機的域名,前面不需要加 http,例如 “http://www.baidu.com”,請填寫 “www.baidu.com”。
  • 授權測試公眾號列表:由於還沒全網釋出,所以需要新增你需要用來測試開發公眾號的原始 id。
  • 授權事件接收 URL:以上面建立 project 為例,“www.baidu.com/gitchat/component/event” 其中粗體根據實際情況填寫,申請過程中不會驗證該 URL 有效性。這個 URL 主要接收微信的一些引數,相當重要。

2)授權後實現業務。

image_1c9rqqbls7ck1757i2i1s621mde13.png-114.9kB

  • 訊息校驗 Token:金鑰,根據自己喜好按照要求填寫;
  • 訊息加解密 Key:長度43的字串,隨意發揮;
  • 訊息與事件接收 URL:此 URL 是每個公眾號授權之後發訊息到你伺服器上的 URL,以截圖為例,A、B 公眾號授權之後,A 的訊息會發送到 “www.baidu.com/gitchat/wechat/A/callback”,B 的訊息會發送到 “www.baidu.com/gitchat/wechat/B/callback”,其中 “/gitchat/wechat/\$APPID\$/callback” 根據實際情況填寫,但是主要域名必須授權流程中授權發起頁域名一致。
  • 公眾號開發域名:與授權流程中授權發起頁域名一致。並且需要下載 txt 檔案,並儲存到 Tomcat 下面的 webapps/ROOT。不需要重啟服務。

3)其他。

根據實際情況填寫你的本機 IP,不然後期無法重新整理相關 Token。

image_1c9rr9bp01c7m187dqni14lgh8b1g.png-19.3kB

點選提交,等待稽核。

(4)等待稽核

基本上,這個稽核還是很快的,1-2天基本上都能稽核完成。

當稽核通過之後,點選詳情檢視平臺的 AppID 以及 AppSecret(妥善儲存),後面需要根據這兩個 ID 進行平臺 Token 的重新整理等。

附錄: 由於後面加解密可能會出現異常:“java.security.InvalidKeyException:illegal Key Size”,請在官方網站下載 JCE 無限制許可權策略檔案(JDK7 的下載地址,JDK8 也可以用該檔案)。

下載後解壓,可以看到 localpolicy.jar 和 USexport_policy.jar 以及 readme.txt,如果安裝了 JRE,將兩個 Jar 檔案放到 %JRE_HOME%\lib\security 目錄下覆蓋原來的檔案;如果安裝了JDK,將兩個 Jar 檔案放到 %JDK_HOME%\jre\lib\security 目錄下覆蓋原來檔案。