1. Node.js介绍
Node.js是一个基于Chrome V8引擎的JavaScript运行环境。Node.js具有事件驱动、非阻塞I/O模型等特点,使得Node.js具备了非常高的性能,在 Web 开发领域得到了广泛应用。
2. 微信公众号后台服务搭建前需准备的工具
2.1 Node.js
运行Node.js代码需要在本地安装Node.js环境。在官网上下载安装包即可:https://nodejs.org/en/download/
2.2 微信公众平台账号
完成微信开发需要微信公众平台账号,官网地址:https://mp.weixin.qq.com/。
2.3 开发者工具
微信开发需要使用微信公众平台提供的开发者工具,可以在此页面下载:https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html 。
3. 开始建立微信公众号后台服务
3.1 注册服务器并设置回调地址
微信公众平台中,需要在设置-公众号设置-服务器配置中进行配置。在这里需要填写服务器地址、Token、EncodingAESKey等信息。其中,服务器地址是以http或https协议开头的回调地址,这个地址需要公网IP或者域名才能回调成功。
Token和EncodingAESKey是加密解密时用到的,Token是由开发者自定义的字符串,EncodingAESKey需要在申请页面上使用“随机生成”的方式获取,建议这里也使用“随机生成”后的EncodingAESKey。
将服务器地址配置好后保存,并记住Token和EncodingAESKey。
3.2 创建项目并安装依赖
使用Node.js环境,创建一个工程目录。
mkdir wechat-backend-service
cd wechat-backend-service
npm init
然后在命令行中输入以下命令,安装所需模块express、body-parser、request、xml2js:
npm install express body-parser request xml2js --save
3.3 编写服务器端代码
在项目目录下创建server.js文件,并输入以下代码:
const express = require("express");
const bodyParser = require("body-parser");
const request = require("request");
const xml2js = require("xml2js");
const crypto = require("crypto");
const app = express();
// 微信公众平台服务器验证
app.get("/wechat", (req, res) => {
const signature = req.query.signature;
const timestamp = req.query.timestamp;
const nonce = req.query.nonce;
const token = "yourToken"; // 这里填写你在微信公众平台设置的Token。
const shasum = crypto.createHash("sha1");
shasum.update([timestamp, nonce, token].sort().join(""));
const hash = shasum.digest("hex");
if (hash === signature) {
res.send(req.query.echostr);
} else {
res.send("fail");
}
});
// 微信公众平台消息接收
app.post("/wechat", bodyParser.raw({ type: "text/xml" }), (req, res) => {
const xmlData = req.body.toString();
xml2js.parseString(xmlData, (err, result) => {
if (err) {
console.error(err);
} else {
console.log(result);
// TODO : 根据收到的消息进行业务处理。
}
});
res.send("success");
});
app.listen(80, () => {
console.log("Server is running on port 80");
});
3.4 测试服务
在命令行中输入以下命令,启动服务器:
node server.js
如果命令行中输出"Server is running on port 80"说明服务启动成功。
在浏览器中输入服务器地址,例如http://localhost/wechat,如果看到“fail”字样,说明微信服务器验证失败;如果看到回调的信息,说明微信服务器验证成功。
4. 微信公众号接口调用
4.1 获取access_token
微信提供了很多API接口供我们使用,在使用之前需要获取access_token。获取access_token的接口为:
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
其中APPID和APPSECRET是在微信公众平台中申请到的,获取方法为:进入管理中心,点击左侧菜单-开发-基本配置,就可以看到APPID和APPSECRET了。
在代码中调用该接口,解析响应结果获取access_token:
let accessToken = "";
function updateAccessToken() {
const appid = "yourAppId";
const secret = "yourAppSecret";
const url = `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${appid}&secret=${secret}`;
request.get(url, (error, response, body) => {
if (!error && response.statusCode === 200) {
const result = JSON.parse(body);
accessToken = result.access_token;
console.log("成功获取access_token:", accessToken);
} else {
console.error("获取access_token失败:", error);
}
});
}
updateAccessToken();
setInterval(updateAccessToken, 1000 * 60 * 60 * 1.5);
4.2 发送消息
微信公众平台提供了客服消息接口,我们可以使用这个接口发送消息给用户。发送消息的接口为:
https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=ACCESS_TOKEN
其中ACCESS_TOKEN是在接口调用中获取到的。发送消息需要一个JSON格式,示例为:
const msg = {
touser: "yourOpenId",
msgtype: "text",
text: {
content: "这是一条来自Node.js服务的消息"
}
};
在代码中调用该接口,发送消息给用户:
const url = `https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=${accessToken}`;
request.post(url, {
json: true,
body: msg
}, (error, response, body) => {
if (!error && response.statusCode === 200) {
console.log("消息发送成功");
} else {
console.error("消息发送失败", error);
}
});
5. 结语
通过本文介绍,读者可以初步认识如何使用Node.js搭建微信公众号后台服务,并调用微信公众号API接口进行消息发送。Node.js拥有事件驱动、非阻塞I/O模型等特性,具有高性能优势,使用Node.js可以开发出高效稳定的微信公众号后台服务。