日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

微信公众号测试号接入微信公众平台开发----node.js

發布時間:2024/8/1 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 微信公众号测试号接入微信公众平台开发----node.js 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

微信測試號接入微信公眾開發,并且在向測試公眾號發送消息后,公眾號收到之后自動回復功能

  • 創建一個express 項目
  • App.js
/*** express 入門程序* 第一個程序,認識express開發步驟*/ // 引入express const express = require("express"); const sha1 = require("sha1"); const auths = require("./wechat/auth"); const app = express(); app.use(express.urlencoded({ extended: true })); app.use(auths()); // 啟動應用 app.listen(8052, (err) => {console.log("服務已經在http://localhost:..."); }); /** 1.* auth.js* 該模塊處理請求* 1.驗證服務器有效性* 2.獲取用戶輸入信息*/ /**2* utils.js ,解析收到的數據* // 該模塊用于解析數據*//**3* replyCon.js* // 維護一個對象*具體業務邏輯或者說發送消息內容*/ /**4* replyTem.js* 發送信息*/
  • 新建config/index.js
// 存儲開發者機密 信息配置 module.exports = {appID: "xxx",appsecret: "xxx",token: "xxx", }; // 這里的配置要與公眾平臺一致
  • 新建wechats/auth.js

安裝sha1 模塊 npm安裝 我安裝的版本– "sha1": "^1.1.1",

/*** 該模塊處理請求* 1.驗證服務器有效性* 2.獲取用戶輸入信息*/ const config = require("../config/index"); const sha1 = require("sha1"); const { getXmlData, parseXmlData, formattingData } = require("../tools/utils"); const { buildRep } = require("../reply/replyCon"); const { concreteData } = require("../reply/replyTem"); module.exports = () => {return async (req, res, next) => {// 獲取參數const { signature, echostr, timestamp, nonce } = req.query;console.log(req.query, "00");const { token } = config;// 排序后// let sortArr = [timestamp, nonce, token].sort();// 拼接字符串let sha1Str = sha1([timestamp, nonce, token].sort().join("").toString());// 校驗// 驗證服務器有效性if (req.method == "GET") {if (sha1Str === signature) {res.end(echostr);return;} else res.end("111");} else if (req.method == "POST" && sha1Str === signature) {// 普通消息請求// console.log(req.body);const xmlinitData = await getXmlData(req);// 轉換jsconst dataJs = parseXmlData(xmlinitData);// console.log(dataJs);// 格式化js數據const formmat = formattingData(dataJs);console.log(formmat, "格式化");const bRep = buildRep(formmat);const finaData = concreteData(bRep);res.end(finaData);
  • 新建 tools/utils.js
// 該模塊用于解析數據 const { parseString } = require("xml2js"); module.exports = {// 獲取微信服務器的數據/**** @param {*} req* @returns*/getXmlData(req) {return new Promise((resolve, rejext) => {let xmlData = "";req.on("data", (data) => {console.log(data.toString());xmlData += data.toString();});req.on("end", () => {resolve(xmlData);});});},// 解析數據/**** @param {*} xmlData* @returns*/parseXmlData(xmlData) {let initdata = "";parseString(xmlData, { trim: true }, (err, data) => {if (!err) {initdata = data;} else {console.log("解析失敗");initdata = "err";}});return initdata;},// 格式化數據/**** @param {*} param0* @returns*/formattingData({ xml }) {let mesData = {};for (let key in xml) {const value = xml[key];mesData[key] = value[0];}return mesData;}, };
  • 新建reply/replyCon.js 模塊
// 維護一個對象// 具體業務邏輯 /**** @param {*} userData* @returns*/ function buildRep(userData) {let obj = {ToUserName: userData.ToUserName,FromUserName: userData.FromUserName,CreateTime: Date.now(),}; //解析到'你好'時if (userData.Content == "你好") {obj.MsgType = "text";obj.Content = "你好";return obj; // 解析到'圖片'時} else if (userData.MsgType == "image") {obj.MsgType = "image";obj.MediaId = userData.MediaId;return obj; // 語音} else if (userData.MsgType == "voice") {obj.MsgType = "voice";obj.MediaId = userData.MediaId;return obj; // 音樂} else if (userData.Content == "音樂") {obj.MsgType = "music";obj.Title = "麻雀";obj.Description = "李榮浩的歌";obj.MusicUrl = "https://music.163.com/#/song?id=1407551413&market=baiduqk";obj.HQMusicUrl ="https://music.163.com/#/song?id=1407551413&market=baiduqk";obj.ThumbMediaId ="GWuXUezvYmjWy8L-QGCJ7a7mtu0rT2WDsvSgRs_tAky6ykoQn5Ew_BZJDBcRTTB4";return obj; // 收到圖文時} else if (userData.Content == "圖文") {obj.MsgType = "news";obj.ArticleCount = 2;obj.item = [];for (var i = 0; i < obj.ArticleCount; i++) {obj.item[i] = {};obj.item[i].Title = "中秋國慶能出游返鄉嗎?多地明確了!";obj.item[i].Description ="近期,河南多地發布了“致在外老鄉的一封信”,倡導中秋假期非必要不返鄉。例如,河南鄧州就在信中提到,“跨區域往返流動,接觸人員復雜,感染風險增大,希望您近期暫緩返鄉,盡量留在當地賞月過中秋”。";obj.item[i].PicUrl ="https://t15.baidu.com/it/u=1218607176,3524458466&fm=179&app=42&size=w931&n=0&f=PNG?s=55B28A744662E75B1C215C8F0300A0A1&sec=1662310800&t=c8fdbe009358e58a5d3bcecb8988271f";obj.item[i].Url ="https://www.baidu.com/link?url=4Eh_iAY3maG33EwaKPEVzIdKfZ6-6iBXG4RziOTh7uiU8eS5JYRSW6aFpL2T4JXRC1BjCHK6y-Pa6GeufZ9BUK&wd=&eqid=9d31cc3a000bc2a70000000363130430";}return obj;} else {obj.MsgType = "text";obj.Content = userData.Content;return obj;} } exports.buildRep = buildRep;
  • 新建reply/replyTem
// 發送的信息function concreteData(replaObj) {let repStr = `<xml><ToUserName><![CDATA[${replaObj.FromUserName}]]></ToUserName><FromUserName><![CDATA[${replaObj.ToUserName}]]></FromUserName><CreateTime>${Date.now()}</CreateTime><MsgType><![CDATA[${replaObj.MsgType}]]></MsgType>`;if (replaObj.MsgType == "text") {repStr += `<Content><![CDATA[${replaObj.Content}]]></Content></xml>`;} else if (replaObj.MsgType == "image") {repStr += ` <Image><MediaId><![CDATA[${replaObj.MediaId}]]></MediaId></Image></xml>`;} else if (replaObj.MsgType == "voice") {repStr += `<Voice><MediaId><![CDATA[${replaObj.MediaId}]]></MediaId></Voice></xml>`;} else if (replaObj.MsgType == "music") {repStr += `<Music><Title><![CDATA[${replaObj.Title}]]></Title><Description><![CDATA[${replaObj.Description}]]></Description><MusicUrl><![CDATA[${replaObj.MusicUrl}]]></MusicUrl><HQMusicUrl><![CDATA[${replaObj.HQMusicUrl}]]></HQMusicUrl><ThumbMediaId><![CDATA[${replaObj.ThumbMediaId}]]></ThumbMediaId></Music></xml>`;} else if (replaObj.MsgType == "news") {repStr += ` <ArticleCount>${replaObj.ArticleCount}</ArticleCount><Articles>`;for (let i = 0; i < replaObj.item.length; i++) {repStr += `<item><Title><![CDATA[${replaObj.item[i].Title}]]></Title><Description><![CDATA[${replaObj.item[i].Description}]]></Description><PicUrl><![CDATA[${replaObj.item[i].PicUrl}]]></PicUrl><Url><![CDATA[${replaObj.item[i].Url}]]></Url></item>`;}repStr += `</Articles></xml>; `;}return repStr; } exports.concreteData = concreteData;

接口配置信息修改 的url我做了映射和node.js的地址保持一致了

總結

以上是生活随笔為你收集整理的微信公众号测试号接入微信公众平台开发----node.js的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。