微信公众号开发之流式数据读取
2023-09-11 14:19:18 时间
用户发送信息到微信服务器,然后微信服务器向我们的服务器发送信息,这个信息属于一个流式的数据,我们要写一些方法处理这个数据
- 我们新建
libs
文件夹,在文件夹下新建utils.js
的文件,这个文件中主要写一些工具方法,比如读取流式数据的方法
接收流式数据
utils.js
module.exports = {
getUserDataAsync(req){
// 流式文件内容获取
return new Promise((resolve,reject) => {
let data = ""
// 拼接流式文件的数据
req.on("data",userData => {
// 因为是二进制数据我们需要转化一下
data += userData.toString()
})
req.on("end",() => {
// 数据获取完毕
resolve(data)
})
})
}
}
auth.js
const { getUserDataAsync } = require("../libs/utils")
module.exports = () => {
return async (req, res, next) => {
...
if (req.method === "GET") {
...
} else if (req.method === "POST") {
// POST用于接收用户发送的消息
...
// 获取微信发送的消息
const data = await getUserDataAsync(req)
}
}
}
当我们发送信息进行测试的时候就会发现,他是一个xml文件
<xml>
<ToUserName><![CDATA[gh_844f522f3f29]]></ToUserName> // 开发者的id
<FromUserName><![CDATA[ocnfW5u-VnhOrL3yfy69g1mtod7Q]]></FromUserName> // 用户的openid
<CreateTime>1654306028</CreateTime> // 发送的时间戳
<MsgType><![CDATA[text]]></MsgType> // 发送的消息类型
<Content><![CDATA[微信公众号测试]]></Content> // 发送的内容
<MsgId>23683969114016066</MsgId> // 消息id 微信服务器默认保存3天的用户数据
</xml>
解析流式数据
- 我们需要将上面的xml对象解析成js对象
- 这里我们就需要用到一个包
xml2js
点击,我们主要用到了他的parseString
方法
npm install xml2js
utils.js
const {parseString} = require("xml2js")
module.exports = {
...
parseXmlData(xmlData){
// 解析xml为js对象
return new Promise((resolve,reject) => {
parseString(xmlData,{trim:true},(err,data) => {
if(!err){
resolve(data)
}else{
reject(err)
}
})
})
}
}
auth.js
const { getUserDataAsync, parseXmlData } = require("../libs/utils")
module.exports = () => {
...
if (req.method === "GET") {
...
} else if (req.method === "POST") {
...
// 获取微信发送的消息
const xml_data = await getUserDataAsync(req)
const user_data = await parseXmlData(xml_data)
console.log(user_data);
}
}
}
当我们发送消息的时候经过解析,他是这样的
格式化数据
因为返回的数据还是有点复杂,我们统一格式化一下
utils.js
module.exports = {
...
formatMsg(data){
const result = {}
const xmlOjb = data.xml
if (typeof xmlOjb === "object"){
for(_key in xmlOjb){
const _value = xmlOjb[_key]
// MsgId: [ '23683987267420534' ]
if(Array.isArray(_value) && _value.length > 0){
result[_key] = _value[0]
}
}
}
return result
}
}
const { getUserDataAsync, parseXmlData, formatMsg } = require("../libs/utils")
module.exports = () => {
return async (req, res, next) => {
if (req.method === "GET") {
...
} else if (req.method === "POST") {
...
// 获取微信发送的消息
const xml_data = await getUserDataAsync(req)
let user_data = await parseXmlData(xml_data)
user_data = formatMsg(user_data)
console.log(user_data);
}
}
}
当我们发送消息的时候经过格式化,他是这样的
相关文章
- python3 爬虫实战 :用 Appium 抓取手机 app 微信朋友圈的数据
- ❤️UI自动化轻松解决微信手工群发消息的烦恼❤️
- c# .net http Post请求 发送Json数据,经过微信签名测试有效
- 【微信小程序】-- 自定义组件 - 数据监听器 - 案例 (三十五)
- 【微信小程序】--JSON 配置文件作用(三)
- 微信小程序轮子 - 外卖点餐左右联动界面完整源码(类似美团饿了么点餐界面)
- 微信小程序轮子 - 瀑布流布局+数据懒加载(可替换图片瀑布流懒加载 / 视频瀑布流懒加载等等)
- 微信小程序 - 最好用的多选功能,列表点击选中并且高亮显示(支持全选 / 反选,回显设置默认选择数据的功能,点击选中并改变样式,点击选中并高亮显示效果)详细教程功能源码组件插件
- 微信平台首份数据研究报告(40PPT)
- 微信小程序通过api接口将json数据展现到小程序示例
- 微信小程序组件 模块化错和叹号
- 微信调用照相拍照等 js 接口的权限配置 和 照片上传和下载实现
- 微信小程序用户数据解密
- 微信上传图文消息素材40007,invalid media_id hint
- 用c#开发微信 (10) JS-SDK 基本用法- 分享接口“发送到朋友”
- 微信小程序开发规范文档-wxss代码规范
- 微信小程序反编译简易教程与wxappUnpacker使用
- 微信小程序封装一个带有图片的Tab栏
- 微信小程序丨将溢出的文本用省略号代替的方法
- 微信小程序 scroll-view 填满剩余可用高度
- 微信小程序请求wx.request数据,渲染到页面
- 微信小程序显示html格式内容(wxParse使用及循环解析数据渲染)
- 微信小程序实训|基于云数据库的语文听写工具
- 在微信小程序上做一个「博客园年度总结」:使用redis存储数据
- 微信小程序学习第7天——自定义组件(创建与引用、方法和属性、数据监听器、插槽)
- 【微信小程序】数据与界面UI不同步,不能直接操作Page.data
- 微信小程序- wx.request请求不到数据