node微信開發(fā)之獲取access_token+自定義菜單
上一篇:自動回復的實現(xiàn)
這兩天終于把獲取access_token+自定義菜單+授權登錄+獲取用戶信息部分完成了,nodejs其實不是很熟悉,所以估計有很多特性沒用起來的,還有很多冗余代碼以及各種問題,只能說功能實現(xiàn)了,大家多多擔待吧。
獲取access_token
因為調(diào)用所有公眾號的接口都需要用到access_token,所以必須先將access_token緩存起來,方便以后使用,access_token的有效時間為2小時,所以需要定時更新,下面是代碼實現(xiàn)。
有一點需要注意,本文會提到兩個access_token,還有一個是oauth時會用到,所以大家不要搞混了。
access_token的獲取
access_token的獲取相對來說很簡單了,就是請求一個鏈接附加參數(shù)得到access_token,代碼如下:
const getAccessToken = function () { let queryParams = { 'grant_type': 'client_credential', 'appid': config.appId, 'secret': config.appSecret }; let wxGetAccessTokenBaseUrl = 'https://api.weixin.qq.com/cgi-bin/token?'+qs.stringify(queryParams); let options = { method: 'GET', url: wxGetAccessTokenBaseUrl }; return new Promise((resolve, reject) => { request(options, function (err, res, body) { if (res) { resolve(JSON.parse(body)); } else { reject(err); } }); }) };
請求的三個參數(shù)也比較簡潔:
參數(shù) | 是否必須 | 說明 |
---|---|---|
grant_type | 是 | 獲取access_token填寫client_credential |
appid | 是 | 第三方用戶唯一憑證 |
secret | 是 | 第三方用戶唯一憑證密鑰,即appsecret |
access_token的保存
保存有很多種方法,放在緩存里等,我這邊是存放在一個文件里,因為僅僅是一個示例,定時7000s更新。
//保存與更新 const saveToken = function () { getAccessToken().then(res => { let token = res['access_token']; fs.writeFile('./token', token, function (err) { }); }) }; const refreshToken = function () { saveToken(); setInterval(function () { saveToken(); }, 7000*1000); };
這樣access_token就能做到定時更新了,注意,如果不是測試好獲取token的次數(shù)是有限制的,不過一般沒什么問題,測試最好還是在測試號上進行。
自定義菜單
獲取access_token后自定義菜單的實現(xiàn)就非常簡單了,這里僅僅簡單講一下請求,具體菜單內(nèi)容請看微信的文檔。
http請求方式:POST(請使用https協(xié)議) https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN
但是body要帶上菜單的內(nèi)容,就是json數(shù)據(jù),但是微信返回的數(shù)據(jù)是string類型,所以下面也要注意,可能在這邊會遇到問題。簡單代碼如下:
'use strict'; const fs = require('fs'); const request = require('request'); //token,因為token是存在文件里的所以這里進行文件讀取得到token const token = fs.readFileSync('./token').toString(); //常用type為view和click,分別為點擊事件和鏈接 var menus = { "button": [ { "name": "測試菜單", "sub_button": [ { "type": "view", "name": "授權登錄", "url": "http://wuyrsp3tma.proxy.qqbrowser.cc/auth" }] }] }; function createMenu() { let options = { url: 'https://api.weixin.qq.com/cgi-bin/menu/create?access_token=' + token, form: JSON.stringify(menus), headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }; request.post(options, function (err, res, body) { if (err) { console.log(err) }else { console.log(body); } }) } module.exports = createMenu;
這樣在服務器啟動的時候調(diào)用這個模塊就可以創(chuàng)建一個簡單的自定義菜單了:
好這部分就算結(jié)束了,本來想連著jssdk一起的但是那樣就顯得太長了,但是那部分代碼已經(jīng)完成了,所以大家可以自行看看代碼。
github地址奉上:https://github.com/xiadd/shorthand 歡迎star
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
- nodejs+mongodb aggregate級聯(lián)查詢操作示例
- Node.js+ES6+dropload.js實現(xiàn)移動端下拉加載實例
- 詳解nodejs微信公眾號開發(fā)——6.自定義菜單
- JavaScript NodeTree導航欄(菜單項JSON類型/自制)
- nodejs 實現(xiàn)模擬form表單上傳文件
- Nodejs之http的表單提交
- Nodejs下用submit提交表單提示cannot post錯誤的解決方法
- 全面解析node 表單的圖片上傳
- Node層模擬實現(xiàn)multipart表單的文件上傳示例
- 推薦一個基于Node.js的表單驗證庫
- node省市區(qū)三級數(shù)據(jù)性能測評實例分析
相關文章
使用?Node-RED對?MQTT?數(shù)據(jù)流處理
本文將介紹使用 Node-RED 連接到 MQTT 服務器,并對 MQTT 數(shù)據(jù)進行過濾和處理后再將其發(fā)送至 MQTT 服務器的完整操作流程。讀者可以快速了解如何使用 Node-RED 對 MQTT 數(shù)據(jù)進行簡單的流處理2022-05-05Node使用koa2實現(xiàn)一個簡單JWT鑒權的方法
這篇文章主要介紹了Node使用koa2實現(xiàn)一個簡單JWT鑒權的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-01-01在Node.js中使用Express實現(xiàn)視頻評論的列表展示和刪除功能
在現(xiàn)代Web應用中,視頻內(nèi)容和互動功能(如評論)的結(jié)合極大地增加了用戶的參與度,本文將通過一個具體的例子,展示如何在Node.js環(huán)境中使用Express框架來實現(xiàn)視頻評論的列表展示和刪除功能,需要的朋友可以參考下2024-04-04nodejs通過phantomjs實現(xiàn)下載網(wǎng)頁
這篇文章主要介紹了nodejs通過phantomjs實現(xiàn)下載網(wǎng)頁的方法,有需要的小伙伴可以參考下。2015-05-05阿里大于短信驗證碼node koa2的實現(xiàn)代碼(最新)
本文給大家分享一個最新版阿里大于短信驗證碼node koa2的實現(xiàn)代碼及注意事項,需要的朋友參考下吧2017-09-09使用Redis和Node.js來開發(fā)簡單的實時聊天功能
在眾多實時通信的技術中,Redis和Node.js的結(jié)合是一種非常強大和流行的選擇,Redis是一種高性能的鍵值存儲數(shù)據(jù)庫,而Node.js是一個基于事件驅(qū)動的JavaScript運行時環(huán)境,兩者的結(jié)合可以輕松實現(xiàn)實時聊天功能,本文將指導您使用Redis和Node.js來開發(fā)一個簡單的實時聊天功能2024-08-08nodejs Assert中equal(),strictEqual(),deepEqual(),strictDeepEq
這篇文章主要介紹了node項目中遇到使用斷言測試程序,看了下nodejs的api之后,對nodejs中assert斷言的幾個方法做個簡單的記錄,需要的朋友可以參考下2017-09-09