'use strict' //设置为严格模式
//构建 WeChat 对象 即 js中 函数就是对象
var WeChat = function(config){
//设置 WeChat 对象属性 config
this.config = config;
//设置 WeChat 对象属性 token
this.token = config.token;
}
//暴露可供外部访问的接口
module.exports = WeChat;
/**
* exports module.exports 的一个简短的引用
* require 用于引入模块
* module 当前模块的引用
* __filename 当前模块的文件名
* __dirname 当前模块的目录名
*/
(function (exports, require, module, __filename, __dirname) {
//自定义模块的代码块
})();
'use strict' //设置为严格模式
const crypto = require('crypto'); //引入加密模块
//构建 WeChat 对象 即 js中 函数就是对象
var WeChat = function(config){
//设置 WeChat 对象属性 config
this.config = config;
//设置 WeChat 对象属性 token
this.token = config.token;
}
/**
* 微信接入验证
*/
WeChat.prototype.auth = function(req,res){
//1.获取微信服务器Get请求的参数 signature、timestamp、nonce、echostr
var signature = req.query.signature,//微信加密签名
timestamp = req.query.timestamp,//时间戳
nonce = req.query.nonce,//随机数
echostr = req.query.echostr;//随机字符串
//2.将token、timestamp、nonce三个参数进行字典序排序
var array = [this.token,timestamp,nonce];
array.sort();
//3.将三个参数字符串拼接成一个字符串进行sha1加密
var tempStr = array.join('');
const hashCode = crypto.createHash('sha1'); //创建加密类型
var resultCode = hashCode.update(tempStr,'utf8').digest('hex'); //对传入的字符串进行加密
//4.开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
if(resultCode === signature){
res.send(echostr);
}else{
res.send('mismatch');
}
}
//暴露可供外部访问的接口
module.exports = WeChat;
const express = require('express'), //express 框架
wechat = require('./wechat/wechat'),
config = require('./config');//引入配置文件
var app = express();//实例express框架
var wechatApp = new wechat(config); //实例wechat 模块
//用于处理所有进入 3000 端口 get 的连接请求
app.get('/',function(req,res){
wechatApp.auth(req,res);
});
//监听3000端口
app.listen(3000);
{
"token":"wechat",
"appID":"wx154f********764da",
"appScrect":"59de4266*******8dbe9de4b798cd372",
"apiDomain":"https://api.weixin.qq.com/",
"apiURL":{
"accessTokenApi":"%scgi-bin/token?grant_type=client_credential&appid=%s&secret=%s"
}
}
//用于处理 https Get请求方法
this.requestGet = function(url){
return new Promise(function(resolve,reject){
https.get(url,function(res){
var buffer = [],result = "";
//监听 data 事件
res.on('data',function(data){
buffer.push(data);
});
//监听 数据传输完成事件
res.on('end',function(){
result = Buffer.concat(buffer,buffer.length).toString('utf-8');
//将最后结果返回
resolve(result);
});
}).on('error',function(err){
reject(err);
});
});
}
{
"access_token":"",
"expires_time":0
}
'use strict' //设置为严格模式
const crypto = require('crypto'), //引入加密模块
https = require('https'), //引入 htts 模块
util = require('util'), //引入 util 工具包
accessTokenJson = require('./access_token'); //引入本地存储的 access_token
//构建 WeChat 对象 即 js中 函数就是对象
var WeChat = function(config){
//设置 WeChat 对象属性 config
this.config = config;
//设置 WeChat 对象属性 token
this.token = config.token;
//设置 WeChat 对象属性 appID
this.appID = config.appID;
//设置 WeChat 对象属性 appScrect
this.appScrect = config.appScrect;
//设置 WeChat 对象属性 apiDomain
this.apiDomain = config.apiDomain;
//设置 WeChat 对象属性 apiURL
this.apiDomain = config.apiURL;
//用于处理 https Get请求方法
this.requestGet = function(url){
return new Promise(function(resolve,reject){
https.get(url,function(res){
var buffer = [],result = "";
//监听 data 事件
res.on('data',function(data){
buffer.push(data);
});
//监听 数据传输完成事件
res.on('end',function(){
result = Buffer.concat(buffer,buffer.length).toString('utf-8');
//将最后结果返回
resolve(result);
});
}).on('error',function(err){
reject(err);
});
});
}
}
/**
* 获取微信 access_token
*/
WeChat.prototype.getAccessToken = function(){
var that = this;
return new Promise(function(resolve,reject){
//获取当前时间
var currentTime = new Date().getTime();
//格式化请求地址
var url = util.format(that.apiURL.accessTokenApi,that.apiDomain,that.appID,that.appScrect);
//判断 本地存储的 access_token 是否有效
if(accessTokenJson.access_token === "" || accessTokenJson.expires_time < currentTime){
that.requestGet(url).then(function(data){
var result = JSON.parse(data);
if(data.indexOf("errcode") < 0){
accessTokenJson.access_token = result.access_token;
accessTokenJson.expires_time = new Date().getTime() + (parseInt(result.expires_in) - 200) * 1000;
//更新本地存储的
fs.writeFile('./wechat/access_token.json',JSON.stringify(accessTokenJson));
//将获取后的 access_token 返回
resolve(accessTokenJson.access_token);
}else{
//将错误返回
resolve(result);
}
});
}else{
//将本地存储的 access_token 返回
resolve(accessTokenJson.access_token);
}
});
}
//用于请求获取 access_token
app.get('/getAccessToken',function(req,res){
wechatApp.getAccessToken().then(function(data){
res.send(data);
});
});
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有