Node.js微信 access_token ( jsapi_ticket ) 存取与刷新的示例

发布时间 - 2026-01-11 03:29:57    点击率:

access_token

微信文档里存在两种access_token:普通 access_token 和 网页授权 access_token。具体区别参考:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842

以下提到的 access_token 均为普通的 access_token

1. 首先我们先去看看是如何请求 access_token 的? 微信公众平台技术文档

GET请求:https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

正常返回:{"access_token":"ACCESS_TOKEN","expires_in":7200}

错误返回:{"errcode":40013,"errmsg":"invalid appid"}

2. 所以获取 access_token 的代码如下:

const request = require('request') // 请安装第三方包 request

request.get({
  uri: 'https://api.weixin.qq.com/cgi-bin/token',
  json: true,
  qs: {
   grant_type: 'client_credential',
   appid: APPID, // APPID请换成你的 appid
   secret: APPSECRET // APPSECRET请换成你的 appsecret
  }
 }, (err, res, body) => {
  if (err) {
   console.log(err)
   return
  }
  console.log(body)
  if (body.errcode) {
   // 返回错误时的处理
   return
  }
})

3. guard_dog 实现数据持久化和定时刷新

guard_dog 会生成 .dog 文件,每个文件对应一个KEY

const guard_dog = require('guard_dog') // 请安装第三方包 guard_dog

guard_dog.init(KEY, (handler) => { // KEY是guard_dog存取数据的键名
 // 拿到数据后调用 handler
 handler(DATA, EXPIREDS_IN) // DATA是要持久化的数据,EXPIREDS_IN是数据的有效时间,单位是秒
}, DIR) // DIR是 .dog 文件的存放目录,这个参数可以不传

4. 现在把以上两块代码合并起来就是我们要的效果

const request = require('request')
const guard_dog = require('guard_dog')

guard_dog.init('ACCESS_TOKEN', (handler) => {
 request.get({
  uri: 'https://api.weixin.qq.com/cgi-bin/token',
  json: true,
  qs: {
   grant_type: 'client_credential',
   appid: APPID, // APPID请换成你的 appid
   secret: APPSECRET // APPSECRET请换成你的 appsecret
  }
 }, (err, res, body) => {
  if (err) {
   console.log(err)
   return
  }
  console.log(body)
  if (body.errcode) {
   return
  }
  handler(body.access_token, body.expires_in)
 })
}) // 如有需要指定目录,可以再给 guard_dog.init 多传个参数

5. guard_dog 初始化这个 key 之后,获取到的都是有效的值了。guard_dog 获取值代码如下:

guard_dog.get('ACCESS_TOKEN', (data) => { // 上面初始化时用的键名为'ACCESS_TOKEN',所以这里取值也要用这个键名
 // 在这里拿到的 data 就是 access_token 了
})

6.如果想用着方便点,可以直接封装成一个模块

access_token.js

const request = require('request')
const guard_dog = require('guard_dog')
// 加载这个模块的时候给 ACCESS_TOKEN 这个键名初始化
guard_dog.init('ACCESS_TOKEN', (handler) => {
 request.get({
  uri: 'https://api.weixin.qq.com/cgi-bin/token',
  json: true,
  qs: {
   grant_type: 'client_credential',
   appid: APPID, // APPID请换成你的 appid
   secret: APPSECRET // APPSECRET请换成你的 appsecret
  }
 }, (err, res, body) => {
  if (err) {
   console.log(err)
   return
  }
  console.log(body)
  if (body.errcode) {
   return
  }
  handler(body.access_token, body.expires_in)
 })
}) 
// 只要向外暴露一个获取值的方法就可以了
module.exports = function (callback) {
 guard_dog.get('ACCESS_TOKEN', callback)
}

使用:

const access_token = require('./access_token') // 这里把这个模块与 access_token 模块当成在同一目录下来作为例子。
access_token((data) => {
 // 这个 data 就是 access_token
})

jsapi_ticket

jsapi_ticket 官方文档说明

上面关于 access_token 的例子已经说得很详细了,jsapi_ticket 处理起来也大同小异,所以下面直接贴代码了:

(需要注意一点:获取 jsapi_ticket 需要依赖 access_token,下面的代码直接依赖了上面所写的 access_token.js)

jsapi_ticket.js

const request = require('request')
const guard_dog = require('guard_dog')
const access_token = require('./access_token')

guard_dog.init('JSAPI_TICKET', (handler) => {
 access_token((access_token) => {
  request.get({
   uri: 'https://api.weixin.qq.com/cgi-bin/ticket/getticket',
   json: true,
   qs: {
    access_token: access_token,
    type: 'jsapi'
   }
  }, (err, res, body) => {
   if (err) {
    console.log(err)
    return
   }
   console.log(body)
   if (body.errcode) {
    return
   }
   handler(body.ticket, body.expires_in)
  })
 })
})

module.exports = function (callback) {
 guard_dog.get('JSAPI_TICKET', callback)
}

使用:

const jsapi_ticket = require('./jsapi_ticket')
jsapi_ticket((data) => {
 // 这个 data 就是 jsapi_ticket
})

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Node.js微信  # access_token  # Node  # jsapi_ticket  # Node.js  # access_token存储  # vue项目中js-cookie的使用存储token操作  # 详解Node.js使用token进行认证的简单示例  # node.js 微信开发之定时获取access_token  # NodeJs crypto加密制作token的实现代码  # php实现JWT(json web token)鉴权实例详解  # 详解JSON Web Token 入门教程  # node.js+captchapng+jsonwebtoken实现登录验证示例  # 详解Node.js access_token的获取、存储及更新  # JSON Web Tokens的实现原理  # JS提示:Uncaught SyntaxError: Unexpected token ILLEGA  # JS提示:Uncaught SyntaxError:Unexpected token ) 错误的解决  # token 机制和实现方式  # 键名  # 文档  # 第三方  # 都是  # 在这里  # 如有  # 两种  # 均为  # 得很  # 要用  # 可以直接  # 大同小异  # 向外  # 先去  # 想用  # 两块  # 需要注意  # 时用  # 所写  # 大家多多 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧  Laravel Fortify是什么,和Jetstream有什么关系  如何在建站之星网店版论坛获取技术支持?  Win11怎么设置默认图片查看器_Windows11照片应用关联设置  如何快速搭建高效WAP手机网站吸引移动用户?  如何挑选高效建站主机与优质域名?  Java垃圾回收器的方法和原理总结  创业网站制作流程,创业网站可靠吗?  CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】  Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议  Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】  Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】  如何快速生成高效建站系统源代码?  如何确保西部建站助手FTP传输的安全性?  佛山企业网站制作公司有哪些,沟通100网上服务官网?  php打包exe后无法访问网络共享_共享权限设置方法【教程】  高性价比服务器租赁——企业级配置与24小时运维服务  Android实现代码画虚线边框背景效果  北京网站制作公司哪家好一点,北京租房网站有哪些?  谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程  通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】  如何在 React 中条件性地遍历数组并渲染元素  北京企业网站设计制作公司,北京铁路集团官方网站?  三星网站视频制作教程下载,三星w23网页如何全屏?  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  开心动漫网站制作软件下载,十分开心动画为何停播?  1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤  详解Android中Activity的四大启动模式实验简述  Python企业级消息系统教程_KafkaRabbitMQ高并发应用  如何在VPS电脑上快速搭建网站?  bootstrap日历插件datetimepicker使用方法  重庆市网站制作公司,重庆招聘网站哪个好?  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  Laravel如何编写单元测试和功能测试?(PHPUnit示例)  Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程  Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】  中国移动官方网站首页入口 中国移动官网网页登录  Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】  Thinkphp 中 distinct 的用法解析  实例解析angularjs的filter过滤器  如何在 Pandas 中基于一列条件计算另一列的分组均值  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何快速重置建站主机并恢复默认配置?  如何用西部建站助手快速创建专业网站?  利用 Google AI 进行 YouTube 视频 SEO 描述优化  Laravel怎么实现微信登录_Laravel Socialite第三方登录集成  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  如何在阿里云通过域名搭建网站?  微信小程序 canvas开发实例及注意事项  Laravel安装步骤详细教程_Laravel环境搭建指南