首頁  >  文章  >  web前端  >  深入淺出Node.js搭建微信公眾號後台服務的方法

深入淺出Node.js搭建微信公眾號後台服務的方法

PHPz
PHPz原創
2023-04-05 09:08:561106瀏覽

一、前言

如今,微信已經成為了許多公司和個人營運自媒體的重要管道,而搭建一個高效穩定的微信公眾號後台服務就成為了剛需。 Node.js 作為一種輕量高效的後端語言,以其強大的非同步 IO 能力和開發效率受到了廣泛關注。這篇文章將深入淺出地介紹如何使用 Node.js 建構一個微信公眾號後台服務。

二、準備工作

在開始前,需要準備以下工具與環境:

  • Node.js:請前往Node.js 官網下載安裝;
  • 微信公眾號:請前往微信公眾平台註冊和申請開發者權限;
  • 文件編輯器:推薦使用Visual Studio Code。

三、建立微信公眾號後台服務

  1. 建立專案

首先,建立一個資料夾,用來存放專案。然後,在命令列中進入該資料夾,並執行以下命令:

npm init

執行後,按照提示依序輸入項目名稱、版本、描述等資訊即可完成專案初始化。

  1. 安裝依賴

執行下列指令安裝必要的依賴:

npm install express request xml2js

其中,express 是一款Node.js 開發的Web 框架,request是一個封裝了HTTP 請求的函式庫,xml2js 是一個將XML 轉為JSON 資料的函式庫。

  1. 設定路由

在專案根目錄下,建立一個名為index.js 的文件,並在該檔案中新增以下內容:

const express = require('express');
const request = require('request');
const { parseString } = require('xml2js');

const app = express();

app.get('/api/wechat', (req, res) => {
  const { signature, timestamp, nonce, echostr } = req.query;

  //  排序和拼接字符串
  const str = [process.env.TOKEN, timestamp, nonce].sort().join('');
  const sha1 = require('crypto').createHash('sha1');
  sha1.update(str);
  const code = sha1.digest('hex');

  if (code === signature) {
    return res.send(echostr); // 校验成功,原样返回 echostr 参数内容
  }

  res.send(); // 校验失败,返回空响应
});

以上程式碼實現了微信公眾號的存取驗證,具體實作方式可參考官網文件。

  1. 處理微信訊息

在專案根目錄下,建立一個名為 message.js 的文件,用於處理微信訊息。在該文件中加入以下內容:

/**
 * 解析 XML 数据
 * @param {string} xmlStr XML 字符串
 */
function parseXML(xmlStr) {
  const options = {
    explicitArray: false, // 不将子元素变为数组
    ignoreAttrs: true, // 忽略属性
  };
  return new Promise((resolve, reject) => {
    parseString(xmlStr, options, (err, result) => {
      if (err) {
        return reject(err);
      }
      resolve(result.xml);
    });
  });
}

module.exports = function handleWechatMessage(req, res) {
  let body = '';

  req.on('data', (chunk) => {
    body += chunk;
  });

  req.on('end', async () => {
    const {
      ToUserName,
      FromUserName,
      CreateTime,
      MsgType,
      Event,
      Content,
      EventKey,
    } = await parseXML(body);

    let replyXML;
    switch (MsgType) {
      case 'text':
        // 处理文本消息
        replyXML = `<xml>
          <ToUserName><![CDATA[${FromUserName}]]></ToUserName>
          <FromUserName><![CDATA[${ToUserName}]]></FromUserName>
          <CreateTime>${Math.floor(Date.now() / 1000)}</CreateTime>
          <MsgType><![CDATA[text]]></MsgType>
          <Content><![CDATA[${Content}]]></Content>
        </xml>`;
        break;
      case 'event':
        // 处理事件消息
        if (Event === 'subscribe') {
          // 处理关注事件
          replyXML = `<xml>
            <ToUserName><![CDATA[${FromUserName}]]></ToUserName>
            <FromUserName><![CDATA[${ToUserName}]]></FromUserName>
            <CreateTime>${Math.floor(Date.now() / 1000)}</CreateTime>
            <MsgType><![CDATA[text]]></MsgType>
            <Content><![CDATA[欢迎关注]]></Content>
          </xml>`;
        } else if (Event === 'unsubscribe') {
          // 处理取消关注事件
          console.log('用户取消关注');
        } else if (Event === 'CLICK' && EventKey === 'test') {
          // 处理菜单点击事件
          replyXML = `<xml>
            <ToUserName><![CDATA[${FromUserName}]]></ToUserName>
            <FromUserName><![CDATA[${ToUserName}]]></FromUserName>
            <CreateTime>${Math.floor(Date.now() / 1000)}</CreateTime>
            <MsgType><![CDATA[text]]></MsgType>
            <Content><![CDATA[点击了测试菜单]]></Content>
          </xml>`;
        }
        break;
      default:
        break;
    }

    if (replyXML) {
      res.setHeader('Content-Type', 'application/xml');
      return res.send(replyXML);
    }

    res.send();
  });
};

以上程式碼解析了來自微信公眾號的訊息,處理後傳回對應的回覆訊息。

  1. 啟動服務

在index.js 中,新增下列程式碼啟動服務:

const handleWechatMessage = require('./message');

const server = app.listen(process.env.PORT || 3000, () => {
  const address = server.address();
  console.log(`Server running at http://${address.address}:${address.port}`);
});

app.post('/api/wechat', handleWechatMessage);
  1. 驗證服務

啟動服務後,可以透過在微信公眾號後台設定伺服器位址來進行驗證。驗證成功後,即可使用該地址作為微信公眾號的後台服務地址。同時,可以在程式碼中進行調試,確保訊息能夠正常地傳遞和回應。

四、總結

這篇文章介紹如何使用 Node.js 建立微信公眾號後台服務,涵蓋了存取驗證和訊息處理兩個面向。透過此文,相信讀者能夠快速了解並掌握使用 Node.js 搭建微信後台服務的基本原理和實作方式。

以上是深入淺出Node.js搭建微信公眾號後台服務的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn