开发公众号的过程中,会使用jssdk提供的微信公众号原生功能,使用过程中微信需要确认使用者身份,所以使用前需要现通过config接口注入权限验证配置,这时就需要用到签名服务,根据微信官方要求

对于不会开发后台服务的前端开发人员可以使用node来写服务端签名服务

相关依赖

package.json

有几个没用的依赖,用来调试别的功能的,可自行删除

{"name": "wechat-sign-service","version": "1.0.0","description": "","main": "7001","scripts": {"test": "echo \"Error: no test specified\" && exit 1"},"author": "saryz","license": "ISC","dependencies": {"baidu-aip-sdk": "^2.3.9","body-parser": "^1.19.0","cookie-parser": "~1.4.4","crypto": "^1.0.1","debug": "~2.6.9","express": "^4.17.1","fs": "0.0.1-security","http": "0.0.0","http-errors": "~1.6.3","jade": "~1.11.0","mime-types": "^2.1.24","morgan": "~1.9.1","multer": "^1.4.1","path": "^0.12.7","request": "^2.88.0","sha1": "^1.1.1","urlencode": "^1.1.0","xunfeisdk": "^1.0.1"}
}

核心代码

service.js

// express
var express = require('express')
var request = require('request')
var sha1 = require('sha1')var app = express()
var token = ''
var ticket = ''
var config = nullvar appId = 'xxx'
var secret = 'xxx'
var url = ''/*** token保持服务*/
function keepAccessToken () {var getTokenUrl = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' + appId + '&secret=' + secretrequest(reqOption(getTokenUrl), function (error, response, body) {if (!error && response.statusCode == 200) {token = body['access_token']console.log('刷新access_token=>>>', token.substr(0, 3) + '*****' + token.substr(-5)) // 请求成功的处理逻辑console.log('expires_in=>>>', body['expires_in']) // 请求成功的处理逻辑setTimeout(function () {keepAccessToken()}, body['expires_in']*1000)}})
}/*** ticket保持服务*/
function keepJsapiTicket () {if (token) {var getTicketUrl = 'https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=' + token + '&type=jsapi'request(reqOption(getTicketUrl), function (error, response, body) {if (!error && response.statusCode == 200) {ticket = body['ticket']console.log('刷新ticket=>>', ticket.substr(0, 3) + '*****' + ticket.substr(-5)) // 请求成功的处理逻辑console.log('expires_in=>>>', body['expires_in']) // 请求成功的处理逻辑setTimeout(function () {keepJsapiTicket()}, body['expires_in']*1000)}})} else {setTimeout(function () {keepJsapiTicket()}, 1000)}}app.get('/wechatSdk/getConfig', function (req, res, next) {console.log('req=>>', req.param('url'))if (req.param('url') !== url) {url = req.param('url')config = null}getConfig(res)
})function reqOption (url) {return {url: url,method: 'GET',json: true}
}/*** 获取配置* @param res*/
function getConfig (res) {var timestamp = Math.round(new Date().getTime() / 1000).toString()var nonceStr = randomString(16)console.log(url)var string = 'jsapi_ticket=' + ticket + '&noncestr=' + nonceStr + '&timestamp=' + timestamp + '&url=' + urlvar signature = sha1(string)config = {appId: appId, // 必填,公众号的唯一标识timestamp: timestamp, // 必填,生成签名的时间戳nonceStr: nonceStr, // 必填,生成签名的随机串signature: signature,// 必填,签名,见附录1}console.log('config===', config)res.send(config)
}/*** 随机数* @param len* @returns {string}*/
function randomString (len) {len = len || 32var $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678'/****默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1****/var maxPos = $chars.lengthvar pwd = ''for (i = 0; i < len; i++) {pwd += $chars.charAt(Math.floor(Math.random() * maxPos))}return pwd
}
keepAccessToken()
keepJsapiTicket()
app.listen(3000)

启动

启动前请确保相关域名已加入微信公众号JS接口安全域名

正常启动

$node service.js

利用forever插件保持服务

// 全局安装forever
sudo npm install forever -g
// 启动服务
forever start service.js
//查看当前服务目录
forever list
// 停止pid下的服务
forever stop [pid]
// 停止所有服务
forever stopall

使用

利用vuex做了持久化,也可以用别的方案替代

const url = location.href.replace(location.hash, '')
const wechatSign = this.$store.state.wechatSignif(wechatSign){wx.config({jsApiList: ['chooseImage'],openTagList: ['wx-open-launch-weapp'], // 可选,需要使用的开放标签列表,例如['wx-open-launch-app']...wechatSign})}else{axios.get('/wechatSdk/getConfig',{params:{url}}).then(data => {console.log('config', data)this.$store.commit('setWechatSign', data)wx.config({jsApiList: ['chooseImage'],openTagList: ['wx-open-launch-weapp'], // 可选,需要使用的开放标签列表,例如['wx-open-launch-app']...data})})}

Node Express微信公众号jssdk签名服务相关推荐

  1. (Node+Vue+微信公众号开发)企业级产品全栈开发速成周末班

    (Node+Vue+微信公众号开发)企业级产品全栈开发速成周末班 从零到壹全栈部落 产品:个人独立博客,21点见 Vue + Node + MongoDB支持服务端渲染的博客系统(5天) 开发环境技术 ...

  2. 微信公众号js-sdk使用步骤总结

    微信公众号js-sdk使用步骤总结 1. 域名绑定 先登录微信公众平台进入"公众号设置"的"功能设置"里填写"JS接口安全域名". 可填写三 ...

  3. php企业微信号js-sdk,php微信公众号js-sdk开发应用

    这篇文章主要为大家详细介绍了php微信公众号js-sdk开发应用的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 测试js的接口功能,我用的是BAE服务器不是SAE服务器.SAE服务器不能 ...

  4. 七天搞定Node.js微信公众号

    [课程介绍] 微信公众号已经1000多万个了,即使不为市场,为自己也应该学会开发它 [环境参数] 技术语言:Node.js 框架:Node.js>= 0.12.Koa1.2.0 课程所需开发系统 ...

  5. 【Node.js 微信公众号实战】1.Node.js 接入微信公众平台开发

    文章目录:         1.Node.js 接入微信公众平台开发         2.Node.js access_token的获取.存储及更新         3.Node.js 自定义微信菜单 ...

  6. 微信公众号jssdk 分享/App原生应用接入分享开发及应用场景

    文章目录 前言 一.应用场景 二.Jssdk 接入准备工作 1.申请企业版微信公众号,并进行认证,并设置成为开发者 2.公众号配置 3.查看appid.设置密钥.并配置ip 白名单等 三.开发接入 1 ...

  7. vue前端实现微信支付-微信公众号JSSDK

    最近在做支付功能,微信支付准备工作之类的请参考官方说明,注意个人申请的测试号不支持,要申请企业号,还要商户号,开通支付权限,配置域名,JSSDK的权限问题,尽可能都开通吧! 官方地址可参考这里:接入准 ...

  8. 微信公众号,接口服务配置url验证失败的问题

    这段时间研究微信公众号,发现了很多坑,现在贴出来做个记录 1.微信公众号在做开发的时候,首先就是对微信的服务接口的配置.让微信能够响应我们的接口.官方的接口文档吧可以这么说,你懂的或者了解他了吧可以说 ...

  9. jssdk 获取微信收货地址_微信公众号JSSDK 获取经纬度

    a代码如下: //重点 引入这句 //测试 引用 function jsSdk() { var baseUrl = '***********'; $.ajax({ cache: false, url: ...

最新文章

  1. 96.6. Template
  2. linux 软硬文件类型,linux文件属性和类型、系统链接文件、软链接和硬链接
  3. 菜渣初探mongodb--笔记篇
  4. php ob_flush 和flush
  5. java中的解码和编码_关于java中编码和解码(一)
  6. 国内首篇云厂商 Serverless 论文入选全球顶会:突发流量下,如何加速容器启动?
  7. ai二维码插件_送你60款AI脚本插件包,已整合成插件面板的形式,方便在AI中调用...
  8. Linux编程获取本机IP地址
  9. Futter基础第21篇: 实现普通对话框、列表对话框、单选对话框、Toast提示
  10. atitit。 hb Hibernate sql 查询使用
  11. 计算机毕业设计jspm平面设计类众包威客网网站mjmBBmysql程序
  12. LM393双电压比较器集成电路引脚图及功能_工作原理及应用电路
  13. log怎么用计算机,手机计算器log怎么用
  14. Script Control 组件Win7 X64平台运行问题及示例
  15. python数字及字母的分离_Python 分割文本使得 字母和数字 分开?
  16. 写互联网文案的新技巧
  17. 完成一个STM32的USART串口通讯程序
  18. 软件测试工程师春招薪资20K+,BAT校招薪资表出炉!学弟学妹们看齐...
  19. linux的lib目录,Linux 目录结构:/lib 分析
  20. 如何debug没有源代码的class文件—eclipse+jad

热门文章

  1. img标签的onerror事件(应用以及注意事项)
  2. 强大的网段掩码计算处理工具netmask
  3. linux 占用端口命令,linux释放占用端口
  4. MTK AF Precheck阶段未发现有PDAF功能的确认(PD verification steps)
  5. QQ会员的“十元”生意逻辑:人以群分
  6. 老当益壮?三星Galaxy Z Fold3或许依旧是业内最优秀的折叠屏旗舰
  7. 数据结构——最短路径问题
  8. 鼠标没反应,详细教您怎么解决鼠标没反应
  9. 像素扫描-置换贴图使用的优化思路
  10. IT男的一次中年破局尝试--出书