一、前言
如今,微信已經成為了許多公司和個人營運自媒體的重要管道,而搭建一個高效穩定的微信公眾號後台服務就成為了剛需。 Node.js 作為一種輕量高效的後端語言,以其強大的非同步 IO 能力和開發效率受到了廣泛關注。這篇文章將深入淺出地介紹如何使用 Node.js 建構一個微信公眾號後台服務。
二、準備工作
在開始前,需要準備以下工具與環境:
三、建立微信公眾號後台服務
首先,建立一個資料夾,用來存放專案。然後,在命令列中進入該資料夾,並執行以下命令:
npm init
執行後,按照提示依序輸入項目名稱、版本、描述等資訊即可完成專案初始化。
執行下列指令安裝必要的依賴:
npm install express request xml2js
其中,express 是一款Node.js 開發的Web 框架,request是一個封裝了HTTP 請求的函式庫,xml2js 是一個將XML 轉為JSON 資料的函式庫。
在專案根目錄下,建立一個名為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(); // 校验失败,返回空响应 });
以上程式碼實現了微信公眾號的存取驗證,具體實作方式可參考官網文件。
在專案根目錄下,建立一個名為 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(); }); };
以上程式碼解析了來自微信公眾號的訊息,處理後傳回對應的回覆訊息。
在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);
啟動服務後,可以透過在微信公眾號後台設定伺服器位址來進行驗證。驗證成功後,即可使用該地址作為微信公眾號的後台服務地址。同時,可以在程式碼中進行調試,確保訊息能夠正常地傳遞和回應。
四、總結
這篇文章介紹如何使用 Node.js 建立微信公眾號後台服務,涵蓋了存取驗證和訊息處理兩個面向。透過此文,相信讀者能夠快速了解並掌握使用 Node.js 搭建微信後台服務的基本原理和實作方式。
以上是深入淺出Node.js搭建微信公眾號後台服務的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!