Rumah  >  Artikel  >  hujung hadapan web  >  Penjelasan mendalam tentang cara membina perkhidmatan bahagian belakang akaun awam WeChat menggunakan Node.js

Penjelasan mendalam tentang cara membina perkhidmatan bahagian belakang akaun awam WeChat menggunakan Node.js

PHPz
PHPzasal
2023-04-05 09:08:561107semak imbas

1. Kata Pengantar

Kini, WeChat telah menjadi saluran penting bagi banyak syarikat dan individu untuk mengendalikan media kendiri, dan membina perkhidmatan bahagian belakang akaun awam WeChat yang cekap dan stabil telah menjadi satu keperluan. Sebagai bahasa back-end yang ringan dan cekap, Node.js telah mendapat perhatian yang meluas untuk keupayaan IO tak segerak yang berkuasa dan kecekapan pembangunan. Artikel ini akan memperkenalkan dengan cara yang mudah dan mendalam cara menggunakan Node.js untuk membina perkhidmatan bahagian belakang akaun rasmi WeChat.

2. Persediaan

Sebelum bermula, anda perlu menyediakan alatan dan persekitaran berikut:

  • Node.js: Sila pergi ke tapak web rasmi Node.js untuk memuat turun dan memasang;
  • Akaun awam WeChat: Sila pergi ke platform awam WeChat untuk mendaftar dan memohon hak pembangun
  • Editor fail: Visual Studio Code disyorkan.

3. Bina perkhidmatan bahagian belakang akaun awam WeChat

  1. Buat projek

Pertama, cipta folder untuk menyimpan projek. Kemudian, masukkan folder dalam baris arahan dan laksanakan arahan berikut:

npm init

Selepas pelaksanaan, ikut gesaan untuk memasukkan nama projek, versi, penerangan dan maklumat lain untuk melengkapkan permulaan projek.

  1. Pasang kebergantungan

Laksanakan arahan berikut untuk memasang kebergantungan yang diperlukan:

npm install express request xml2js

Antaranya, express ialah rangka kerja web yang dibangunkan oleh Node .js , request ialah pustaka yang merangkum permintaan HTTP dan xml2js ialah pustaka yang menukar XML kepada data JSON.

  1. Konfigurasikan penghalaan

Dalam direktori akar projek, buat fail bernama index.js dan tambah kandungan berikut pada fail:

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(); // 校验失败,返回空响应
});

Kod di atas melaksanakan pengesahan akses akaun awam WeChat Untuk kaedah pelaksanaan tertentu, sila rujuk dokumentasi laman web rasmi.

  1. Memproses mesej WeChat

Dalam direktori akar projek, cipta fail bernama message.js untuk memproses mesej WeChat. Tambahkan kandungan berikut pada fail:

/**
 * 解析 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();
  });
};

Kod di atas menghuraikan mesej daripada akaun rasmi WeChat dan mengembalikan mesej balasan yang sepadan selepas diproses.

  1. Mulakan perkhidmatan

Dalam index.js, tambahkan kod berikut untuk memulakan perkhidmatan:

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. Perkhidmatan pengesahan

Selepas memulakan perkhidmatan, anda boleh mengesahkannya dengan mengkonfigurasi alamat pelayan di latar belakang akaun rasmi WeChat. Selepas pengesahan berjaya, anda boleh menggunakan alamat ini sebagai alamat perkhidmatan bahagian belakang akaun rasmi WeChat. Pada masa yang sama, anda boleh nyahpepijat dalam kod untuk memastikan mesej boleh dihantar dan dibalas seperti biasa.

4. Ringkasan

Artikel ini memperkenalkan cara menggunakan Node.js untuk membina perkhidmatan bahagian belakang akaun rasmi WeChat, meliputi dua aspek: pengesahan akses dan pemprosesan mesej. Melalui artikel ini, saya percaya pembaca boleh memahami dengan cepat dan menguasai prinsip asas dan kaedah pelaksanaan menggunakan Node.js untuk membina perkhidmatan backend WeChat.

Atas ialah kandungan terperinci Penjelasan mendalam tentang cara membina perkhidmatan bahagian belakang akaun awam WeChat menggunakan Node.js. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn