springboot进行微信公众号相关开发:(二)获取微信公众号access_token用以微信公众号各功能接口的调用
前文,我們已經成功激活了配置信息接口,可以使用微信的各種功能接口進行業務的開發了。但是我們查看各個功能接口的文檔,可以看到每個接口都不是能隨便調用的,都需要訪問令牌access_token,所以我們還要獲得這個訪問令牌才能正式開始我們的功能接口調用開發。本文主要講解獲取功能接口訪問令牌access_token的操作。
本文還是以測試號為例,界面如圖所示:
可以看到頁面中有一個模塊:JS接口安全域名,該項配置類似于一個微信功能接口(JS網頁服務功能接口,如分享朋友圈等功能接口)調用請求來源的白名單,開發調試的時候只有來自于這個域名的請求微信才會對功能接口的調用予以放行,我們進行功能開發有時需要對微信的各種功能接口調用,所以在此我們首先需要配置上這個信息,這個信息配置即生效。前文我們使用花生殼獲得了一個外網地址,直接配上點擊確定即可。
在該頁面下方,有一個體驗接口權限表,可以看到微信提供的各種功能接口類目,首先一個就是獲取access_token:
點開可以看到該功能接口的說明文檔:
接口調用請求說明(請求地址)
https請求方式: GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
參數說明
| grant_type | 是 | 獲取access_token填寫client_credential |
| appid | 是 | 第三方用戶唯一憑證 |
| secret | 是 | 第三方用戶唯一憑證密鑰,即appsecret |
可以看到,grant_type項固定為client_credential,請求方式為GET,我們只需要把我們自己的appid和appsecret對應替換請求地址中的APPID和APPSECRET即可。
編寫調用方法如下:
/*** 獲取公眾號access_token** @param appId 身份標識* @param appSecret 身份令牌* @return 處理結果*/@GetMapping("/token")public Map getAccessToken(String appId, String appSecret) {String uri = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";uri = uri.replace("APPID", appId);uri = uri.replace("APPSECRET", appSecret);Map resMap;try {String resStr = HttpUtil.get(uri);resMap = JSONObject.parseObject(resStr, Map.class);} catch (Exception e) {log.error("獲取access_token異常" + e.getMessage(), e);throw new RuntimeException("獲取access_token異常" + e.getMessage());}return resMap;}PS: 博主使用Hutool工具進行遠程接口GET方式的調用。
返回說明
正常情況下,微信會返回下述 JSON 數據包給公眾號:
{"access_token":"ACCESS_TOKEN","expires_in":7200}錯誤時微信會返回錯誤碼等信息,JSON數據包示例如下(該示例為 AppID 無效錯誤):
{"errcode":40013,"errmsg":"invalid appid"}返回碼說明
| -1 | 系統繁忙,此時請開發者稍候再試 |
| 0 | 請求成功 |
| 40001 | AppSecret錯誤或者 AppSecret 不屬于這個公眾號,請開發者確認 AppSecret 的正確性 |
| 40002 | 請確保grant_type字段值為client_credential |
| 40164 | 調用接口的 IP 地址不在白名單中,請在接口 IP 白名單中進行設置。 |
| 89503 | 此 IP 調用需要管理員確認,請聯系管理員 |
| 89501 | 此 IP 正在等待管理員確認,請聯系管理員 |
| 89506 | 24小時內該 IP 被管理員拒絕調用兩次,24小時內不可再使用該 IP 調用 |
| 89507 | 1小時內該 IP 被管理員拒絕調用一次,1小時內不可再使用該 IP 調用 |
另外,需要注意到,獲取access_token接口的一些重要說明:
access_token是公眾號的全局唯一接口調用憑據,公眾號調用各接口時都需使用access_token。開發者需要進行妥善保存。access_token的存儲至少要保留512個字符空間。access_token的有效期目前為2個小時,需定時刷新,重復獲取將導致上次獲取的access_token失效。
公眾平臺的 API 調用所需的access_token的使用及生成方式說明:
1、建議公眾號開發者使用中控服務器統一獲取和刷新access_token,其他業務邏輯服務器所使用的access_token均來自于該中控服務器,不應該各自去刷新,否則容易造成沖突,導致access_token覆蓋而影響業務;
2、目前access_token的有效期通過返回的expires_in來傳達,目前是7200秒之內的值。中控服務器需要根據這個有效時間提前去刷新新access_token。在刷新過程中,中控服務器可對外繼續輸出的老access_token,此時公眾平臺后臺會保證在5分鐘內,新老access_token都可用,這保證了第三方業務的平滑過渡;
3、access_token的有效時間可能會在未來有調整,所以中控服務器不僅需要內部定時主動刷新,還需要提供被動刷新access_token的接口,這樣便于業務服務器在 API 調用獲知access_token已超時的情況下,可以觸發access_token的刷新流程。
4、對于可能存在風險的調用,在開發者進行獲取 access_token調用時進入風險調用確認流程,需要用戶管理員確認后才可以成功獲取。具體流程為:
開發者通過某 IP 發起調用->平臺返回錯誤碼[89503]并同時下發模板消息給公眾號管理員->公眾號管理員確認該 IP 可以調用->開發者使用該 IP 再次發起調用->調用成功。
如公眾號管理員第一次拒絕該 IP 調用,用戶在1個小時內將無法使用該 IP 再次發起調用,如公眾號管理員多次拒絕該 IP 調用,該 IP 將可能長期無法發起調用。平臺建議開發者在發起調用前主動與管理員溝通確認調用需求,或請求管理員開啟 IP 白名單功能并將該 IP 加入 IP 白名單列表。
公眾號和小程序均可以使用 AppID 和AppSecret調用本接口來獲取access_token。AppID和 AppSecret 可在“微信公眾平臺 - 開發 - 基本配置”頁中獲得(需要已經成為開發者,且帳號沒有異常狀態)。**調用接口時,請登錄“微信公眾平臺 - 開發 - 基本配置”提前將服務器 IP 地址添加到 IP 白名單中,點擊查看設置方法,否則將無法調用成功。**小程序無需配置 IP 白名單。
所以,獲取的access_token一定要妥善存儲起來,并由單獨的中控服務程序對外提供接口用以程序內部的token獲取和刷新,此處調試暫不涉及。
總結
以上是生活随笔為你收集整理的springboot进行微信公众号相关开发:(二)获取微信公众号access_token用以微信公众号各功能接口的调用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (第九周)团队项目14
- 下一篇: 简单的单级下拉菜单实现