nodeJS微信JSDK 配置
程序员文章站
2022-03-12 08:09:01
nodeJS微信JSDK 配置 一、微信公众平台申请一个测试公众号 二、配置nodeJS 使用express框架搭建服务器 微信生成签名步骤: 1.获取token 2.通过token,获取jsapi_ticket 3.生成随机字符串,获取当前时间戳 4.排序拼接生成签名 + 在routes inde ......
nodejs微信jsdk 配置
一、微信公众平台申请一个测试公众号
二、配置nodejs 使用express框架搭建服务器
微信生成签名步骤:
1.获取token
2.通过token,获取jsapi_ticket
3.生成随机字符串,获取当前时间戳
4.排序拼接生成签名
- 在routes---->index.js
var express = require('express'); var router = express.router(); var axios = require('axios'); var sha1 = require('sha1'); var fs = require('fs'); let accesstokenjson = require('../user_token'); const app_id = 'wx47159511d53720fb' const app_secret = 'e8be2675730af8b743769e34fc8a7267' let config_noncestr = '' //随机字符串 let config_timestamp = '' //时间戳 /* get home page. */ router.get('/', function(req, res, next) { res.send('这是首页') }); router.get('/getwxconfig', function (req, res, next) { let url = req.query.url; // 获取url gettoken().then(getticket).then(ret=>{ res.json({ // 返回前端需要的配置config success:true, code:200, config_appid: app_id, config_sign: signature(ret, url), config_timestamp, config_noncestr }) }) }); /*获取token*/ function gettoken(){ return new promise((resolve,reject)=>{ //获取当前时间 var currenttime = new date().gettime(); if (accesstokenjson.access_token === '' || accesstokenjson.expires_time < currenttime){ axios.get('https://api.weixin.qq.com/cgi-bin/token',{ params:{ appid: app_id, secret: app_secret, grant_type: 'client_credential' } }).then(res=>{ accesstokenjson.access_token = res.data.access_token; accesstokenjson.expires_time = new date().gettime() + (parseint(res.data.expires_in) - 200) * 1000; //更新本地存储 fs.writefile('../user_token.json', json.stringify(accesstokenjson)); resolve(accesstokenjson.access_token) }).catch(err => { return promise.reject(err); }) }else{ resolve(accesstokenjson.access_token) } }) } /* 通过token,获取jsapi_ticket */ function getticket(accesstoken){ return new promise((resolve,reject)=>{ axios.get('https://api.weixin.qq.com/cgi-bin/ticket/getticket', { params: { type: 'jsapi', access_token: accesstoken } }).then(res => { resolve(res.data.ticket); }).catch(err=>{ return promise.reject(err); }) }) } /** * 签名算法 * @param ticket 用于签名的 jsapi_ticket * @param url 用于签名的 url ,注意必须动态获取 * @return sha1算法加密的字符串 */ function signature(ticket, url){ config_noncestr = createnoncestr() // 生成随机字符串 config_timestamp = createtimestamp() // 获取当前时间戳 let ret ={ jsapi_ticket: ticket, noncestr:config_noncestr, timestamp:config_timestamp, url: url, } var string = raw(ret) // 排序拼接为字符串 console.log(string) return sha1(string) // 返回sha1加密的字符串 } /* 生成随机字符串 */ function createnoncestr(){ return math.random().tostring(36).substr(2,15); } /* 获取当前时间戳 */ function createtimestamp() { return parseint(new date().gettime() / 1000) + ''; } /* 排序拼接 */ function raw(args){ let keys = object.keys(args).sort(); //获取args对象的键值数组,并对所有待签名参数按照字段名的ascii 码从小到大排序(字典序) let newargs ={} keys.foreach(key=>{ newargs[key.tolowercase()] = args[key]; }) let string = ''; for (let k in newargs) {// 循环新对象,拼接为字符串 string +=`&${k}=${newargs[k]}` } string = string.substr(1)// 截取第一个字符以后的字符串(去掉第一个'&') return string; } module.exports = router;
三、使用内网穿透工具(例如:natapp)把本地服务器映射到公网上去
如果有服务器的可以跳过这一步
四、前端使用微信jsdk
使用步骤:
1、绑定域名
2、引入js文件 http://res2.wx.qq.com/open/js/jweixin-1.4.0.js
vue 项目可以下载模块 npm i weixin-js-sdk -s
3、配置config
wx.config({ debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appid: '', // 必填,公众号的唯一标识 timestamp: , // 必填,生成签名的时间戳 noncestr: '', // 必填,生成签名的随机串 signature: '',// 必填,签名 jsapilist: [] // 必填,需要使用的js接口列表 });
4、通过ready接口处理成功验证,通过error接口处理失败验证
5、调用微信接口api
详情见开发文档地址:https://developers.weixin.qq.com/doc/offiaccount/oa_web_apps/js-sdk.html
上一篇: Python3+PyCharm+PyQt5配置进行GUI开发
下一篇: Two Sum