基于上一篇文件“.NET Core 小程序开发零基础系列(1)——开发者启用并校验牵手成功”的反映,个人觉得效果很不错,大家对公众号开发还是有很大需求的,同时也收到了很多同学的问题,后面我也会通过实战性文章慢慢的表现出来 ,让大家更容易吃得透一些。在这里特别感谢盛派Senparc作者的支持,也感谢各社区大佬的支持,同时也要感谢我的6位小伙伴大力支持,我们将有问必答,资源共享。

为什么说盛派Senparc开源框架开发贼快呢,因为他们经过多年的打磨,反反复复的修改升级,基本上所有公众号的功能都支持,但发现还是有很多的同学不明白原理与底层框架的设计,在这里我们将通过真实的实战项目来一点点吃掉。

废话不多说了,开始我们的实战第二篇,玩得好 模板消息可突破限制哦,袖子撸起来,干 ^_^

1

了解一下模板消息

基于微信的通知渠道,我们为开发者提供了可以高效触达用户的模板消息能力,以便实现服务的闭环并提供更佳的体验。

模板推送位置:服务通知

模板下发条件:用户本人在微信体系内与页面有交互行为后触发,详见 下发条件说明

模板跳转能力:点击查看详情仅能跳转下发模板的该帐号的各个页面

效果如图:

更多的规则请查看官方文档

https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/template-message.html

附加经验说明:

如果你公司有运营人员,一定会非常的喜欢服务通知,它能很快的引流到服务号,小程序中来,激活当前的用户。借助微信的服务通知,必能触达到关注过,授权过服务号,小程序的人,是不是很棒。

场景:比如说用户使用某个小程序发布了一个百人报名活动。如果能实现有一个人报名,就向活动发起者发送一条报名通知,那就大大提高了工具的使用效率,不用发起人每次都打开小程序去看有多少人参与了报名。显然,当前的消息发送机制无法满足这个需求。

模板有很多种咯,每个行业的模板也不一样,比如我们电商系统需要的模板“订单支付成功通知”、“订单支付失败通知”、“预约成功通知”、“订单发货通知”、“用户认证通知”等等模板。

2

创建你想要的模板/设置模板

登录小程序后台,点击左侧“模板消息”,如图:

默认“我的模板库”是没有模板的,需要进入到“模板库”中进行创建, 模板库中的模板非常多,建议搜索你想要的模板,如图:

选择对应的模板,点击选用,如图:

注意:这里添加的“关键词”顺序要严格按照我们后台列出来的顺序去选择排列,否则会出现数据错乱的问题。

以上基本是了解模板,配置模板,下面我们真正来发送模板啦!

3

收集formId(突破模板消息的推送限制?)

这里为什么要收集formId呢,因为小程序发送模板必须要对应人的formId来发送,不然你是发送不成功的。

formId收集方法,我们直接讲复杂的收集,突破模板消息的推送限制。

流程

结合小程序前端界面实现批量收集formId==》上报后台==》存储formId==》发送模板,最终做到7日内推送模板消息、触及用户激活用户。

实现步骤

1、小程序构建formId 池,每次将用户提交的表单都搜集起来存入formId池,当用户操作前端某个位置或者离开挂起小程序时,发送formIds到后端存储起来。

2、将小程序用户有可能点击的区域覆盖一层不可见的button,并将整个页面用于传输formId的button包裹在一form标签内,一旦用户有点击按钮的操作,就将获取到的formId存入formId 池。

上小程序部分代码

1、先定义一个formId数组

2、小程序页面定义事件

3、提交事件

4、提交到后台,批量收集formId

以上基本是收集formId的流程,有不懂原理与实现步骤的可以联系我。

4

发送模板消息(服务通知)

还是上一篇那个项目,如图:

引用盛派Senparc组件:

Senparc.Weixin.MP.MVC

Senparc.Weixin.WxOpen

批量发送模板主要代码:

HashEntry[] hashes = redisManager2.HashValueAll(videoKey);
if (hashes.Length > 0)
{   Console.WriteLine($"{QUEUE_ROOMVISIRECORD},直播间{videoKey},准备推送人数{hashes.Length},videoKey={videoKey},videoKeywords={videoKeywords}"); foreach (var item in hashes)    {   //{"WorkQueueNo":"wxccf5524125d67d16","TemplateID":"KgI11LMjGCUmvrfOPG5xHdfW2j70tJKNurfrtAFn9sk","Keywords":"2019-08-25 21:54:00|安|fffd|快来我的直播间,约起!","Url":"pages/live/liveRoom/liveRoom?id=1164536425702625280","ToOpenID":"o5D-a5QpNoC_0QYF5C-zFbmkgr4Q","ToMemberID":1053}  WorkQueueParam valueItem =  DMS.Common.Extensions.SerializerExtensions.DeserializeObject<WorkQueueParam>(item.Value);    if (valueItem != null) {   //查找小程序的fromid  string key =  $"{valueItem.ToMemberID}_{valueItem.WorkQueueNo}"; string fromid = redisManager3.ListLeftPop<string>(key);  if (!string.IsNullOrEmpty(fromid))  {   string[] keywords = videoKeywords.Split("|");    var data = new {   keyword1 = new TemplateDataItem(keywords[0]),  keyword2 = new TemplateDataItem(keywords[1]),  keyword3 = keywords.Length > 2 ? new  TemplateDataItem(keywords[2]) : null, keyword4 = keywords.Length > 3 ? new  TemplateDataItem(keywords[3]) : null, };  var tempResult =  Senparc.Weixin.WxOpen.AdvancedAPIs.Template.TemplateApi.SendTemplateMessage(valueItem.WorkQueueNo, valueItem.ToOpenID, valueItem.TemplateID, data, fromid,  videoUrl);   if (tempResult.errcode == ReturnCode.请求成功)    {   Console.WriteLine($"{QUEUE_ROOMVISIRECORD},直播间{videoKey},发送成功,{valueItem.ToMemberID}");   }   else    {   Console.WriteLine($"{QUEUE_ROOMVISIRECORD},直播间{videoKey},发送失败,{tempResult.errmsg}");  }   }   else    {   Console.WriteLine($"{QUEUE_ROOMVISIRECORD},直播间{videoKey},获取FromID为空,{valueItem.ToMemberID}"); }   }   else    {   Console.WriteLine($"{QUEUE_ROOMVISIRECORD},直播间{videoKey},模板内容序列哈异常"); }   }
}
else
{   Console.WriteLine($"{QUEUE_ROOMVISIRECORD},直播间{videoKey},未找到直播间数据");
}

这里的场景是这样的:比如一个主播她创建了一个房间,设定开播的时间为某一天,为了给自己引流,他在微信群分享了小程序,这时只要有人点击了小程序链接点击预约就会记录与主播的关联,等到主播开播时,会群发下面预约的用户。是不是有点像群发功能,哈哈,大家有空可能尝试一下。

注:这里利用了redis来存储fromid,你们也可以用其它的方式来存储,随便你来玩。

5

总结

人个觉得代码实现需求的过程并不复杂,主要是理解了原理与实现的过程后,就事半功倍。整个方案流程涉及到的关键词有表单、按钮、formId、模板消息、Redis等,主要需要前后端相关技术组合来实现整个方案。

相关推荐

推荐文章

  • .NET Core 小程序开发零基础系列(1)——开发者启用并牵手成功

  • .net core redis的全套操作

  • .NETCore 实现容器化Docker与私有镜像仓库管理

  • .netcore consul实现服务注册与发现(一)单机部署

  • .netcore consul实现服务注册与发现(二)集群完整版

dotNET名人堂,主要分享.NET core各种技术文章,以及架构设计,管理技巧等干货,希望在这里通过实战能让你全新认识.NET core相关技术,项目架构,大数据处理,高并发,高耦合相关问题欢迎留言与我探讨。

作者微信ID:tangguo_9669

你点的每个赞,我都认真当成了喜欢

.NET Core 小程序开发零基础系列(2)——小程序服务通知(模板消息)相关推荐

  1. .NET Core 小程序开发零基础系列(1)——开发者启用并牵手成功

    最近几个月本人与团队一直与小程序打交道,对小程序的实战开发算比较熟悉,也因一些朋友经常问我各种小程序问题,无不能一一回答,想了很久,决定还是空余时间来写写文章吧,偶尔发现一个人安静的时候写文章特爽,不 ...

  2. 微信小游戏开发零基础教程(一)-CocosCreator

    微信小游戏零基础教程(一)-CocosCreator 最终效果预览 准备工作 创建工程 测试第一个场景 最终效果预览 本教程最后制作的游戏效果: 准备工作 下载 微信开发者工具 最新版->下载地 ...

  3. 【微信小程序】零基础搭建微信小程序 前端开发

    已经用微信开发者工具做完了基础页面,正在思索如何搭建后台._为了理清思路边写博客边思考. 前端开发 小程序的框架 页面设置 在app.json里写这个小程序的所有页面,写在第一个的编译时默认第一个展示 ...

  4. 微信小程序开发笔记 基础篇②——微信小程序 手动查看和代码查看开发者ID(AppID)

    文章目录 一.手动查看 二.代码查看 一.手动查看 微信小程序后台 开发管理-->开发设置-->开发者ID 二.代码查看 app.js onLaunch(opts) {const acco ...

  5. Android入门到精通|安卓/Android开发零基础系列Ⅱ【职坐标】-学习笔记(1)-- 常用控件及资源介绍

    前言 为了巩固Android基础知识,回顾一下学习内容,才有此学习笔记. IDE Androdi Studio 4 + Genymotion 创建项目 修改项目的 build.gradle,添加国内镜 ...

  6. python经典小游戏-python零基础入门的小游戏。

    报错. import sys import pygame from settings import Settings from ship import Ship def run_game(): #初始 ...

  7. java入门小练习_Java 零基础之作业小练习

    [练习1] 需求:输入学员的名称及总科目数并显示每项科目成绩的分数,算出总成绩. package demo2; import java.util.Scanner; //先import Scanner语 ...

  8. 小程序获取头像试试水 02《 程序员变现指南之 微信QQ 小程序 真的零基础开发宝典》

    本系列教程是针对粉丝的变现教程,还不是粉丝的可以关注我并且到社区:https://bbs.csdn.net/topics/603436232 进行打卡,不是老粉的也可以获取最终的技术变现学习,最终还有 ...

  9. 小程序的 HelloWord 01《 程序员变现指南之 微信QQ 小程序 真的零基础开发宝典》

    本系列教程是针对粉丝的变现教程,还不是粉丝的可以关注我并且到社区:https://bbs.csdn.net/topics/603436232 进行打卡,不是老粉的也可以获取最终的技术变现学习,最终还有 ...

最新文章

  1. Spring Boot集成Sharding-jdbc + Mybatis-Plus实现分库分表
  2. 手机h5可以用ifreme_安卓手机可以流畅用几年?至少三年不卡
  3. 算法分析与设计——分治法最近点对
  4. 阿里云VGN5i虚拟化GPU服务器价格更低的GPU计算服务
  5. VTK:绘制带有rgb的单元格颜色用法实战
  6. Apache启动过程(PHP_MINIT_FUNCTION的调用)
  7. SPOJ Finding Fractions
  8. 安卓案例:利用SQLiteOpenHelper操作数据库及表
  9. 往java里输入坐标值_java.让用户输入x坐标,和y坐标。当用户输入完x坐标(比如200),敲enter,...
  10. 关于Java的反射机制,你需要理解这些...
  11. 深度学习-函数-tf.nn.embedding_lookup 与tf.keras.layers.Embedding
  12. java简单ai聊天_一个hello/hi的简单的网络聊天程序——JAVA
  13. 删除和创建用户的脚本
  14. 如何在Python中解析XML?
  15. 基于WebUploader、SpringMVC的断点续传
  16. 服务器数字显示器,数字显示器
  17. HS系列USB数据采集卡,及高速多通道数据分析软件详解
  18. 『交换机连交换机』交换机多种化连接方式
  19. input maxlength 属性不起作用
  20. pinpoint全链路监控安装部署(支持dubbo)

热门文章

  1. linux文件句柄,【LINUX】使用lsof处理文件恢复、句柄以及空间释放问题
  2. vista任务栏透明_增加Windows Vista任务栏预览大小的赏金(付费!)
  3. hadoop编译java,Hadoop源码编译(2.4.1)
  4. 面试专题(Mysql及Mongodb)
  5. python模块之hashlib
  6. Android 4 +https(如何启动TLS1 1 and TLS1 2)
  7. 【Android】7.1 布局控件常用的公共属性
  8. Heartbeat+httpd+NFS 实现高可用的Web服务器
  9. Word打不开,如何修复word文档?
  10. 安全删除U盘时,遇到提示“无法停止‘通用卷’设备时解决方法