生活随笔
收集整理的這篇文章主要介紹了
微信公众号测试号接入微信公众平台开发----node.js
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
微信測試號接入微信公眾開發,并且在向測試公眾號發送消息后,公眾號收到之后自動回復功能
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:...");
});
module
.exports
= {appID: "xxx",appsecret: "xxx",token: "xxx",
};
安裝sha1 模塊 npm安裝 我安裝的版本– "sha1": "^1.1.1",
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 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
) {const xmlinitData
= await getXmlData(req
);const dataJs
= parseXmlData(xmlinitData
);const formmat
= formattingData(dataJs
);console
.log(formmat
, "格式化");const bRep
= buildRep(formmat
);const finaData
= concreteData(bRep
);res
.end(finaData
);
const { parseString
} = require("xml2js");
module
.exports
= {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
);});});},parseXmlData(xmlData) {let initdata
= "";parseString(xmlData
, { trim: true }, (err, data) => {if (!err
) {initdata
= data
;} else {console
.log("解析失敗");initdata
= "err";}});return initdata
;},formattingData({ xml }) {let mesData
= {};for (let key
in xml
) {const value
= xml
[key
];mesData
[key
] = value
[0];}return mesData
;},
};
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
;
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的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。