微信小程序-云开发实现接收公众号事件推送(不同主体)

一、前言

通常情况下,小程序如果需要进行留粉或者随时下发实时通知给用户,都会搭配一个服务号进行开发,同时,随着业务的增长以及功能的迭代,可能还需要对服务号进行一些开发,例如拉新(邀请用户关注)活动等。

选择云开发后,在同主体(即小程序与服务号同一主体)的情况下可以很方便的与服务号进行联合开发,不需要额外的代码编写,只需要进行配置即可接收服务号的事件推送(关注事件、公众号消息等)。

但是在不同主体的情况下,就不能使用环境共享来进行公众号的事件接收,因此本文实现的是在非同主体下的公众号事件接收。
当然,同主体也是可以使用本文中的方式去实现,但是没必要,建议直接使用云开发提供的能力即可。

二、实现流程

这里就不说服务号、小程序的注册、认证以及云开发环境开通的流程了。直接进入核心的部分。

2-1、创建一个云函数

首先,我们需要创建一个云函数,作为接收事件的处理函数,可以理解为一个服务端的接口。
命名随意,但是后面的步骤保持一致即可。
这里我的命名为:publicEventHttp
在这里插入图片描述

2-2、开启云函数http访问服务

第二步是对上面创建的云函数开启公网访问,开启后会得到一个网址,这个网址就会作为在公众号的服务器配置中的回调地址。

前往腾讯云官网登录,选择小程序公众号方式登录。
在这里插入图片描述

扫码登录即可(注意:这里必须要小程序管理员进行扫码登录)
在这里插入图片描述

登录成功后进入控制台,搜索云开发。
在这里插入图片描述

选择你的环境,点击进入云开发环境的控制台。
在这里插入图片描述

在这里插入图片描述
新建一个访问服务
在这里插入图片描述

点击确认后,等待服务新建完成即可,大概需要10分钟(生效)。
点击触发路径,不会出现以下页面信息就是生效了。
在这里插入图片描述

2-3、上传此云函数代码

按照下图的文件目录创建即可。
其中node_modules不需要管。上传云函数时选择云端安装依赖即可。
service也不需要,这是后续的实际业务逻辑,我的不一定符合你的需求。

在这里插入图片描述

utils.js

const crypto = require("crypto");
const xml2js = require("xml2js");/*** 校验信息是否来自微信服务器* @param {*} token 设置的token* @param {*} nonce* @param {*} timestamp* @param {*} signature* @returns 验证成功返回 echostr 否则返回 false*/
const handle_wx = (token, nonce, timestamp, signature) => {const list = [token, nonce, timestamp].sort().join("");const hash = crypto.createHash("sha1").update(list).digest("hex");if (signature === hash) return true;return false;
};/*** 获取回调事件中的参数* @param {*} base64Data 回调事件的base64数据*/
const getEventData = (base64Data) => {const buffer = Buffer.from(base64Data, "base64");const xmlData = buffer.toString("utf-8");const parser = new xml2js.Parser();return new Promise((resolve, reject) => {parser.parseString(xmlData, (err, res) => {if (err) reject(err);const eventDataObj = res.xml;let eventData = {};for (const key in eventDataObj) {eventData[key] = eventDataObj[key][0];}resolve(eventData);});});
};module.exports = { handle_wx, getEventData };

config.js

const EncodingAESKey = "随机生成即可,见下图"
const Token = "你的token,后续配置在公众号中,3-32为随机字符。见下图"module.exports = {EncodingAESKey,Token,
}

在这里插入图片描述

package.json

在你的package.json的dependencies中新增xml2js依赖

"xml2js": "^0.6.2"

在这里插入图片描述

index.js


const { Token } = require("./config");
const { handle_wx, getEventData } = require("./utils/utils");exports.main = async (event) => {console.log("event :>> ", event);const { queryStringParameters, body } = event;// 校验信息是否来自微信服务器let isVerify = false;const { echostr, signature, timestamp, nonce } = queryStringParameters;// 服务器校验if (echostr && timestamp && nonce) {isVerify = handle_wx(Token, nonce, timestamp, signature);if (isVerify) return echostr;}// 事件校验if (signature && timestamp && nonce && !echostr)isVerify = handle_wx(Token, nonce, timestamp, signature);// 校验通过if (isVerify) {// 处理逻辑if (body) {const eventData = await getEventData(body);console.log("事件消息对象 :>> ", eventData);// 不得超5sawait eventExe(eventData);}return "success";}// 校验不通过else return "";
};/*** 处理不同的事件分发* @param {*} eventData 事件数据*/
const eventExe = async (eventData) => {// 分发事件 事件类型自行前往官方文档查看,我这里只列出一些常用的// 这里放入你要执行的逻辑即可,例如关注下发欢迎语等const { MsgType, Event } = eventData;let resList = [];// 基础事件if (MsgType === "event") {switch (Event) {// 订阅case "subscribe":break;// 取消订阅case "unsubscribe":break;// 菜单栏点击case "CLICK":break;// 位置上报case "LOCATION":break;}}// 收到消息else {switch (MsgType) {// 收到文本消息case "text":break;}}
};

上传云函数

在这里插入图片描述

2-4、配置公众号

我这已经启用了,如果未启用的话,会有配置按钮,点击进去即可。
在这里插入图片描述

在这里插入图片描述

这里先不要点击提交!!!
这里先不要点击提交!!!
这里先不要点击提交!!!

复制Token和EncodingAESKey,放到云函数的config.js中,然后
记得更新云函数
记得更新云函数
记得更新云函数
在这里插入图片描述
等待云函数上传完成后,点击公众号中的提交按钮,此时微信服务器会进行token校验,如果没有出问题,会校验通过。

首次配置成功后,这里默认是未启用的,点击启用即可。
在这里插入图片描述

三、验证结果

上面全部都执行完没问题后,尝试到公众号中发送消息/关注/取关公众号,然后前往云函数日志中查看。看看是否会打印对应事件解析出来的数据对象。

发送消息:123

在这里插入图片描述

取关公众号事件
在这里插入图片描述

关注公众号事件
在这里插入图片描述

四、结语

最后来一下常规结语:
实际开发中的其他逻辑就不写了。需要同学们自己去考虑异常情况处理等问题啦。

有任何疑问可以在评论区留下。我每天都会进行回复,私聊不回。(为了刷积分)

以上均是本人开发过程中的一些经验总结与领悟,如果有什么不正确的地方,希望大佬们评论区斧正。

💥最后!!!不管这篇文章对你有没有用,既然都看到最后了。
👍赞一个!!!
🤩当然,顺带收藏就最好了。
😎欢迎转载,原创不易,转载请注明出处✍️。

😊如果你对小程序开发有兴趣或者正在学习小程序开发,可以关注我。每一篇都是原创,每一篇都是干货噢~。

————————————————
版权声明:本文为CSDN博主「super–Yang」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44702572/article/details/135295980

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/307250.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿鹄电子招投标系统:基于Spring Boot、Mybatis、Redis和Layui的企业电子招采平台源码与立项流程

在数字化时代,企业需要借助先进的数字化技术来提高工程管理效率和质量。招投标管理系统作为企业内部业务项目管理的重要应用平台,涵盖了门户管理、立项管理、采购项目管理、采购公告管理、考核管理、报表管理、评审管理、企业管理、采购管理和系统管理等…

【产品】业务场景常用算法学习笔记

评价模型 (Evaluation Model) 评价模型用于对某个系统、方案或决策进行评估。通过构建合适的指标和评价方法,评价模型能够对不同方案的优劣进行比较和分析。在数学建模比赛中,评价模型通常根据问题的特点和需求,设计合适的评价标准和指标&am…

Sectigo泛域名SSL证书购买流程

在互联网蓬勃发展的时代,网络安全越来越受到重视,各个浏览器也会优先收录安装了SSL证书的网站,SSL证书作为保障网站安全的重要工具,越来越受到企业的重视。Sectigo是一家知名的SSL证书提供商,其泛域名SSL证书能够为企业…

电脑系统坏了用U盘重装系统教程

我们平时办公、学习都会用到电脑,如果电脑系统坏了,就会影响自己正常使用电脑,这时候就可以通过U盘来重装一个正常的操作系统。如果您不知道具体的重装操作步骤,那么可以参考下面小编分享的利用U盘快速完成操作系统重装的步骤介绍…

js实现前端下载图片和文件资料

说明:下载图片和文档资料是两种不同的方式,所以需要先判断下载的是图片还是word,excel等文件资料 目录 1.文件资料下载: 2.图片资源下载 1.文件资料下载: window.location.href 文件路径; handleClick(item) {let…

【VTK-Rendering::Annotation】第一期 vtkCaptionActor2D

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 前言 本文分享vtkCaptionActor2D源码解析,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞关注,小易会继续努力分享,一起进步! 你的点赞就是我…

CSP CCF 201312-2 ISBN号码 C++满分题解

解题思路&#xff1a; 1.用一个int数组单独存储每个数字&#xff1b;用char数组存储原始标识符串&#xff0c;方便输出 2.计算后得到标识码&#xff0c;判断是否正确 #include<iostream> using namespace std;int main() {int num[15]; //存储每个位置的数char arr[15…

UniApp小程序使用vant引入vant weapp

HBuilder X里新建项目指路 HBuilderX新建项目 安装node.js指路 安装node.js 1.通过npm安装 查看npm环境 //打开终端输入命令查看版本 npm -version 1.1.右键打开外部终端窗口 1.2.输入npm init -y命令 1.3.通过命令安装 npm i vant/weapp1.3.3 -S --production 1.4.打开工具…

联合办公靠谱吗?

提起联合办公&#xff0c;许多人可能会想到喧嚣的开放式办公区、精巧的咖啡吧台以及随处可见的共享会议室。随着工作模式的更新迭代&#xff0c;联合办公无疑已经成为了现代办公室文化的热门趋势。但面对这种浪潮&#xff0c;不少人仍然保持着观望的态度&#xff0c;不免产生疑…

新药(化药)注册申报资料都包含哪些?

新药的注册申报是新药上市前的重要步骤,其流程可以简单概括为①前期准备→②申报材料准备→③递交注册申请→④审评和审批→⑤监管和跟踪。本文将着重介绍新药(化药)注册申报的一般流程和主要环节(附流程图)。(关于新药注册申报成功率和耗费时间问题写到最后) ①前期准备 在开…

应对策略:财务数据智能化转型潜在风险

在技术的推动下&#xff0c;企业正步入数智化转型的新时代。大数据、人工智能、云计算、物联网和区块链等尖端科技正蓬勃发展&#xff0c;为制造业带来了前所未有的机遇与挑战。在这场技术革命的浪潮中&#xff0c;制造业面临着巨大的变革压力。识别转型过程中潜在风险并采取应…

Proxyman:现代本地Web调试代理工具

1. 简介 1.1 什么是Proxyman&#xff1f; Proxyman是一款专为macOS设计的现代本地Web调试代理工具&#xff0c;它不仅支持macOS平台&#xff0c;还能无缝地与iOS和Android设备进行集成。作为一个网络调试工具&#xff0c;Proxyman的设计旨在提供高性能、直观且功能丰富的解决…