算是个系列内容吧,最终要实现的是将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消息相关推荐

  1. uniCloud开发公众号:三、生成带参数二维码

    算是个系列内容吧,最终要实现的是将uniCloud作为后端完成"扫码关注公众号后完成网站登录" 将要涉及的内容可能包括: 0.准备工作:各种配置.基础搭建 1.接受.解析.组装xm ...

  2. uniCloud开发公众号:六、解析不同情况下用户扫码后微信推送的事件并完成登录

    算是个系列内容吧,最终要实现的是将uniCloud作为后端完成"扫码关注公众号后完成网站登录" 将要涉及的内容可能包括: 0.准备工作(本节) 1.接受并解析xml消息 2.请求a ...

  3. 微信开发学习总结(三)——开发微信公众号的最基本功能——普通消息的接收和回复...

    2019独角兽企业重金招聘Python工程师标准>>> 一.微信公众平台消息管理接口介绍 要实现微信公众号的普通消息的接收和回复,我们需要先熟悉微信公众平台API中消息接口部分,点此 ...

  4. 微信开发学习总结(三)——开发微信公众号的最基本功能——普通消息的接收和回复

    在上篇<微信开发学习总结(二)--微信开发入门>我们介绍了微信公众平台的基本原理,如何接入微信公众号,如何保持access_token的长期有效性以及进行了简单的文本消息测试,本篇再来具体 ...

  5. php开发微信公众号,接收粉丝过来的小视频

    微信有一个小视频功能, 可以用来拍摄一段10秒的视频. 小视频的特点是实时性强, 可以做到即拍即发. 根据这一特性, 可以应用的场景包括:打卡,实时交通反馈等等- php开发微信公众号,接收粉丝过来的 ...

  6. 微信三方代开发公众号消息管理-群发消息

    三方代开发公众号消息管理-群发消息 微信公众平台为订阅号提供了每天1条的群发权限,为服务号提供每月(自然月)4条的群发权限.而对于某些具备开发能力的公众号运营者,可以通过高级群发接口,实现更灵活的群发 ...

  7. 用 Python 和 werobot 框架开发公众号

    From:用 Python 和 werobot 框架开发公众号:https://www.jianshu.com/p/a517746a900f WeRoBot 官方文档 :https://werobot ...

  8. react开发公众号踩坑日志

    最近在用react开发一个公众号产品.以前没有过开发公众号的经验,在这里记录一下过程中踩过的坑. 这个项目是前后端开发的.本篇文章只站在前端的视角,希望给大家一个参考 一.授权回调 微信授权过程 进入 ...

  9. php开发公众号素材管理总结

    微信开发中, 要使用的素材都必须先上传到微信服务器, 才能在你的内容中使用, 素材管理可以说是重要的基础, 后面的开发需要用到这节课程实现的功能, 建议同学们看完后, 一定要跟着视频, 把代码敲一遍- ...

最新文章

  1. 【Python】 Web开发框架的基本概念与开发的准备工作
  2. 上班第一天,Myeclipse 2014上SVN部署以及maven 配置
  3. hdu4616_Game_树形DP
  4. 读文件到十六进制的函数(Delphi 7 下可用) - 回复 峰哥!!! 的问题
  5. Mac字体管理工具: RightFont
  6. Flutter之播放视频
  7. GIT在WINDOWS/LINUX下载的源码,回车换行有差异
  8. 【2019杭电多校第二场1009=HDU6599】I Love Palindrome String(回文树的fail树)
  9. 网易视频云直播常见问题解析
  10. CSS-div垂直居中方法总结
  11. 微信公众号运营推广方案分享
  12. Adobe Photoshop 7.0.1 简体中文版注册码
  13. pyhton爬虫爬取100首诗
  14. SLAM中的边缘化舒尔补
  15. 程序员坐行李箱迎寒风编码 2 小时,目击者:激励我写了一篇论文!
  16. 华为 A800-9000 服务器 离线安装MindX DL 可视化环境+监控
  17. matlab特征提取之欧拉数
  18. 从哪里租vps远程桌面服务器,vps远程桌面服务器租一个
  19. 12月1日~17日技术读报
  20. Reasoning with Sarcasm by Reading In-between

热门文章

  1. 计嵌 廖峻 20178303040 C++作业
  2. 寻找那些神奇的自幂数---C语言
  3. gamemaker学习笔记:跳跃
  4. Canvas--文字
  5. XiunoBBS插件大全,可视化XiunoBBS插件
  6. 分享几个关于geoJson的网站(乡镇级地图绘制)
  7. (转载)一次Linux系统被攻击的分析过程
  8. Mackbook 外接移动硬盘无法写入数据(三种解决办法)
  9. SQL Server 2005全文检索技术在网站上的应用实录
  10. 关于WM_COMMAND与WM_NOTIFY