写在前面
首先,感谢腾讯云赠送本人一台云服务器。
环境准备
有公网IP的云服务器 系统版本:CentOS 7.6
安装宝塔Linux面板
登录自己的服务器,运行下面的命令,等待安装。
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh ed8484bec
若出现下图的结果,代表宝塔Linux面板安装成功。
创建一个Express项目
WebStorm创建Express项目
脚手架创建Express项目
全局安装express-generator
npm i express-generator -g
生成目录名为weixin
的工程
express -e weixin
进入工程根目录
cd weixin
安装依赖
npm install --registry=https://registry.npm.taobao.org
运行项目
npm start
打开浏览器查看
代码编写
准备一个机器人API
我这里分享一个免费的机器人API:点我获取~
在项目中安装axios xml2js
模块
npm i axios xml2js
修改项目目录/routers/index.js
中的代码
代码语言:JavaScript复制const express = require('express');
const router = express.Router();
const axios = require('axios');
router.get("/", function (req, res, next) {
const token = "填写微信公众平台后台的token";
//1.获取微信服务器Get请求的参数 signature、timestamp、nonce、echostr
let signature = req.query.signature, //微信加密签名
timestamp = req.query.timestamp, //时间戳
nonce = req.query.nonce, //随机数
echostr = req.query.echostr; //随机字符串
//2.将token、timestamp、nonce三个参数进行字典序排序
let array = [token, timestamp, nonce];
array.sort();
//3.将三个参数字符串拼接成一个字符串进行sha1加密
let tempStr = array.join("");
let shaObj = new jsSHA("SHA-1", "TEXT");
shaObj.update(tempStr);
let scyptoString = shaObj.getHash("HEX");
//4.开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
if (signature === scyptoString) {
console.log("验证成功");
res.send(echostr);
} else {
console.log("验证失败");
res.send("验证失败");
}
});
// 响应用户发送来的消息
const xml2js = require('xml2js');
router.post('/', (req, res) => {
let xml = ''
req.on('data', (chunk) => {
xml = chunk
})
req.on('end', () => {
//将接受到的xml数据转化为json
xml2js.parseString(xml, {explicitArray: false}, function (err, json) {
const backTime = new Date().getTime(); //创建发送时间,整数
if (json.xml.MsgType === 'event') { //消息为事件类型
if (json.xml.EventKey === 'clickEvent') {
res.send(getXml(json, backTime, '你戳我干啥...')) //回复用户的消息
}
} else if (json.xml.MsgType === 'text') { //消息为文字类型
const key = "填写机器人APIKEY"
const url = "http://api.tianapi.com/robot/index?key=" key "&question=" encodeURI(json.xml.Content);
axios.get(url)
.then(function (response) {
res.send(getXml(json, backTime, response.data.newslist[0].reply)) //回复用户的消息
});
}
});
})
function getXml(json, backTime, word) {
return `<xml>
<ToUserName><![CDATA[${json.xml.FromUserName}]]></ToUserName>
<FromUserName><![CDATA[${json.xml.ToUserName}]]></FromUserName>
<CreateTime>${backTime}</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[${word}]]></Content>
</xml>`;
}
})
module.exports = router;
注意:你需要将上述代码中的token和机器的APIKEY替换成自己的。
将项目部署到服务器
打开宝塔面板
安装环境
安装Nginx
安装Node.js
注意:registry源选择淘宝源
,版本最好选稳定版。
上传源码到服务器
添加Node.js项目
反向代理
微信公众平台配置
登录微信公众平台
填写服务器配置
注意:此处的token与代码中的token应该保持一致。消息加密方式选兼容模式
。填写好相关配置后记得保存,别忘了还要点一下启动!