前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于Node.js+Express+编写一个微信订阅号聊天机器人

基于Node.js+Express+编写一个微信订阅号聊天机器人

原创
作者头像
编程小顺
发布2022-04-16 23:47:15
8570
发布2022-04-16 23:47:15
举报
文章被收录于专栏:知识小木屋知识小木屋

写在前面

首先,感谢腾讯云赠送本人一台云服务器。

环境准备

有公网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面板安装成功。

宝塔Linux面板安装成功截图
宝塔Linux面板安装成功截图

创建一个Express项目

WebStorm创建Express项目

WebStorm创建
WebStorm创建

脚手架创建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:点我获取~

免费的机器人API
免费的机器人API

在项目中安装axios xml2js模块

npm i axios xml2js

修改项目目录/routers/index.js中的代码

修改项目代码2
修改项目代码2
代码语言: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

安装Nginx
安装Nginx

安装Node.js

安装Node.js1
安装Node.js1
安装Node.js2
安装Node.js2

注意:registry源选择淘宝源,版本最好选稳定版。

安装Node.js3
安装Node.js3

上传源码到服务器

上传源码到服务器1
上传源码到服务器1
上传源码到服务器2
上传源码到服务器2
上传源码到服务器3
上传源码到服务器3

添加Node.js项目

添加Node.js项目
添加Node.js项目

反向代理

创建网站
创建网站
设置反向代理
设置反向代理

微信公众平台配置

登录微信公众平台

登录微信公众平台
登录微信公众平台

填写服务器配置

微信公众号配置
微信公众号配置

注意:此处的token与代码中的token应该保持一致。消息加密方式选兼容模式。填写好相关配置后记得保存,别忘了还要点一下启动!

启用截图
启用截图

微信测试截图

Screenshot_2022-04-16-23-17-41-234_com.tencent.mm
Screenshot_2022-04-16-23-17-41-234_com.tencent.mm

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 写在前面
    • 环境准备
    • 安装宝塔Linux面板
    • 创建一个Express项目
      • WebStorm创建Express项目
        • 脚手架创建Express项目
          • 全局安装express-generator
          • 生成目录名为weixin的工程
          • 进入工程根目录
          • 安装依赖
          • 运行项目
          • 打开浏览器查看
      • 代码编写
        • 准备一个机器人API
          • 在项目中安装axios xml2js模块
            • 修改项目目录/routers/index.js中的代码
            • 将项目部署到服务器
              • 打开宝塔面板
                • 安装环境
                  • 上传源码到服务器
                    • 添加Node.js项目
                      • 反向代理
                      • 微信公众平台配置
                        • 登录微信公众平台
                          • 填写服务器配置
                          • 微信测试截图
                          相关产品与服务
                          云服务器
                          云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档