当前位置: 首页 > 编程日记 > 正文

小程序群发模板消息

QQ技术交流群 173683866 526474645 欢迎加入交流讨论,打广告的一律飞机票

场景: 微信小程序一键群发模板消息(针对所有使用过小程序的用户),发送消息提醒用户,进入指定页面。

实现步骤

利用form表单的按钮收集用户的formId存入数据库(如果当前没有formId,就直接存,如果有formId,就拼接之前的formId-用逗号分割区分),发送模板消息的时候从数据库取出formId 字段,然后截取第一个formId(它是一次性的,不可重复使用)去发送,使用完删除该条formId,再存入数据库。

实现代码

index.wxml

<form bindsubmit="formSubmit" report-submit="true"><view catchtap="send_mm">群发服务通知</view><button formType="submit" bindtap="submitTo">发送</button>
</form>

index.js

//提交formId保存到数据库  
formSubmit(e) {let data = {openid: wx.getStorageSync("openid"),formId: e.detail.formId};util.request('http://localhost/saveFormid.php', 'post', data, '', (res) => {console.log(res)});
},
//群发
send_mm(){var that = this;util.request('http://localhost/send_mm.php', 'post', '', '', function (res) {res = res.data;if (res.code == 0) {wx.showToast({title: '发送成功!',})} else {wx.showToast({title: '发送失败',icon: 'none',duration: 2000})}})},

php.  接口1  saveFormid.php   (formId保存到数据库 )

<?phpheader("Content-Type:text/html;charset=utf8"); header("Access-Control-Allow-Origin: *"); //解决跨域header('Access-Control-Allow-Methods:POST');// 响应类型  header('Access-Control-Allow-Headers:*'); // 响应头设置 $link=mysql_connect("localhost","root","root"); mysql_select_db("chat", $link); //选择数据库mysql_query("SET NAMES utf8");//解决中文乱码问题$openid = $_POST['openid'];$formId = $_POST['formId'];$q = "SELECT * FROM user"; //SQL查询语句 SELECT * FROM 表名$rs = mysql_query($q); //获取数据集if(!$rs){die("数据库没有数据!");}//循环读取数据并存入数组对象$dlogs;$i=1;while($row=mysql_fetch_array($rs)){$result = @mysql_query($strsql);if($row["openid"]==$openid){if($row["formId"]!=""){$ab =$row["formId"].','.$formId;}else{$ab =$formId;}//修改数据库字段mysql_query("UPDATE user SET formId = '$ab'WHERE openid = '$openid'");echo $ab;}}?>

接口2:send_mm.php 群发模板消息 (发送服务通知然后删除废弃的formId)

<?phpheader("Content-Type:text/html;charset=utf8"); header("Access-Control-Allow-Origin: *"); //解决跨域header('Access-Control-Allow-Methods:POST');// 响应类型  header('Access-Control-Allow-Headers:*'); // 响应头设置 $link=mysql_connect("localhost","root","root"); mysql_select_db("chat", $link); //选择数据库mysql_query("SET NAMES utf8");//解决中文乱码问题$appid='wx7eda2944d33f85e4';//填你的appid$appsecret='ebbbac89078e013d6afcd9d7e94dc66c';//填你的appsecret$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret;$access_token = file_get_contents($url);$access_token = json_decode($access_token,true)['access_token'];$keyword=array("keyword1"=>array("value"=>'消息提醒',"color"=>"#4a4a4a"),"keyword2"=>array("value"=>'您有接收到新消息,点击查看详情',"color"=>"#9b9b9b"));$q = "SELECT * FROM user"; //SQL查询语句 SELECT * FROM 表名$rs = mysql_query($q); //获取数据集if(!$rs){die("数据库没有数据!");}//循环读取数据并存入数组对象$dlogs;$i=0;$str_f;while($row=mysql_fetch_array($rs)){if($row['formId']!=''&&$row['formId']!='1'){$str_formId =$row['formId'];$arr_formId =explode(',', $str_formId);$openid =$row['openid'];if(strpos($str_formId,",")){$str_f =array_shift($arr_formId);$str_formId =implode(",", $arr_formId);mysql_query("UPDATE user SET formId = '$str_formId' WHERE openid = '$openid'");}else{$formId_no ='';$str_f =$row['formId'];mysql_query("UPDATE user SET formId = '$formId_no' WHERE openid = '$openid'");}//参数说明见文章结尾$arr = array('touser'=>$row['openid'],'page'=>'pages/index/index','template_id'=>'nJmtuHQTmkvWXxTZERwAHhsUlWXWmKcJmJIDMWNhn2I','form_id'=>$str_f,'data'=>$keyword);$_data=curl_file_post_contents('https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token='.$access_token,json_encode($arr));echo urldecode(json_encode($_data));if($_data['errcode']==0){echo 1;}}}//POST请求function curl_file_post_contents($durl, $post_data){// header传送格式$headers = array();//初始化$curl = curl_init();//设置抓取的urlcurl_setopt($curl, CURLOPT_URL, $durl);//设置头文件的信息作为数据流输出curl_setopt($curl, CURLOPT_HEADER, false);//设置获取的信息以文件流的形式返回,而不是直接输出。curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);//设置post方式提交curl_setopt($curl, CURLOPT_POST, true);// 设置post请求参数curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);// 添加头信息curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);// CURLINFO_HEADER_OUT选项可以拿到请求头信息curl_setopt($curl, CURLINFO_HEADER_OUT, true);// 不验证SSLcurl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);//执行命令$data = curl_exec($curl);// 打印请求头信息
//        echo curl_getinfo($curl, CURLINFO_HEADER_OUT);//关闭URL请求curl_close($curl);//显示获得的数据return $data;}
?>

发送模板消息参数说明:

点击跳转官方文档

请求参数

属性类型默认值必填说明
access_tokenstring接口调用凭证
touserstring接收者(用户)的 openid
template_idstring所需下发的模板消息的id
pagestring点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转。
form_idstring表单提交场景下,为 submit 事件带上的 formId;支付场景下,为本次支付的 prepay_id
dataObject模板内容,不填则下发空模板。具体格式请参考示例。
emphasis_keywordstring模板需要放大的关键词,不填则默认无放大

相关文章:

bat启动/停止oracle服务

自己的电脑比较慢&#xff0c;尤其装了oracle10g后&#xff0c;服务开启和关闭用bat文件操作省事点 开启服务 echo offnet start OracleServiceORCLnet start OracleDBConsoleorclnet start OracleOraDb11g_home1TNSListenernet start OracleOraDb11g_home1iSQL*Plus pause 停止…

docker使用mongo_如何使用Docker在AWS上部署Mongo:初学者的权威指南

docker使用mongo为什么需要这个&#xff1f; (Why you need this?) 因为JS Python Mongo 完整的数据开发 (Because JS Python Mongo full data development) I am a Meteor developer. More precisely I use Vulcan.js, but that’s a whole other story. Meteor is a fu…

git命令每次都要输入账号密码解决方法

QQ技术交流群 173683866 526474645 欢迎加入交流讨论&#xff0c;打广告的一律飞机票 1. 打开项目cmd , 打开方式 - 进入项目的文件目录,在目录中输入 cmd 2.在命令行输入命令 git config --global credential.helper store 3.在命令行输入命令 git pull 意思是创建一…

Linux C中strcpy , strncpy , strlcpy 的区别

strcpy ,strncpy ,strlcpy的用法 好多人已经知道利用strncpy替代strcpy来防止缓冲区越界。 但是如果还要考虑运行效率的话&#xff0c;也许strlcpy是一个更好的方式。 1. strcpy strcpy 是依据 /0 作为结束判断的&#xff0c;如果 to 的空间不够&#xff0c;则会引起 buffer ov…

入职后发现公司是外包全职_我如何通过全职工作,伴侣和3岁的双胞胎男孩打造产品...

入职后发现公司是外包全职by Courtney通过考特尼 我如何通过全职工作&#xff0c;伴侣和3岁的双胞胎男孩打造产品 (How I built my product with a full-time job, partner and 3 year old twin boys) If you’ve opened this article then I’ll assume that you’re either …

Java NIO中的Buffer

简介 Buffer缓冲区&#xff0c;首先要弄明白的是&#xff0c;缓冲区是怎样一个概念。它其实是缓存的一种,我们常说的缓存&#xff0c;包括保存在硬盘上的浏览器缓存&#xff0c;保存在内存中的缓存&#xff08;比如Redis、memcached&#xff09;。Buffer是把数据保存在内存中&a…

编写高质量代码改善C#程序的157个建议——建议86:Parallel中的异常处理

建议86&#xff1a;Parallel中的异常处理建议85阐述了如何处理Task中的异常。由于Task的Start方法是异步启动的&#xff0c;所以我们需要额外的技术来完成异常处理。Parallel相对来说就要简单很多&#xff0c;因为Parallel的调用者线程会等到所有的任务全部完成后&#xff0c;再…

VS Code – No source control providers 解决方法

QQ技术交流群 173683866 526474645 欢迎加入交流讨论&#xff0c;打广告的一律飞机票 1.点击IDE左侧的搜索 2.在搜索中输入 git.enabled 3.点击Open Serrings 4.在Settings中的搜索框输入 git.enabled 5.把它下方的三个选项User Workpace broadband-h5(项目名称) 的Git en…

如何从JavaScript中的给定数字中形成最小的数字

by Prashant Yadav通过Prashant Yadav 如何从JavaScript中的给定数字中形成最小的数字 (How to form the smallest possible number from a given number in JavaScript) In this tutorial, we will implement an algorithm to form the smallest possible number with ES6.在…

微信小程序在web-view页面做分享,并且把分享的参数传递给小程序

QQ技术交流群 173683866 526474645 欢迎加入交流讨论&#xff0c;打广告的一律飞机票 本demo实现的功能&#xff0c;微信小程序给h5传参&#xff0c;h5给小程序传参 实现代码&#xff1a; <!--index.wxml --><web-view src"https://xxx.xxx.cn/test1.html?us…

洛谷—— P1118 [USACO06FEB]数字三角形Backward Digit Su…

https://www.luogu.org/problem/show?pid1118#sub 题目描述 FJ and his cows enjoy playing a mental game. They write down the numbers from 1 to N (1 < N < 10) in a certain order and then sum adjacent numbers to produce a new list with one fewer number. T…

Centos和Redhat的区别和联系

网上看到的&#xff0c;转载给大家 CentOS与RedHat的关系&#xff1a; RedHat在发行的时候&#xff0c;有两种方式&#xff1a;二进制的发行方式以及源代码的发行方式。无论是哪一种发行方式&#xff0c;你都可以免费获得&#xff08;例如从网上下载&#xff09;&#xff0c;并…

矩阵专职_新的篇章开始了-我将以专职技术作家的身份加入RunCloud

矩阵专职If you used to submit (or read) articles on the freeCodeCamp Medium publication, there is a chance that your article may have been edited by me (or by another member of the team of volunteer editors).如果您以前曾经在freeCodeCamp Medium出版物上提交(…

转:【小作品】STM32无线WIFI视频小车制作剖析(下)

转载于&#xff1a;http://blog.csdn.net/u012819339/article/details/50654764 实体作品请参看优酷视频。 若以上链接点击无效请把该链接地址复制到浏览器地址栏 http://v.youku.com/v_show/id_XODYzODczNzQ4.html 说明&#xff1a; 该作品为arvik于2014年下半年在学校实验室做…

JS 缓存 设置临时缓存和长期缓存 sessionStorage localStorage

QQ技术交流群 173683866 526474645 欢迎加入交流讨论&#xff0c;打广告的一律飞机票 使用 Window sessionStorage 和 localStorage 属性 sessionStorage 用于临时保存同一窗口(或标签页)的数据&#xff0c;在关闭窗口或标签页之后将会删除这些数据 localStorage 缓存在浏览…

SQL中distinct的用法

在表中&#xff0c;可能会包含重复值。这并不成问题&#xff0c;不过&#xff0c;有时您也许希望仅仅列出不同&#xff08;distinct&#xff09;的值。关键词 distinct用于返回唯一不同的值。表A&#xff1a;示例1select distinct name from A 执行后结果如下&#xff1a;示例2…

brain.js 时间序列_免费的Brain JS课程学习JavaScript中的神经网络

brain.js 时间序列The last few years, machine learning has gone from a promising technology to something we’re surrounded with on a daily basis. And at the heart of many machine learning systems lies neural networks.在过去的几年中&#xff0c;机器学习已经从…

小白的Unity5之路(一)

Player移动: 1 public float speed 6f;2 Vector3 movement;3 Rigidbody playerRididbody;4 5 void FixedUpdate () {6 float h Input.GetAxisRaw("Horizontal");7 float v Input.GetAxisRaw("Vertical");8 Move(h, v); 9…

Splunk学习与实践

一、 Splunk公司与产品 美国Splunk公司&#xff0c;成立于2004年&#xff0c;2012年纳斯达克上市&#xff0c;第一家大数据上市公司&#xff0c;荣获众多奖项和殊荣。总部位于美国旧金山&#xff0c;伦敦为国际总部&#xff0c;香港设有亚太支持中心&#xff0c;上海设有海外第…

VUE v-if 和 v-for 的使用示例 VUE根据下标改变图片路径

QQ技术交流群 173683866 526474645 欢迎加入交流讨论&#xff0c;打广告的一律飞机票 v-if 和 v-else v-for <div class"" v-for"(item,index) in [1,1,1,1,1,1,1,1,1,1]"><img v-if"helpeds0" class"tou1" :style"{…

聊天软交互原理_来自不同城市的人们如何在freeCodeCamp聊天室中进行交互

聊天软交互原理by Dborah Mesquita由DborahMesquita 来自不同城市的人们如何在freeCodeCamp聊天室中进行交互 (How people from different cities interact in the freeCodeCamp chatrooms) 推理统计入门以及如何使用spaCy从文本中提取信息 (A primer on Inferential statisti…

使用微信的JS-SDK实现自定义分享到微信朋友圈

QQ技术交流群 173683866 526474645 欢迎加入交流讨论&#xff0c;打广告的一律飞机票 实现代码 <!DOCTYPE html> <html><head><meta name"viewport" content"widthdevice-width, initial-scale1.0, user-scalableno, minimum-scale1.0, …

[Unity3D]Unity3D连衣裙实现游戏开发系统

大家好&#xff0c;我是秦培。欢迎关注我的博客&#xff0c;我的博客地址blog.csdn.net/qinyuanpei。 不知从什么时候開始&#xff0c;国产RPG单机游戏開始出现换装&#xff0c;仙剑系列中第一部实现了换装的游戏是仙剑奇侠传四&#xff0c;后来原上海软星团队。眼下的烛龙科技…

python中nlp的库_单词袋简介以及如何在Python for NLP中对其进行编码

python中nlp的库by Praveen Dubey通过Praveen Dubey 单词词汇入门以及如何在Python中为NLP 编写代码的简介 (An introduction to Bag of Words and how to code it in Python for NLP) Bag of Words (BOW) is a method to extract features from text documents. These featur…

机器学习:计算学习理论

计算学习理论介绍 关键词&#xff1a; 鲁棒性 关键词&#xff1a; 【机器学习基础】理解为什么机器可以学习1——PAC学习模型--简书 关键词&#xff1a;存在必要性&#xff1b;从机器学习角度出发 PAC学习理论&#xff1a;机器学习那些事 关键词&#xff1a;不错的大道理 如果相…

HTML超出部分滚动效果 HTML滚动 HTML下拉 附效果图

QQ技术交流群 173683866 526474645 欢迎加入交流讨论&#xff0c;打广告的一律飞机票 H5 效果图 实现代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>Bootstrap 实例 - 滚动监听&#xff08;Scrollspy&#xff09;…

编写高质量代码改善C#程序的157个建议——建议148:不重复代码

建议148&#xff1a;不重复代码 如果发现重复的代码&#xff0c;则意味着我们需要整顿一下&#xff0c;在继续前进。 重复的代码让我们的软件行为不一致。举例来说&#xff0c;如果存在两处相同的加密代码。结果在某一天&#xff0c;我们发现加密代码有个小Bug&#xff0c;然后…

求职者提问的问题面试官不会_如何通过三个简单的问题就不会陷入求职困境

求职者提问的问题面试官不会by DJ Chung由DJ Chung 如何通过三个简单的问题就不会陷入求职困境 (How to get un-stuck in your job search with three simple questions) 您甚至不知道为什么会被卡住&#xff1f; (Do you even know why you’re stuck?) Your job search can…

不能交换到解决jenkins用户的问题

su - jenkins始终有效&#xff0c;今centos无效&#xff0c;因为/etc/password在文档/bin/bash是yum当安装到/bin/false.之后可以改变。ubuntu安装包和yum安装包的行为不一致啊。版权声明&#xff1a;本文博主原创文章&#xff0c;博客&#xff0c;未经同意&#xff0c;不得转载…

HTML引用公共组件

QQ技术交流群 173683866 526474645 欢迎加入交流讨论&#xff0c;打广告的一律飞机票 在test.html引用footer.html 效果图 代码 test.html <!DOCTYPE html> <html><head><meta charset"utf-8"><title>引用demo</title><s…