前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >使用Node.js编写企业微信自建应用服务端

使用Node.js编写企业微信自建应用服务端

原创
作者头像
lyushine
发布2024-12-04 18:45:29
发布2024-12-04 18:45:29
12900
代码可运行
举报
文章被收录于专栏:Web行业观察Web行业观察
运行总次数:0
代码可运行

准备工作

在开始编写服务端之前,我们需要做好以下准备工作:

  1. 注册企业微信:首先需要在企业微信官网注册一个企业账号,并完成相关的认证。
  2. 创建自建应用:在企业微信管理后台中创建一个新的自建应用,并记录下应用的AgentId和Secret。
  3. 安装Node.js:确保服务器上已经安装了Node.js环境。
  4. 初始化项目:创建一个新的Node.js项目,并安装必要的依赖包,如expressaxios等。

编写服务端代码

下面是一个简单的Node.js服务端示例,用于处理企业微信的消息推送和事件响应。

代码语言:javascript
代码运行次数:0
复制
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}`);
});

代码解析

  1. 验证消息来源:通过GET请求验证消息是否来自企业微信服务器。
  2. 处理消息推送:通过POST请求处理企业微信推送的消息,并回复相应的消息。
  3. 获取access_token:通过企业微信提供的API获取access_token,用于后续的API调用。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 准备工作
  • 编写服务端代码
  • 代码解析
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档