在开始编写服务端之前,我们需要做好以下准备工作:
express
、axios
等。下面是一个简单的Node.js服务端示例,用于处理企业微信的消息推送和事件响应。
const express = require('express');
const crypto = require('crypto');
const axios = require('axios');
const xml2js = require('xml2js');
const app = express();
app.use(express.json());
// 企业微信应用的配置信息
const config = {
token: 'YOUR_TOKEN',
encodingAESKey: 'YOUR_ENCODING_AES_KEY',
corpId: 'YOUR_CORP_ID',
};
// 验证消息来源
app.get('/wechat', (req, res) => {
const { signature, timestamp, nonce, echostr } = req.query;
const arr = [config.token, timestamp, nonce].sort().join('');
const sha1 = crypto.createHash('sha1').update(arr).digest('hex');
if (sha1 === signature) {
res.send(echostr);
} else {
res.send('fail');
}
});
// 处理消息推送
app.post('/wechat', (req, res) => {
const { signature, timestamp, nonce } = req.query;
const arr = [config.token, timestamp, nonce].sort().join('');
const sha1 = crypto.createHash('sha1').update(arr).digest('hex');
if (sha1 === signature) {
let xml = '';
req.on('data', chunk => {
xml += chunk;
});
req.on('end', () => {
xml2js.parseString(xml, (err, result) => {
if (err) {
res.send('fail');
return;
}
// 处理消息逻辑
const message = result.xml;
console.log(message);
// 回复消息
const builder = new xml2js.Builder();
const reply = {
xml: {
ToUserName: message.FromUserName,
FromUserName: message.ToUserName,
CreateTime: Math.floor(Date.now() / 1000),
MsgType: 'text',
Content: '收到消息',
},
};
res.set('Content-Type', 'application/xml');
res.send(builder.buildObject(reply));
});
});
} else {
res.send('fail');
}
});
// 获取access_token
async function getAccessToken() {
const url = `https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=${config.corpId}&corpsecret=${config.encodingAESKey}`;
const response = await axios.get(url);
return response.data.access_token;
}
// 启动服务
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。