uniCloud开发公众号:一、接收、解析、组装xml消息
算是个系列内容吧,最终要实现的是将uniCloud作为后端完成“扫码关注公众号后完成网站登录”
将要涉及的内容可能包括:
0.准备工作:各种配置、基础搭建
1.接受并解析xml消息(本节)
2.请求access_token并缓存
3.生成带参数二维码
4.引入、封装redis缓存方法
5.引入、配置、初始化unipush
6.解析不同情况下用户扫码时推送的事件并完成登录
系列内容全部基于uniCloud+vk-uniCloud(云函数路由)+uni-app
编辑器HbuilderX最新版
云空间为阿里云
公众号为认证服务号
笔者实际上也已经做过一些公众号的后端开发了,但此前是php语言,基本上都是用easywechat来完成接口的对接,现在没有easywechat这个神器可以用了, 只能自己去看微信官方那翔一样的文档
。
好了,废话不多说,本节主要来看一下,如何在uniCloud环境中解析、拼装xml消息。
开始之前,先放一个官方对于云公共模块
的说明,没用过的可以先看看,下边就不赘述了。
一、新建xml2js云公共模块
这一步的目的是把npm包抽出来弄成单独的模块,这样给云函数用的时候,可以稍微降低一些启动速度。也比较方便给不同的云函数依赖。
1)引入xml2js
,打包为云公共模块
首先,在common
目录上右击,选择新建公共模块
,然后输入名称后即可新建一个基础的目录。
比如nb-xml2js
,这里建议自己弄个前缀,否则会冲突。
其次,在新建好的模块上右击,选择使用命令行打开所在目录
。
接着,在控制台中使用命令,引入完成xml2js的引入
npm i xml2js
最终,如下图所示:
2)编写云公共模块代码
这里直接贴代码了,官方也有说明,只用到了parseStringPromise
这一个方法:
var xml2js = require('xml2js');
module.exports = async (xml) => {// 文本消息let obj = await xml2js.parseStringPromise(xml, { explicitArray: false })return obj.xml;
}
完成后,直接在nb-xml2js
文件夹上右击,选择上传云公共模块
同时,在router
云函数目录上也右击,选择管理云函数依赖
,勾选你刚刚上传的这个云函数,点击确定。
二、在云函数中完成xml解析
再次说明,本文使用了vk-unicloud框架,写法和uniCloud官方不同,请自行解决差异。
1)引用云公共模块
'use strict';
const xml2js = require('nb-xml2js'); // 这里这么写
module.exports = {// 省略--------
2)解析xml消息
main: async (event) => {// 省略--------let xml = originalParam.event.body;// 解析XML内容let xmlObj = await xml2js(xml);let {ToUserName, // appidFromUserName, // openidMsgType, // text,eventEventKey,} = xmlObj;
// 省略--------
}
这样,我们就接收到了微信服务器推送过来的消息,其中一般包含了以上几个字段。
后续这些字段都会用到,我们后边再说。
三、拼装xml消息返回
实际上现在我们已经可以返回消息了,然后给新手提示一下,这里用的是返回
而不是发送
,就是因为是一个被动的状态,只有用户主动
进行某个操作,让服务器收到消息时,才可以返回一条消息。
这里我在/cloudfunctions/router/util/pubFunction.js
中封装了这个纯文本消息
的方法:
/*** 组装XML格式数据* pubFun.createXmlTextMsg();*/// 这里要注意,tousername = 用户openid;// content=消息正文// fromusername 不是你的appid,而是公众号id,在后台可以看到,微信推送的那个xml内容里也有
pubFun.createXmlTextMsg = (tousername, content, fromusername = '可以给一个默认的') => {var msg = '<xml>' +'<ToUserName><![CDATA[' + tousername + ']]></ToUserName>' +'<FromUserName><![CDATA[' + fromusername + ']]></FromUserName>' +'<CreateTime>' + parseInt(new Date().valueOf() / 1000) + '</CreateTime>' +'<MsgType><![CDATA[text]]></MsgType>' +'<Content><![CDATA[' + content + ']]></Content>' +'</xml>';return msg;
}
云函数中这样用
msgContent = await pubFun.createXmlTextMsg(FromUserName, '测试~');
res.body = msgContent;
return res;
uniCloud开发公众号:一、接收、解析、组装xml消息相关推荐
- uniCloud开发公众号:三、生成带参数二维码
算是个系列内容吧,最终要实现的是将uniCloud作为后端完成"扫码关注公众号后完成网站登录" 将要涉及的内容可能包括: 0.准备工作:各种配置.基础搭建 1.接受.解析.组装xm ...
- uniCloud开发公众号:六、解析不同情况下用户扫码后微信推送的事件并完成登录
算是个系列内容吧,最终要实现的是将uniCloud作为后端完成"扫码关注公众号后完成网站登录" 将要涉及的内容可能包括: 0.准备工作(本节) 1.接受并解析xml消息 2.请求a ...
- 微信开发学习总结(三)——开发微信公众号的最基本功能——普通消息的接收和回复...
2019独角兽企业重金招聘Python工程师标准>>> 一.微信公众平台消息管理接口介绍 要实现微信公众号的普通消息的接收和回复,我们需要先熟悉微信公众平台API中消息接口部分,点此 ...
- 微信开发学习总结(三)——开发微信公众号的最基本功能——普通消息的接收和回复
在上篇<微信开发学习总结(二)--微信开发入门>我们介绍了微信公众平台的基本原理,如何接入微信公众号,如何保持access_token的长期有效性以及进行了简单的文本消息测试,本篇再来具体 ...
- php开发微信公众号,接收粉丝过来的小视频
微信有一个小视频功能, 可以用来拍摄一段10秒的视频. 小视频的特点是实时性强, 可以做到即拍即发. 根据这一特性, 可以应用的场景包括:打卡,实时交通反馈等等- php开发微信公众号,接收粉丝过来的 ...
- 微信三方代开发公众号消息管理-群发消息
三方代开发公众号消息管理-群发消息 微信公众平台为订阅号提供了每天1条的群发权限,为服务号提供每月(自然月)4条的群发权限.而对于某些具备开发能力的公众号运营者,可以通过高级群发接口,实现更灵活的群发 ...
- 用 Python 和 werobot 框架开发公众号
From:用 Python 和 werobot 框架开发公众号:https://www.jianshu.com/p/a517746a900f WeRoBot 官方文档 :https://werobot ...
- react开发公众号踩坑日志
最近在用react开发一个公众号产品.以前没有过开发公众号的经验,在这里记录一下过程中踩过的坑. 这个项目是前后端开发的.本篇文章只站在前端的视角,希望给大家一个参考 一.授权回调 微信授权过程 进入 ...
- php开发公众号素材管理总结
微信开发中, 要使用的素材都必须先上传到微信服务器, 才能在你的内容中使用, 素材管理可以说是重要的基础, 后面的开发需要用到这节课程实现的功能, 建议同学们看完后, 一定要跟着视频, 把代码敲一遍- ...
最新文章
- 【Python】 Web开发框架的基本概念与开发的准备工作
- 上班第一天,Myeclipse 2014上SVN部署以及maven 配置
- hdu4616_Game_树形DP
- 读文件到十六进制的函数(Delphi 7 下可用) - 回复 峰哥!!! 的问题
- Mac字体管理工具: RightFont
- Flutter之播放视频
- GIT在WINDOWS/LINUX下载的源码,回车换行有差异
- 【2019杭电多校第二场1009=HDU6599】I Love Palindrome String(回文树的fail树)
- 网易视频云直播常见问题解析
- CSS-div垂直居中方法总结
- 微信公众号运营推广方案分享
- Adobe Photoshop 7.0.1 简体中文版注册码
- pyhton爬虫爬取100首诗
- SLAM中的边缘化舒尔补
- 程序员坐行李箱迎寒风编码 2 小时,目击者:激励我写了一篇论文!
- 华为 A800-9000 服务器 离线安装MindX DL 可视化环境+监控
- matlab特征提取之欧拉数
- 从哪里租vps远程桌面服务器,vps远程桌面服务器租一个
- 12月1日~17日技术读报
- Reasoning with Sarcasm by Reading In-between