国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > JS > 正文

node微信開發(fā)之獲取access_token+自定義菜單

2024-05-06 16:49:09
字體:
供稿:網(wǎng)友

上一篇:自動回復(fù)的實(shí)現(xiàn)

這兩天終于把獲取access_token+自定義菜單+授權(quán)登錄+獲取用戶信息部分完成了,nodejs其實(shí)不是很熟悉,所以估計(jì)有很多特性沒用起來的,還有很多冗余代碼以及各種問題,只能說功能實(shí)現(xiàn)了,大家多多擔(dān)待吧。

獲取access_token

因?yàn)檎{(diào)用所有公眾號的接口都需要用到access_token,所以必須先將access_token緩存起來,方便以后使用,access_token的有效時(shí)間為2小時(shí),所以需要定時(shí)更新,下面是代碼實(shí)現(xiàn)。

有一點(diǎn)需要注意,本文會提到兩個(gè)access_token,還有一個(gè)是oauth時(shí)會用到,所以大家不要搞混了。

access_token的獲取

access_token的獲取相對來說很簡單了,就是請求一個(gè)鏈接附加參數(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);   }  }); })};

請求的三個(gè)參數(shù)也比較簡潔:

 

參數(shù) 是否必須 說明
grant_type 獲取access_token填寫client_credential
appid 第三方用戶唯一憑證
secret 第三方用戶唯一憑證密鑰,即appsecret

 

access_token的保存

保存有很多種方法,放在緩存里等,我這邊是存放在一個(gè)文件里,因?yàn)閮H僅是一個(gè)示例,定時(shí)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就能做到定時(shí)更新了,注意,如果不是測試好獲取token的次數(shù)是有限制的,不過一般沒什么問題,測試最好還是在測試號上進(jìn)行。

node,微信開發(fā),access_token,自定義菜單

自定義菜單

獲取access_token后自定義菜單的實(shí)現(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,因?yàn)閠oken是存在文件里的所以這里進(jìn)行文件讀取得到tokenconst 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ù)器啟動的時(shí)候調(diào)用這個(gè)模塊就可以創(chuàng)建一個(gè)簡單的自定義菜單了:

node,微信開發(fā),access_token,自定義菜單

好這部分就算結(jié)束了,本來想連著jssdk一起的但是那樣就顯得太長了,但是那部分代碼已經(jīng)完成了,所以大家可以自行看看代碼。

github地址奉上:https://github.com/xiadd/shorthand 歡迎star

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持VeVb武林網(wǎng)。


注:相關(guān)教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 北辰区| 海林市| 武夷山市| 西华县| 全椒县| 迭部县| 英吉沙县| 延安市| 广安市| 淳化县| 马山县| 蕉岭县| 缙云县| 汉中市| 额济纳旗| 镇原县| 抚远县| 河西区| 嵊州市| 当阳市| 萨迦县| 巍山| 平乡县| 恭城| 波密县| 宣汉县| 光泽县| 阿城市| 科技| 庆阳市| 梧州市| 平湖市| 晋州市| 松原市| 凤庆县| 衡水市| 乃东县| 吉水县| 肇庆市| 漯河市| 瑞金市|