微信测试号接入微信公众开发,并且在向测试公众号发送消息后,公众号收到之后自动回复功能

  • 创建一个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相关推荐

  1. 微信公众号如何接入微信机器人

    微信对话开放平台文档 官方文档 平台简介 微信对话开放平台开放了微信在对话领域积累多年的的智能对话技术,开发者及非开发者可简单.快速地搭建智能对话机器人(智能客服), 并接入公众号.小程序等,为业务赋 ...

  2. 微信公众号之接入微信公众号服务器开发(一)

    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 一丶概述 公众号与公众平台 1. 微信账号类型 个人号 公众号 订阅号 服务号 企业号 2. 公众号 微信公众号主要面向名人.政府 ...

  3. wechat-0010,微信公众号,接入微信公众平台

    demo:https://github.com/wenrongyao/wechat-demo 接入准备: 1.有一个能在公网上访问的项目 可以用内网穿透(推荐使用natapp),微信接入必须使用80端 ...

  4. 公众号使用微信客户,微信公众号如何接入微信客服

    为什么要写这篇文章? 网上有很多资料都是说的怎么设置微信客服,但是没有说怎么使用,给初次接触者很多困惑,我就在一个很简单的问题上,浪费了一天的时间,为了使大家节约更多的时间所以写了. 微信公众号如何开 ...

  5. 微信公众号 测试号 申请

    微信公众号测试号申请 无需公众帐号.快速申请接口测试号:直接体验和测试公众平台所有高级接口 https://developers.weixin.qq.com/doc/offiaccount/Basic ...

  6. 微信公众平台开发软件测试工具,微信开发系列——使用公众号测试号测试公众号webAPP...

    这是自己在学习和使用公众号记录下的傻瓜式测试号使用内容.基本一看就会,事无巨细.以免自己哪天忘了还要重新摸索. 衢山岛旅行合影 一.申请测试号 首先要有微信公众平台的账号(如何申请等这里省略),进入开 ...

  7. 手把手教你最近很火的 微信公众号测试号推送消息

    最近有很多小伙伴在尝试做消息推送,今天详细教程它来啦!!! 过程不太复杂,跟着一步一步做就可以实现. 没时间的话,先收藏,等有时间了慢慢学! 第一步:注册微信公众号测试号 1.利用下面的链接注册一个微 ...

  8. 微信公众号(测试号)消息模板推送

    微信公众号(测试号)消息模板推送 源码地址 https://github.com/panjianlong13/Weixin-PushMessage 微信测试号配置 登录到微信公众平台接口测试账号申请U ...

  9. 【分享】微信公众号在 “集简云平台“ 集成应用的常见问题与解决方案

    "function category of API need be confirmed by component rid"错误 是由于使用未认证的微信公众号或者个人微信公众号没有此 ...

  10. 实现ChatGPT项目(可商用:web端、接入qq群、公众号、企业微信)

    前言 ChatGPT是一款非常流行的社交媒体应用程序,它可以让用户在全球范围内与其他用户进行交流和互动,分享他们的想法.观点和经验.ChatGPT的成功得益于它的许多独特的功能和优势.它涵盖了各种各样 ...

最新文章

  1. SELECT INTO 和 replace into SELECT 两种表复制语句
  2. python动态心形代码-Python数学方程式画心型图案源码示例
  3. Tool之curl:curl的简介、安装、使用方法之详细攻略
  4. CountDownLatch闭锁
  5. PL/SQL Developer报错提示 Not logged on 问题完美解决方案
  6. 【java】java开发中的23种设计模式详解
  7. 如何处理Android Studio 上面关于 update 和 commit 小箭头的消失
  8. 201521123059 《Java程序设计》第八周学习总结
  9. python没有用_你可能没有在Python3中使用但却应该使用的东西
  10. 一键加速去不掉加锁的_十年斑点去不掉,大妈巧用蜂蜜擦脸,皮肤白净还年轻...
  11. 2000坐标系转经纬度工具_【Leaflet开发】L.CRS + 搞定Leaflet多坐标系拓展
  12. BZOJ 1037 [ZJOI2008]生日聚会Party(单调DP)
  13. Uva 10590 Boxes of Chocolates Again
  14. 人工智能、区块链、算法...这30个大数据热词你知道吗?
  15. Linux中select函数学习及实例笔记
  16. 简单读取winfrom资源文件
  17. 嵌入式开发-Telink芯片-入门介绍
  18. 使用POI读写word doc文件
  19. 淘宝奇门对接(淘宝订单加密改造)
  20. 耳朵(一)Linux简述

热门文章

  1. 中国独角兽上市潮,爱奇艺优信小米值得投资吗?
  2. opencv实现超像素分割(slic实现)
  3. 想搭建一个手游平台怎么做?需要了解哪些细节?
  4. dcs world f15c教学_苏教版译林牛津高中英语必修1-5选修6-11课文听力MP3音频字幕课件教案试题电子课本优质课教学视频...
  5. FPGA学习笔记_图像处理3_FPGA实现中值滤波算法
  6. 图像压缩编码码matlab实现——DM编码
  7. 什么是线性同余法c语言,C语言线性同余法产生随机数
  8. java 开源 dht_P2P中DHT网络原理
  9. 睡眠分期--深度学习算法
  10. 《华为工作法》学习笔记