這篇文章給大家分享的是有關(guān)node中如何獲取access_token+自定義菜單的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
在耿馬等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站建設(shè)、網(wǎng)站制作 網(wǎng)站設(shè)計制作按需開發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計,成都營銷網(wǎng)站建設(shè),成都外貿(mào)網(wǎng)站建設(shè)公司,耿馬網(wǎng)站建設(shè)費(fèi)用合理。獲取access_token
因為調(diào)用所有公眾號的接口都需要用到access_token,所以必須先將access_token緩存起來,方便以后使用,access_token的有效時間為2小時,所以需要定時更新,下面是代碼實現(xiàn)。
有一點(diǎ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ù)是有限制的,不過一般沒什么問題,測試最好還是在測試號上進(jìn)行。
自定義菜單
獲取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是存在文件里的所以這里進(jìn)行文件讀取得到token const token = fs.readFileSync('./token').toString(); //常用type為view和click,分別為點(diǎn)擊事件和鏈接 var menus = { "button": [ { "name": "測試菜單", "sub_button": [ { "type": "view", "name": "授權(quán)登錄", "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;
這樣在服務(wù)器啟動的時候調(diào)用這個模塊就可以創(chuàng)建一個簡單的自定義菜單了:
感謝各位的閱讀!關(guān)于“node中如何獲取access_token+自定義菜單”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。