Heim > Web-Frontend > js-Tutorial > Hauptteil

Eine ausführliche Erklärung zum Erstellen von Backend-Diensten für öffentliche WeChat-Konten mit Node.js

PHPz
Freigeben: 2023-04-05 09:27:33
Original
1156 Leute haben es durchsucht

1. Einleitung

Heutzutage ist WeChat für viele Unternehmen und Einzelpersonen zu einem wichtigen Kanal für den Betrieb von Self-Media geworden, und der Aufbau eines effizienten und stabilen Back-End-Dienstes für öffentliche WeChat-Konten ist zu einer Notwendigkeit geworden. Als leichte und effiziente Back-End-Sprache hat Node.js aufgrund seiner leistungsstarken asynchronen E/A-Funktionen und seiner Entwicklungseffizienz große Aufmerksamkeit erhalten. In diesem Artikel wird auf einfache und ausführliche Weise erläutert, wie Sie mit Node.js einen offiziellen WeChat-Konto-Backend-Dienst erstellen.

2. Vorbereitung

Bevor Sie beginnen, müssen Sie die folgenden Tools und Umgebung vorbereiten:

  • Node.js: Bitte gehen Sie zur offiziellen Website von Node.js, um sie herunterzuladen und zu installieren.
  • Öffentliches WeChat-Konto: Bitte gehen Sie zu die öffentliche WeChat-Plattform zur Registrierung und Beantragung von Entwicklungs-Autorenrechten;
  • Dateieditor: Visual Studio Code wird empfohlen.

3. Erstellen Sie den Backend-Dienst für das öffentliche WeChat-Konto.

  1. Projekt erstellen. Erstellen Sie zunächst einen Ordner zum Speichern des Projekts. Geben Sie dann den Ordner in die Befehlszeile ein und führen Sie den folgenden Befehl aus:
  2. npm init
    Nach dem Login kopieren
Befolgen Sie nach der Ausführung die Anweisungen zur Eingabe des Projektnamens, der Version, der Beschreibung und anderer Informationen, um die Projektinitialisierung abzuschließen.

Abhängigkeiten installieren

  1. Führen Sie den folgenden Befehl aus, um die erforderlichen Abhängigkeiten zu installieren:
  2. npm install express request xml2js
    Nach dem Login kopieren
Unter diesen ist Express ein von Node.js entwickeltes Webframework, Request ist eine Bibliothek, die HTTP-Anfragen kapselt, und xml2js ist eine Bibliothek, die Konvertiert XML in eine Bibliothek für JSON-Daten.

Routing konfigurieren

  1. Erstellen Sie im Stammverzeichnis des Projekts eine Datei mit dem Namen index.js und fügen Sie der Datei den folgenden Inhalt hinzu:
  2. 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(); // 校验失败,返回空响应
    });
    Nach dem Login kopieren
Der obige Code implementiert die Zugriffsüberprüfung des offiziellen WeChat-Kontos, die spezifische Implementierung Weitere Informationen zur Methode finden Sie in der offiziellen Website-Dokumentation.

WeChat-Nachrichten verarbeiten

  1. Erstellen Sie im Stammverzeichnis des Projekts eine Datei mit dem Namen message.js zur Verarbeitung von WeChat-Nachrichten. Fügen Sie der Datei den folgenden Inhalt hinzu:
  2. /**
     * 解析 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();
      });
    };
    Nach dem Login kopieren
Der obige Code analysiert die Nachricht vom offiziellen WeChat-Konto und gibt nach der Verarbeitung die entsprechende Antwortnachricht zurück.

Starten Sie den Dienst

  1. Fügen Sie in index.js den folgenden Code hinzu, um den Dienst zu starten:
  2. 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);
    Nach dem Login kopieren

Verifizierungsdienst

  1. Nach dem Starten des Dienstes können Sie ihn überprüfen, indem Sie die Serveradresse im Hintergrund konfigurieren das offizielle WeChat-Konto. Nach erfolgreicher Verifizierung können Sie diese Adresse als Backend-Dienstadresse des offiziellen WeChat-Kontos verwenden. Gleichzeitig können Sie den Code debuggen, um sicherzustellen, dass Nachrichten normal zugestellt und beantwortet werden können.
4. Zusammenfassung

In diesem Artikel wird erläutert, wie Sie mit Node.js Backend-Dienste für öffentliche WeChat-Konten erstellen. Dabei werden zwei Aspekte behandelt: Zugriffsüberprüfung und Nachrichtenverarbeitung. Ich glaube, dass Leser durch diesen Artikel die Grundprinzipien und Implementierungsmethoden der Verwendung von Node.js zum Erstellen von WeChat-Backend-Diensten schnell verstehen und beherrschen können.

Das obige ist der detaillierte Inhalt vonEine ausführliche Erklärung zum Erstellen von Backend-Diensten für öffentliche WeChat-Konten mit Node.js. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage