5分钟连续出现某现象+微信模板消息提醒 PHP
需求场景:用电插座电流连续出现5次电流过高(大于 3A)后停止用电服务,前四次发送电流过高提醒,最后一次发送结束用电服务提醒
思路:
Redis key 设为:插座编号+user户编号 value: 出现大于3A的次数 ;
心跳每分钟,心跳包数据含有 。判断电流:电流值 <3 清空对应key的次数 电流>=3 次数不为零小于5 次数加一 发送过高提醒,次数为5时发送结束服务提醒,清空对应key的次数;
先申请模板消息,获取模板ID(一搜一大把,此处不赘述了)
上代码:(Ci框架)
心跳包中拿到电流值 $i
if($i > 3){
checkMeterCurrentUp($meter_id);
}else{
//清空redis电流超限记录
deleteAbnormalCurrentCache($meter_id);
}
function checkMeterCurrentUp($meter_id)
//加载redis
$up_count = $this->redisclient->get('down_'.$user_id.$meter_id);
if($up_count < 5){//设备号 value加一 发送模板消息
$this->redisclient->save($user_id.$meter_id,$up_count+1,600);//给用户消息通知
//获取access_token
lm('config_model');
$access_token = $this->config_model->r(pw('datakey',CONFIG_KEY_GZHH_ACCESS_TOKEN,'platform_id',$order['platform_id']));
$access_token = element('datavalue',$access_token);
if($access_token) {
$url = sprintf("https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=%s", $access_token);
lm('users_model');
$user = $this->users_model->r(pw('id',$user_id));
lm('meters_model');
$meter = $this->meters_model->r(pw('id_open',$meter_id));
//获取微信模板消息ID
lm('platform_config_model');
$platform_config = $this->platform_config_model->r(pw('platform_id',$order['platform_id']));
$template_id = $platform_config['wx_event_template_id'];
$postdata = json_encode(array(
'touser' => element('openid',$user),
'template_id' => $template_id,
'url' => site_url('detail?id='.$meter_id),
'data' => array(
"keyword1" => array (
"value" => $meter_id,
"color" => "#173177"
),
"keyword2" => array ( //地址
"value" => element('name',$meter),
"color" => "#173177"
),
"keyword3" => array (
"value" => date('Y-m-d H:i:s'),
"color" => "#173177"
),
"first" => array (
"value" => '您的设备充电功率超限,连续五次超限后将停止充电服务',
"color" => "#173177"
),
"remark" => array (
"value" => '请及时查看',
"color" => "#173177"
),
)
));
//发送 发送模板消息请求
$resp = http_post($url,$postdata);
}
}else{
//结束订单
//发送模板消息
$this->redisclient->delete($user_id.$meter_id);
//给用户消息通知
lm('config_model');
$access_token = $this->config_model->r(pw('datakey',CONFIG_KEY_GZHH_ACCESS_TOKEN,'platform_id',$order['platform_id']));
$access_token = element('datavalue',$access_token);
if($access_token) {
$url = sprintf("https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=%s", $access_token);
lm('users_model');
$user = $this->users_model->r(pw('id',$user_id));
lm('meters_model');
$meter = $this->meters_model->r(pw('id_open',$meter_id));
lm('platform_config_model');
$platform_config = $this->platform_config_model->r(pw('platform_id',$order['platform_id']));
$template_id = $platform_config['wx_event_template_id'];
$postdata = json_encode(array(
'touser' => element('openid',$user),
'template_id' => $template_id,
'url' => site_url('detail?id='.$meter_id),
'data' => array(
"keyword1" => array (
"value" => $meter_id,
"color" => "#173177"
),
"keyword2" => array ( //地址
"value" => element('name',$meter),
"color" => "#173177"
),
"keyword3" => array (
"value" => date('Y-m-d H:i:s'),
"color" => "#173177"
),
"first" => array (
"value" => '您的设备充电功率连续五次超限,已停止充电服务',
"color" => "#173177"
),
"remark" => array (
"value" => '请知悉',
"color" => "#173177"
),
)
));
$resp = http_post($url,$postdata);
}
//停止订单
//关闭设备
}
function deleteAbnormalCurrentCache($meter_id){
$user_id = 99;
//加载Redis
if($this->redisclient->is_supported() === TRUE){
$this->redisclient->delete($user_id.$meter_id);
$this->redisclient->delete('down_'.$user_id.$meter_id);
}
}
5分钟连续出现某现象+微信模板消息提醒 PHP的更多相关文章
- 【原创分享·微信支付】C# MVC 微信支付之微信模板消息推送
微信支付之微信模板消息推送 今天我要跟大家分享的是“模板消息”的推送,这玩意呢,你说用途嘛,那还是真真的牛逼呐.原因在哪?就是因为它是依赖微信生存的呀,所以他能不 ...
- C# MVC 微信支付之微信模板消息推送
微信支付之微信模板消息推送 今天我要跟大家分享的是"模板消息"的推送,这玩意呢,你说用途嘛,那还是真真的牛逼呐.原因在哪?就是因为它是依赖微信 ...
- 前后端分离djangorestframework—— 接入微信模板消息推送
微信 什么是微信也不多说,跟前面的支付宝一样的 微信支付 微信支付也有个沙箱环境,沙箱环境官方文档 由文档中那句很显眼的话所得,即使是测试环境也需要真实的商户号,所以这个就没法想支付宝那样用沙箱账号来 ...
- java开发微信模板消息推送
发布时间:2018-12-12 技术:springboot+maven 概述 该demo主要涉及微信模板消息推送功能, 详细 代码下载:http://www.demodashi.com/dem ...
- PHP实现微信模板消息发送给指定用户
使用公众号的模板消息功能,必须是认证过的服务号,需要发送微信号的openid,同一微信号在不同公众号下的openid是不同的,在公众号下是唯一的,获取不到微信号 进入公众平台 功能->模板消息 ...
- PHP微信模板消息发送
<?php class Wxtemplate extends Base { function __construct() { $this->appid = config('WXAPP_AP ...
- qhfl-9 微信模板消息推送
开发中用的是测试号 微信公众号认证流程 用户登陆 <!DOCTYPE html> <html lang="en"> <head> <met ...
- 应用jfinal发送微信模板消息的一个bug
严格来讲,这不是一个bug,只是我们应用的方式不对.微信发送模板消息的方法是: HttpUtils.post(sendApiUrl + AccessTokenApi.getAccessTokenStr ...
- 微信模板消息php
微信的模板消息需要认证的公众号后台申请 申请通过后就可以用平台定义的消息模板了 define('IN_ECS', true); require(dirname(__FILE__) . '/includ ...
随机推荐
- java上传文件-大文件以二进制保存到数据库
转自:https://blog.csdn.net/qq_29631069/article/details/70054201 1 一.创建表 oracle: create table baoxianda ...
- WPF游戏,使用move游戏开发
我看了好多游戏的源码,其实每一个,我想做,rpg的都需要移动,那么wpf,win8应用,数据绑定,我们需要一个Thread来让人物移动. 于是用move. 在每个人物,自己和敌人,npc类,都有一个m ...
- Java多线程(1)
线程与进程 进程:程序的执行过程 线程:线程共享进程的资源 Java多线程 实现的方式 继承Tread类:使用getName()获取当前线程名 实现Runnable接口:Thread.currentT ...
- STM32程序编写或调试犯过的错误
1.宏定义后加了分号: eg: define NOKEY_PRES 0; (❌) define NOKEY_PRES 0 (✔) 2.
- C#基础知识之VS的快捷键汇总
VS中默认的常用快捷键.可以根据自己的习惯,自己设置快捷方式,工具->选项->环境->键盘. 编辑相关的键盘快捷键 Ctrl + K,Ctrl + C = 注释选定行 Ctrl + ...
- u-boot 用哪个lds链接脚本
顶层Makefile文件中 : ifndef LDSCRIPT #LDSCRIPT := $(srctree)/board/$(BOARDDIR)/u-boot.lds.debug ifd ...
- ivew 封装删除 对话框
封装的组件 <template> <Modal footer-hide :closable="false" title="删除确认" v-mo ...
- Facebook再现丑闻,约100位应用程序开发人员偷看用户数据
Facebook今天披露了另一起安全事件,承认大约100名应用程序开发人员可能不正确地访问了某些Facebook组中的用户数据,包括他们的姓名和个人资料图片. 在周二发布的博客文章中,Facebook ...
- ionic icon(图标)
https://www.runoob.com/ionic/ionic-icon.html ionic 也默认提供了许多的图标,大概有 700 多个,针对 Android 和 iOS 有不同的样式.
- c++ string去除左右空格
res.substr(res.find_first_not_of(' '),res.find_last_not_of(' ') + 1)