正文开始,先感谢技术贴-微信小程序模板消息还能群发?无限制推送? - 简书(网址http://www.jianshu.com/p/2d21c6875029 截止到发稿日,链接已经打不开),整个技术实现都是参照这篇的,本文目的旨在做个记录,亦或是以纯技术实现的角度为需要的码农提供一个教程。

技术从第二段小程序开始,前言可以略过。

前言

微信小程序同微信公众号一样,也有模板消息发送功能,不一样的是公众号是直接通过公众号下发通知,而小程序的通知则是下发到了一个单独的对话框内——服务通知。

与微信公众号发送模板消息的另一个不同,就是小程序发送模板消息必须要带上formId这个参数才能发送。

formId,顾名思义,就是表单id,是在小程序页面表单提交的过程中可以获取到的一串数字或者随机英文字母数字的码,通过这种方式获取到的表单id可以给对应用户(表单提交人)发送一条模板消息。当然了,还考虑到商家对支付用户可能需要多次下发例如支付成功通知、发货通知、退款通知的这类通知,微信允许开发者在用户支付的过程中获取表单id(实际上是支付过程中的预支付码),通过此码,可以重复为用户下发最多3条的模板消息。

微信如今坐拥10亿日活,对普通用户体验真是操碎了心。对于模板消息引入formId的机制,极大程度上限制了商家通过推送消息来维护用户关系。但是不是所有应用场景都适合这个规则。

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

小程序端

  1. 构建formId 池,每次将用户提交的表单都搜集起来存入formId池,需要发送通知的时候从中取出即可。
  2. 将用户有可能点击的区域覆盖一层不可见的button,并将整个页面用于传输formId的button包裹在一Form标签内,一旦用户有点击按钮的操作,就将获取到的formId传送走。

下面是表单以及不可见按钮的wxml代码

<!--原有业务代码 -->
<form bindsubmit="formSubmit_collect" report-submit="true">
<!--原有业务代码 -->     <button  formType="submit"  hover-class="none" class='invisibleclass'></button>
<!--原有业务代码 -->
</form>
<!--原有业务代码 -->    

下面是样式代码

.submit_kong_btn{
position:absolute;
width:100%;
height:100%;
left:0;
top:0;
opacity:0;
}

下面是小程序js代码

Page({formSubmit_collect: function(e) {let formId = e.detail.formId;dealFormIds(formId, url);console.log('form发生了submit事件,推送码为:',formId)}
})
function dealFormIds(formId,url='') {if(formId=='' || formId == 'undefined') {console.log('获取表单id为无效')return 0;}let data = {formid: formId,expiretime: parseInt(new Date().getTime() / 1000)+604800 //计算7天后的过期时间时间戳}var formIds = [];formIds.push(data);//将data添加到数组的末尾saveFormIds(formIds,url);
formIds = JSON.stringify(formIds);var data = {formids:formIds,url:url};//todo 向后端服务器传送表单id
}

结尾

代码实现需求的过程并不复杂,在有些需要执行其他事件的地方即便被表单id收集的按钮覆盖,也不影响事件。但是值得一提的是在表单id传输的过程中如果在还没有获取到formid的时候就跳转走了,这样是获取不到formid。所以要在获取完表单id之后再做跳转事件,如果是在原有代码基础上修改,确实额外添加了一些工作量。

【微信小程序】【实操】批量收集formId,实现模板消息自由群发相关推荐

  1. 微信小程序java后端开发记录(三):模板消息推送

    ·模板消息推送 1.1推送参数dto: 按照文档逐层次封装请求参数. 这些参数 /*** @author hanyy* @Description: 微信小程序模板消息推送参数* @date 2019/ ...

  2. 微信小程序云开发-批量上传文件到云储存空间

    微信小程序开发 自己最近在玩微信小程序,准备记录一些自己遇到的,网络上没有对应教程(也许是自己没找到),或者是教程比较少的问题,然后给出自己的解决方案 目录 微信小程序开发 问题 一.云储存是什么? ...

  3. 史上最全推广小程序实操方法

    通用篇 1.用小程序名称抢排位 小程序的排名跟名称.描述.上线时间.用户访问量和小程序的综合质量有关,且小程序的名称是唯一的.根据用户的搜索习惯和产品特性,尽可能多地注册小程序名称,才能让小程序的排名 ...

  4. 微信小程序实训day03

    今天主要讲了微信小程序的wx:if.wx:for.wx:key,<swiper>,<map>的用法和数据绑定以及定义模板.说真的,今天的内容感觉挺让我内心复杂的,例如表面上比较 ...

  5. 微信小程序座位预约,微信小程序实现订座位,餐厅座位预约小程序毕设作品

    项目背景和意义 目的:本课题主要目标是设计并能够实现一个基于微信小程序预约订座小程序,前台用户使用小程序,后台管理使用基PHP+MySql的B/S架构:通过后台添加座位类型.座位号,用户通过小程序登录 ...

  6. 【微信小程序】1、SpringBoot整合WxJava开启消息推送

    接入微信小程序消息推送服务,可以3种方式选择其一: 1.开发者服务器接收消息推送 2.云函数接收消息推送 3.微信云托管服务接收消息推送 开发者服务器接收消息推送,开发者需要按照如下步骤完成: 1.填 ...

  7. 【微信小程序】实战案例 -- 向订阅用户发送消息(范例:报名提醒)

    范例场景描述 活动发起人发起了一场活动,在有人通过微信小程序报名活动时,活动发起人/活动报名审核人员希望可以收到一条报名处理提醒消息. 实现流程 1. 选用订阅模板 登录到小程序后台 找到满足需求的模 ...

  8. 微信小程序绑定客服,接收不到消息?

    微信小程序绑定客服,无法接收用户消息 客服文档 添加客服 <button class="serviceBtn" open-type="contact"&g ...

  9. 微信小程序在开发者工具中能收到发送消息,手机预览不能获取发送消息

    如题,开发微信小程序时,发现在开发者工具中能正常发送收到消息,而在真机中不打开调试模式的情况下不能发送获取消息,找了半天文档终于找到了原因: 服务器域名配置原因引起的 在没设置服务器域名的时候不开启上 ...

最新文章

  1. 95%PyTorch库都会中招的bug!特斯拉AI总监都没能幸免
  2. 大白话解析模拟退火算法、遗传算法入门
  3. 如何解决在onCreate()中获取View的width和Height为0?
  4. Java中的读/写锁
  5. 【TensorFlow实战】TensorFlow实现经典卷积神经网络之ResNet
  6. MYSQL锁表的用法,防止并发情况下的重复数据
  7. Abb变频器输参数只读_ABB变频器ACSM1-04/ACS380产品参数说明及功能介绍
  8. 唐诗辑注 —— 辛夷坞、南园十三首、问六十九
  9. python列表元组字典集合实验心得_python心得 元组,字典,集合
  10. 分享 Android 手机屏幕录制并制作成 GIF 演示图片
  11. 审批工作流及数据库设计
  12. Activiti7使用
  13. mybatis事务原理与集成spring的事务原理
  14. 四种常用的ps抠图方法
  15. Hdu2184汉诺塔VIII
  16. 86u 网页服务器,路由器怎么设置DMZ_华硕RT-AC86U路由器开启DMZ方法
  17. opencv之伪彩变换
  18. c c++实现restful api服务 c c++实现http服务
  19. windows 2008 R2 感染Ramnit.x病毒查杀方法
  20. office2016简体中文版

热门文章

  1. python+selenium实现京东秒杀脚本
  2. Windows命令行启动MySql
  3. python程序设计基础李东方答案_李东方python程序设计基础答案
  4. bui ajax,BUI 数据交互
  5. vue中将链接转二维码图片,2张图合成为1张图
  6. ECCV / TNNLS 20 - 如何在异常检测中利用“结构structure - 纹理texture”一致性【P-Net,MemSTC-Net】
  7. 用java程序写一个闹钟_java 使用swing制作一个小闹钟,包含以下功能:
  8. 【Dragon of Loowater】【UVA - 11292】(思维)
  9. 微信小程序 组件左右对齐
  10. 解决:A SOAP 1.2 message is not valid when sent to a SOAP 1.1 only endpoint.