- 微信公眾平臺企業(yè)號開發(fā)揭秘
- 蔣書平
- 2680字
- 2019-12-06 14:42:47
3.1 主動調用
何謂主動調用?主動調用是微信企業(yè)號基本的連接模式,為什么說它是基本的呢?因為當我們的應用需要調用企業(yè)號API的時候,建立HTTPS協(xié)議連接,數(shù)據(jù)包不需要解密,每次調用企業(yè)號API的時候,只需要調用AccessToken參數(shù)。稍后會細講什么是AccessToken、AccessToken怎么獲取及其使用期限。
3.1.1 主動調用概述
主動調用即企業(yè)號應用直接訪問企業(yè)號API,根據(jù)用戶的需要獲取后臺數(shù)據(jù)資源或發(fā)送消息給成員。主動調用不需要執(zhí)行解密操作,直接連接微信企業(yè)號提供的API請求地址即可,剩下的就是獲取數(shù)據(jù)并進行相應的操作處理。
3.1.2 獲取AccessToken
AccessToken是請求微信API的訪問票據(jù),可以把AccessToken比喻成一張身份證,把需要做的一件事(如獲取某個成員的身份信息)比喻成一個人,把微信API比喻成一個旅館。當這個人去住旅館時,就必須要出示身份證,以便旅館工作人員登記這個人的入住信息,這樣可以避免不法分子入住,有身份證的人才可以入住旅館,才可以享受旅館的服務,如此理解印象更深刻。
AccessToken需要用CorpID和Secret來獲取,AccessToken使用期限為7200秒,在這個AccessToken還處于有效期內時,重復獲取AccessToken將返回同一個AccessToken,直到這個AccessToken過期,再去獲取AccessToken時,AccessToken才會是一個新的值。
怎么獲取CorpID和Secret呢?接下來為大家詳細介紹。
申請和注冊企業(yè)號之后,找到需要的第一個參數(shù)CorpID,登錄企業(yè)號,進入管理后臺,單擊“我的企業(yè)”,如圖3-1所示。
進入“我的企業(yè)”頁面,找到“企業(yè)信息”欄并將內容拖動到底部,如圖3-2所示,界面框內的屬性就是CorpID,這個屬性很重要。

圖3-1 單擊“我的企業(yè)”

圖3-2 獲取CorpID
獲取CorpID后,接下來獲取Secret。
登錄企業(yè)號,進入管理后臺,單擊“企業(yè)應用”選項,進入“企業(yè)應用”頁面,單擊其中的一個應用,如果沒有應用,可以新建一個,如圖3-3所示。

圖3-3 創(chuàng)建新的應用
單擊“創(chuàng)建應用”選項后,彈出如圖3-4所示的界面。
填寫新應用信息,單擊“創(chuàng)建應用”按鈕,如圖3-5所示。

圖3-4 填寫新應用信息

圖3-5 創(chuàng)建新的應用
稍后單擊“企業(yè)應用”選項,進入“企業(yè)應用”頁面,生成新應用“Android趣味堂”,如圖3-6所示。
單擊該應用,可以查看該應用的詳情,方框內的就是Secret參數(shù),如圖3-7所示。

圖3-6 新應用創(chuàng)建完成

圖3-7 獲取Secret參數(shù)
在應用詳情頁還可以查看該應用的可見范圍,就是對某些成員可見對某些成員不可見,由開發(fā)者設置?!癆ndroid趣味堂”應用的可見范圍如圖3-8所示。

圖3-8 應用可見范圍
在應用詳情頁還可以設置該應用的一些功能,如發(fā)送消息、網(wǎng)頁授權及JS-SDK、設置應用主頁、接收消息、自動回復、自定義菜單、企業(yè)微信授權登錄,如圖3-9所示。

圖3-9 應用功能設置
在應用詳情頁底部有“刪除應用”選項。單擊后可刪除該應用,如圖3-10所示。
在應用詳情頁右側有一個停用、啟用的Switch按鈕,如圖3-11所示,單擊該按鈕可以選擇是否啟用應用。若停用,則會彈出一個確認停用的窗口,提示“應用停用后,該應用在客戶端中的消息將被刪除”,單擊窗口中的“停用”按鈕可停用該應用。

圖3-10 刪除應用

圖3-11 啟用應用
至此,應用詳情頁的介紹就結束了,也獲取了CorpID、Secret參數(shù),接下來利用這兩個參數(shù)來獲取AccessToken。
在編程之前需要仔細閱讀API,避免出現(xiàn)地址錯誤或參數(shù)錯誤,一定要看明白之后再開始寫代碼,否則很可能出現(xiàn)一些不必要的問題。
請求說明如下。
HTTPS請求方式:Get
請求地址:https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=id&corpsecret=secrect
參數(shù)說明見表3-1。
表3-1 參數(shù)說明

正確返回結果:

參數(shù)說明見表3-2。
表3-2 參數(shù)說明

錯誤返回結果:

編寫一個獲取AccessToken的程序來調用接口,為了方便讀者看懂,筆者會把函數(shù)代碼以及調用方法逐個貼出來,一定要仔細跟著輸入代碼并理解其意思,還可以根據(jù)注釋來加深某個語句、某個函數(shù)的意義。注意,一定要先看完本章再開始寫代碼,因為部分章節(jié)是有聯(lián)系的。
getAccessToken()代碼如下。



代碼有很詳細的注釋,大家要仔細閱讀函數(shù)開始部分的帶@parma、@author字樣的文字,這是注釋文檔,可寫可不寫,但是筆者建議大家都寫,并養(yǎng)成習慣。因為很多大項目被分成很多模塊,每個模塊在管理的時候必須要有非常詳細的注釋,方便交接、管理、后期維護。
HttpRequest()代碼如下。



AccessToken類代碼如下。

下面示范getAccessToken函數(shù)的調用。

范例獲取到的結果值為7200,單位為秒。
獲取到的AccessToken:ud5kEI0N52juvNsxJJZL1HCV3gxanUHeD72Z5aCBnYcfJUrR-wpmFMHQgX2jLl9OzGqq2Bx1APlo5UsOol5G6g。
有效時間:7200秒。
讀者要注重理解,前期可以跟著敲代碼,后面要慢慢建立起自己的代碼體系、代碼風格。
3.1.3 主動調用的頻率限制
當獲取到AccessToken時,應用就可以成功地調用企業(yè)號后臺所提供的各種接口,以管理、訪問企業(yè)號后臺的資源或給企業(yè)號成員發(fā)消息。
為了防止因企業(yè)應用的程序錯誤而引發(fā)企業(yè)號服務器負載異常,默認情況下,每個企業(yè)號調用接口都有一定的頻率限制,當超過此限制時,調用對應接口會收到相應錯誤碼。
以下是當前默認的頻率限制,企業(yè)號后臺可能會根據(jù)運營情況調整此閾值。
- 基礎頻率
每個企業(yè)調用單個cgi/api不可超過1 000次/分,30 000次/小時。
每個IP調用單個cgi/api不可超過2 000次/分,60 000次/小時。
第三方應用提供商由于需要同時服務于多個企業(yè),IP頻率限制為:每個IP調用單個cgi/api不可超過20 000次/分,600 000次/小時。
- 發(fā)消息頻率
每個企業(yè)不可超過賬號上限數(shù)×30人次/天。
- 創(chuàng)建賬號頻率
每個企業(yè)創(chuàng)建賬號數(shù)不可超過賬號上限數(shù)×3/月。
- 創(chuàng)建應用頻率
每個企業(yè)最大應用數(shù)限制為30個,創(chuàng)建應用次數(shù)不可超過30×3/月。
關于訪問次數(shù)和AccessToken的時效性,可以合理安排訪問的次數(shù),AccessToken失效之后,程序沒有再次去獲取AccessToken會導致接口訪問權限失效的錯誤。下面針對此問題寫一個程序來解決。
3.1.4 防止AccessToken過期的處理
首先介紹具體思想,因為AccessToken的時效性是7200s,所以我們只需要給定兩個寫死的獲取憑證的參數(shù),判斷這兩個參數(shù)是否取到,沒有值就需要自行配置。再啟動一個線程,傳參給新起的線程,寫一個死循環(huán),執(zhí)行一次獲取,對獲取到的對象實例進行一次判斷,如果值為null,就調用線程休眠,具體休眠時間看情況并結合API計算。
因為是死循環(huán),所以當?shù)诙稳〉街档臅r候,又進行了判斷,當然這次不可能為null,除非參數(shù)有問題,這時就不需要繼續(xù)執(zhí)行下去,需要休眠線程,因為值已經(jīng)取到了。根據(jù)API 7200s的時效性,每天2000次調用頻率,其實2000次足夠我們調用了,7200/3600=2h, 24/2h=12,每天12次就可以了,更何況是2000次呢?讓線程休眠7000+s,之后的時間(7200-7000)剩下200+s,在200+s里可以重新喚醒線程開始對值判斷,又可以合理管理調用時間間隔,具體以自己的需求情況為準。這樣就可以避免AccessToken的失效了。
接下來介紹參數(shù)配置的問題,在web.xml里需要配置如下幾個參數(shù),作為線程啟動及獲取憑證的映射。

servlet-name、servlet-class分別是類名和包名點類名,在init-param屬性下配置好appid、appsecret。load-on-startup為0,就是當這個服務啟動時,InitAccessTokenServlet自動啟動并同時啟動線程服務。
(1)通過配置<init-param>向Servlet中傳入?yún)?shù)。
(2)通過配置<load-on-startup>使得Web服務器啟動時就加載該Servlet。
(3)沒有配置<servlet-mapping>,因為InitServlet并不對外提供訪問。
接下來開始編寫訪問次數(shù)的程序,然后編寫一個自定義的Servlet,繼承自HttpServlet,代碼如下。

編寫自定義線程,代碼如下。


線程打印測試如圖3-12所示。

圖3-12 線程測試
服務開啟之后,服務器日志打印,如圖3-13所示。

圖3-13 服務器日志
- 社交電商:裂變式增長
- 淘寶·易趣·拍拍網(wǎng)上開店從入門到精通 (第2版)
- 抖音賬號運營實踐
- 創(chuàng)業(yè)生態(tài)系統(tǒng)的網(wǎng)絡特性與新企業(yè)績效
- 經(jīng)濟型酒店營銷推廣·促銷方案·電子商務
- 電子商務多平臺運營與實踐
- 爆紅:創(chuàng)業(yè)公司一鳴驚人的6大營銷絕招
- 互聯(lián)網(wǎng)+跨界顛覆
- 物聯(lián)網(wǎng)商業(yè)時代
- 微信電商,這樣做就對了!
- SEO實戰(zhàn)密碼:60天網(wǎng)站流量提高20倍(第4版)
- O2O實踐:互聯(lián)網(wǎng)+戰(zhàn)略落地的O2O方法
- 區(qū)塊鏈+未來應用
- 一本書讀懂微信公眾營銷(第2版)
- 區(qū)塊鏈:定義未來金融與經(jīng)濟新格局