小程序无限制保存formid到后台

小程序单次点击获取多次formId,发送模板消息 小程序单次点击获取多次formId,发送模板消息    直接上代码wxml代码    单次点击获取单个formid <form bindsubmit="formSubmit" report-submit="true"> <button formType="submit" class='btn'> ... 阅读详情

小程序formId

小程序的formId是为发送消息模板做准备的,只能在小程序使用时获取,后台是无法获取的。所以是用来发送一切临时的通知消息,并且formId是会过期的,且只能使用一次。期限好想是一周。但是我们为了给用户发送通知方便直接在用户使用小程序的时候收集formId并且在有效期内使用就能实现发送通知的功能。

实现策略

因为小程序限制,只能如下的方式获取formId,支付也会有formId我们这里不讨论,但是button一般太丑了。

 <form report-submit="true" @submit="formSubmit">
   <button form-type="submit" class="form-btn">
   </button>
</form>

为了button不影响我们界面的美观,并且能够以能够对开发者不透明的使用就更好了。我们现在封装一个组件,满足一以下功能:

  • 不影响前端点击事件布局。即组件透明,并且有点击区域触发submit事件
  • 每次点击记录formId
  • 设定每天formId的采集上限
  • 当formId达到上限,不渲染form,防止频繁获取formId造成的影响
  • 设定formId达到多少值上传到服务器。

下面是代码实现

框架是类vue,如果不兼容自己需要改造下

<template>
    <div>
        <form v-if="isGetFormId" report-submit="true" @submit="formSubmit">
            <button form-type="submit" class="form-btn">

            </button>
        </form>
    </div>
</template>

<script>
    let ms = wx //兼容微信接口,如果不是使用微信,可以修改这个,并确认接口规范
    export default {
        data() {

            return {
                //每天获取formId的上限
                dayGetFormIdLimit:10,
                //上传到服务器的formId池大小,即formId采集到这么多个后就会上传到服务器\
                isGetFormId:true,
                //formId的过期毫秒数,为了保险,设定为5天,
                formIdExpire:5*24*60*60*1000,
                //模拟器中是否开启测试
                isMockTest:false,
                //存储key,每天formIds的采集数
                STORAGE_KEY:'formIdsCount'
            };
        },
        mounted() {
            this.isGetFormId = this.isFormShow()
        },

        methods: {
            //获取当天年月日
            getDay(){
                let date = new Date()
                let day = date.getFullYear()+"-" + (date.getMonth()+1)+"-"+date.getDate()
                return day
            },
            //处理提交记录
            isFormShow(){
                let isShow = true
                let day = this.getDay()
                //判断isGetFormId
                let formIds = ms.getStorageSync(this.STORAGE_KEY)
                if(typeof formIds === "object" ){
                    let dayFormIdCount = formIds[day]
                    if("number" === typeof dayFormIdCount){
                        if(dayFormIdCount >= this.dayGetFormIdLimit){
                            isShow = false
                            console.log('collect formIds is max:',this.dayGetFormIdLimit)
                        }
                    }
                }
                return isShow
            },
            //记录formId提交
            submitRecord(){
                if(!this.isFormShow()){
                    return
                }
                let day = this.getDay()
                let formIds = ms.getStorageSync(this.STORAGE_KEY)
                let cFormIds = {}
                if(typeof formIds === "object" ){
                    let dayFormIdCount = formIds[day]
                    if("number" === typeof dayFormIdCount){
                        cFormIds[day] = dayFormIdCount + 1
                    }else{
                        cFormIds[day] = 1
                    }
                }else{
                    cFormIds[day] = 1
                }
                ms.setStorageSync(this.STORAGE_KEY,cFormIds)
                this.isGetFormId =  this.isFormShow()
            },
            //触发表单事件
            formSubmit(e){
                if(e && e.detail && e.detail.formId){
                    if(!this.isMockTest){
                        //模拟器不采集
                        if(e.detail.formId.indexOf('formId')>0){
                            console.log('formId not collect for mock')
                            return
                        }
                    }

                    //提交formId数据
                    //这里要传formId和过期的绝对时间,防止formId在使用时过期
                    let params = {
                        formId:e.detail.formId,
                        expire:new Date().getTime()+this.formIdExpire
                    }
                    //提交到后端
                    postRow('/api/wxFormId/',params)
                    //采集记录
                    this.submitRecord()
                }else{
                    console.log('save form id exception.not event params')
                }
            }
        },

        watch: {},
        computed: {},
        filters: {},
        components: {},
        name: "wx-form-id"
    }
</script>

<style lang="scss">
    .form-btn{
        position:absolute;
        top:0;
        left:0;
        right:0;
        bottom:0;
        opacity:0;
    }
</style>

隐藏时使用css的方式。

使用

在有点击时间的节点下,加入此组件

<view @click="clickReview"  class="content">
  <wx-form-id></wx-form-id>
  <text class="text-gray text-sm">hello</text>
</view>

版权所有


作者:简书@mt23,优快云@mt23

出处:

https://www.jianshu.com/u/71f8075c4151

https://blog.youkuaiyun.com/mathcoder23

发布时间:2019-09-12

版权所有,欢迎保留原文链接进行转载

微信小程序开发之formId使用(模板消息) 基于微信小程序的模板消息 阅读详情

相关推荐

微信小程序例子——使用form表单获取输入框数据

微信小程序例子——使用form表单获取输入框数据

微信小程序发送模版消息获取 formID 方法

微信小程序需要加一个form表单,wxml页面代码如下: <form bindsubmit="form_id_bg" report-submit='true'> <view class='attention_title'>用户须知</view> <view class="attention_t_block"> ...

nzz_1214 540

小程序如何获取多个formId实现详解

主要介绍了小程序如何获取多个formId实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

小程序发送模板消息以及获取formId并缓存

小程序模板消息一个formId只能下发一次,而且有过期时间,有时需要给用户多次发送模板消息,这是就得将formId缓存起来, 下面以thinkphp为例, 1.为了获取多个formId可以将用户点击都改成表单方式,每次请求数据携带formID formSubmit(e) { var formId = e.detail.formId } 2.服务端缓存与获取函数 /** ...

flysnownet的博客 7627

详解微信小程序开发之formId使用(模板消息)

主要介绍了详解微信小程序开发之formId使用(模板消息),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

卡诺图化简法注意事项+竞争冒险知识点总结

今天反思以下卡诺图化简法中的注意事项。 卡诺图看起来简单,但如果不熟悉的话很容易出错,因此要对画圈的规则比较熟悉。

weixin_42415266的博客 1万+

微信小程序发送模版消息推送

一、前言 微信小程序现在成为了增长模式的宠儿,小程序的便利想必看这篇博客的各位都已经了解到了,本篇呢主要介绍小程序召回模式里面的消息push。 其中里面涉及的关键词: templateId:小程序运营人员申请模版消息时生成的一个标示,后续推送时会使用。 formId:微信推送时给用户的标示,用一次就失效,这个是在小程序端通过表单获取。 accessToken:通过用户验证登录和授权,获取...

TD大会·初度的博客 993

SAP物料分类账(ML)避坑指南:激活顺序错了怎么办?从CKMSTART到差异分摊的完整流程

本文详细解析SAP物料分类账(ML)的正确激活顺序与配置流程,帮助用户避免常见陷阱如'LKW无科目'、'在制品重估失败'等问题。从CKMSTART到差异分摊的完整流程,涵盖关键配置节点、典型报错分析与应急处理方案,确保产品成本控制(CO-PC)模块的顺利运行。

weixin_42524708的博客 258

小程序推送消息 formId

介绍:小程序的 from_id 要在用户发生操作的时候才能产生,所以我们可以用以下方法来做 (手动触发,保存formID,后台接收保存在数据库里)   什么是formId formId是小程序可以向用户发送模板消息的通行证,简单而言,你只有获取到formId,把它交给后台,后台同学才能向用户发送通知消息,而这个通行证的有效期只有七天。这是微信为了防止小程序滥用通知消息骚扰用户而提出的一种策略...

zhan_lijian的博客 1万+

WIFI 相关的频偏调试以及天线调试记录

WIFI RF 相关的频偏调试以及天线调试 1,频率误差(Frequency Error) 频率误差(Frequency Error):表征射频信号偏离该信号所处信道中心频率的大小,单位PPM。频偏误差要求范围如下表。 频偏越小越好。PPM的计算公式如下: 问题: 我们ESP8089认证测试的时候频偏测试超了。需要修改哪些呢。 测试频率点在2.411865385GHz 宣称点:2.412GHz 频率偏移计算:{(2.412GHz-2.411865385GHz)÷2...

armkits的博客 1万+

跨厂商网络设备的RADIUS认证:Windows NPS的兼容性与最佳实践

本文详细探讨了Windows NPS在多厂商网络环境中的RADIUS认证实践,特别针对华为、华三、思科等主流设备的兼容性问题提供解决方案。从基础配置到高级优化,涵盖VSA属性映射、认证协议选择及安全加固措施,帮助企业实现统一身份认证并提升网络安全性。

weixin_29213827的博客 420

微信小程序 模板消息发送遇到的坑--fromid有效期应用

发送微信小程序模板消息需要下面信息 1,小程序appid 2,小程序AppSecret(密匙) 3,小程序推送模版id 4,用户的openid 5,用户的formid(一个formid只能用一次) 下面就是小程序部分,来教大家如何获取上面所需的5个信息。 1,appid和AppSecret的获取(登录小程序管理后台) 2,推送模版id 3,用户openid的获取,可以看下面的这篇文章,也可以看...

书写人生 3987

零基础NPU固件开发学习路线--1.4 学习路线与工具链:编译器、仿真器、调试器、烧录工具

本文系统介绍了NPU固件开发的学习路径与工具链。学习路线分为四个阶段:基础认知、环境搭建、模块开发和联调量产。重点讲解了交叉编译器、代码管理工具、调试器和烧录工具等核心工具链的使用方法。文章强调工具链在NPU固件开发中的关键作用,详细阐述了从代码同步到固件烧录的全流程开发闭环,为开发者提供了一条从零基础到独立开发的完整学习路径。

MHD0815的博客 112

TP5后台微信小程序formId管理方法

应用场景:微信小程序开发中,如果要向用户发送模板消息,需要用到formId,而每个formId使用后即失效(支付产生的prepay_id只有一个,只能发送一条模板消息),因此对于需要给单个用户发送多条模板消息的场景,需要对formId进行收集、管理。 本文只提供后台保存、获取及管理formId的示例,不涉及小程序收集。 注意:本示例不保存formId的收集时间,因此无法据此删除过期for...

逍遥自在 439

目标检测YOLO实战应用案例100讲-基于数据融合的SAR图像中海上目标检测与跟踪(中)

本文使用的数据集为欧空局(European Space Agency, ESA)提供的Sentinal-1 数据集,Sentinel-1是欧洲“哥白尼计划”的SAR卫星机群,主要是用于陆地和海 洋服务的极地轨道全天候昼夜雷达成像任务[ 34]。Sentinel-1A于2014年4月3日发 射升空,Sentinel-1B于2016年4月25日发射升空,每颗卫星都携带C波段SAR, 共同提供地球表面的全天候、昼夜图像。

qq_36130719的博客 355

【用unity实现100个游戏之1】制作类元气骑士、挺进地牢——俯视角射击游戏多种射击效果(一)(附源码)

俯视角射击游戏)是一类以俯视视角进行游戏展示的射击游戏。在这种游戏中,玩家控制着一个角色或载具,从俯视的角度上方观察游戏世界,并与敌人进行战斗。这种视角使玩家能够有更好的全局观察和策略性,同时也强调快速反应和精确射击。视角:俯视角度可以是固定的,也可以随着玩家角色的移动而变化,但都允许玩家以全局视角观察整个战场,有利于制定战略和规划行动。射击:玩家通常需要使用各种武器来与敌人进行战斗,包括枪械、爆炸物等。射击动作依赖于玩家的反应速度和准确性。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 7829

在小程序中收集FormId

收集 FormId 的原因 在小程序开发中,根据业务需求,我们需要通过我们的服务器向用户推送模板消息,但是发送一次模板消息就需要收集一条 formid (例如:当你用户在你的小程序里面进行支付之后,形成一个订单,你需要通知用户的订单情况,这时就需要模板消息),根据小程的 官方文档,我们每次只能获取一条 formId,但是我们在真实的生产环境中,每次收集一条是无法满足我们的需求的,这时我们就需要 通...

sky_hxq的博客 3788

动态时间规整(Dynamic Time Warping,DTW):让时间序列分析不再枯燥和代码全分析

动态时间规整(DTW)是一种用于比较时间序列相似性的算法,特别适用于处理长度不同或时间轴不对齐的序列。本文介绍了DTW的核心概念,包括其通过非线性对齐解决时间扭曲问题的能力,以及在语音识别、金融分析等领域的应用。通过Python代码示例,演示了如何计算两个模拟时间序列的DTW距离,并可视化最优对齐路径。结果显示,DTW能够有效捕捉序列间的相似模式,即使它们在时间轴上存在偏移或伸缩。该算法通过最小化累积距离来评估相似性,得分越低表明序列间相似度越高。

此星光明博客 160

微信小程序 无限formId 无限发送模板消息 保存formId

页面的  组件,属性report-submit为true时,可以声明为需发模板消息,此时点击按钮提交表单可以获取formId,用于发送模板消息。或者当用户完成支付行为,可以获取prepay_id用于发送模板消息。       微信小程序文档是只有form提交的时候才会有formId,这样用户的formId可能数量比较少,以至于不能实现发送很多很多微信模板消息。所以这里要用别的方式来实现获取for

^璐三岁要耍蓅氓♡ 3万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

微信小程序 -- 收集推送码formId

为了获取尽可能多的推送码formId,所以可以在访问比较多的页面中去获取。 在每个页面中,点击比较多的button按钮、input框等等都可以去设置获取推送码formId。 1. 在wxml中,模版如下, 注意:1)给form设置属性:report-submit="true" ;2) button 的“formid_button”类,把button样式改透明,在全局app.wxss里写 ...

Emily 1715

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

微信小程序 获取多个formID

// pages/exambook/exambook.js const app = getApp() Page({ /** * 页面的初始数据 */ data: { formIdString:'' }, /** * 生命周期函数--监听页面加载 */ onLoad: function (options) { }, /** ...

书写人生 823

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

微信小程序 templateMessage.send推送消息 formId问题

微信小程序推送消息,基本参数为接受用户openId, 消息模板id, formId表单提交id。 对于formId来讲,微信小程序只允许用户有提交表单后,才可以对用户推送消息。 表单属性通过report-submit=true设置,将会返回表单的id,微信文档上说要保存该id,方便后续推送操作使用。 但是需要注意,此时返回的formId还不能立即使用(辣鸡,开发者工具也辣鸡,

t0m的专栏 2154

小程序获取formId,submit事件被绑定事件打断

当前环境:微信开发者工具v1.02.1804102,win10 . 最近碰到一个问题,我在小程序搜集formId,按钮操作之后会跳转页面,部分代码如下 &lt;view class="item flex-cell" bindtap='nextPage'&gt; &lt;form bindsubmit...

weixin_41726565的博客 669

html实现微信无限发消息,微信小程序简单收集formid无限次发送模板消息

消息通知对于某些应用是非常有用的,APP发送消息通知基本是没有限制的,而微信小程序是通过微信的模板消息通知实现的,微信模板消息目前来看还是通知非常有效,不存在垃圾信息过多的问题,还可以通过点击消息直接进入应用详细。如下图所示但是,为了防止应用乱发通知,小程序做了一些限制,只有两种方法可以给用户发送模板消息,一是用户支付后可发送3条模板消息;二是页面发生一次提交表单行为可发送1条模板消息,而且有个期...

weixin_39571403的博客 1597

【微信小程序】 通过用户登录实现批量收集formId

1次提交表单可下发1条,多次提交下发条数独立,相互不影响 所以,想发送模板消息,需要批量的收集formId index.wxml &amp;amp;amp;lt;view&amp;amp;amp;gt; &amp;amp;amp;lt;view class=&amp;amp;quot;inputView&amp;amp;quot; style=&amp;amp;quot;margin-top: 10% &amp;amp;quot;&a

weixin_43055905的博客 6466
上一篇: The last packet successfully received from the server was 59,866 milliseconds ago. The last packet
下一篇: java基础中==,equals(),Objects.equals()详细区别与细节
mt23
博客等级 码龄12年 33粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值