公司这边有做监控异常并将消息发送到企业公众号的功能。大概如下:

 定时任务检测异常消息

 将消息存入redis队列

 定时处理队列异常消息

 发送到微信企业号对应的部门组

这里我们来看一下微信发送过程,其他不做讨论。

简单的来说,只需要两个步骤即可:

 获取AccessToken
发送消息到对应的项目部门组

一 获取AccessToken

AccessToken是企业号的全局唯一票据,调用接口时需携带AccessToken。
AccessToken需要用CorpID和Secret来换取,不同的Secret会返回不同的AccessToken。正常情况下AccessToken有效期为7200秒,有效期内重复获取返回相同结果。access_token至少保留512字节的存储空间。

请求说明

Https请求方式: GET
https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=id&corpsecret=secrect corpid     企业Id
corpsecret  管理组的凭证密钥

二 发送消息

企业可以主动发消息给成员

请求说明

Https请求方式: POST
https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=ACCESS_TOKEN
消息型应用支持文本、图片、语音、视频、文件、图文等消息类型。主页型应用只支持文本消息类型,且文本长度不超过20个字。

参数

  必须 说明
touser 成员ID列表(消息接收者,多个接收者用‘|’分隔,最多支持1000个)。特殊情况:指定为@all,则向关注该企业应用的全部成员发送
toparty 部门ID列表,多个接收者用‘|’分隔,最多支持100个。当touser为@all时忽略本参数
totag 标签ID列表,多个接收者用‘|’分隔,最多支持100个。当touser为@all时忽略本参数
msgtype 消息类型,此时固定为:text (支持消息型应用跟主页型应用)
agentid 企业应用的id,整型。可在应用的设置页面查看
content 消息内容,最长不超过2048个字节,注意:主页型应用推送的文本消息在微信端最多只显示20个字(包含中英文)
safe 表示是否是保密消息,0表示否,1表示是,默认0

其实过程挺简单, 简单代码如下:

<?php
/**
* 微信公众号信息处理
*/
class WeixinMessage { //corpid
public $corpid = 'xxxxxx';
//sercret
public $corpsecret = 'xxxxx'; //微信发消息api
public $weixinSendApi = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token='; /**
* 请求微信Api,获取AccessToken
*/
public function getAccessToken()
{
error_reporting(E_ALL);
//临时存放 并不安全
$filePath = ROOT.'cache/weixinToken.txt';
$tokenInfo = array();
if(is_file($filePath)){
$tokenInfo = json_decode(file_get_contents($filePath),TRUE);
}
if(!isset($tokenInfo['access_token']) || time()>$tokenInfo['expires_in']){
//更新access_token
$getAccessTokenApi = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={$this->corpid}&corpsecret={$this->corpsecret}"; $jsonString = $this->curlGet($getAccessTokenApi);
$jsonInfo = json_decode($jsonString,true);
if(isset($jsonInfo['access_token'])) {
$jsonInfo['expires_in'] = time() + ;
file_put_contents($filePath, json_encode($jsonInfo));
}
$tokenInfo = $jsonInfo;
} if(isset($tokenInfo['access_token']) && $tokenInfo['expires_in']>time()){
return $tokenInfo['access_token'];
} else {
return FALSE;
}
} /**
* 发信息接口
*
* @author wanghan
* @param $content 发送内容
* @param $touser 接收的用户 @all全部 多个用 | 隔开
* @param $toparty 接收的群组 @all全部 多个用 | 隔开
* @param $totag 标签组 @all全部 多个用 | 隔开
* @param $agentid 应用id
* @param $msgtype 信息类型 text=简单文本
*/
public function send($content,$touser='@all',$toparty='',$totag='',$agentid=,$msgtype='text')
{
$api = $this->weixinSendApi.$this->getAccessToken();
$postData = array(
'touser' => $touser,
'toparty' => $toparty,
'totag' => $totag,
'msgtype' => $msgtype,
'agentid' => $agentid,
'text' => array(
'content' => urlencode($content)
)
); $postString = urldecode(json_encode($postData));
$ret = $this->curlPost($api,$postString);
$retArr = json_decode($ret,TRUE);
if(isset($retArr['errcode']) && $retArr['errcode'] == ) {
return true;
} else {
return false;
}
} /**
* Curl Post数据
* @param string $url 接收数据的api
* @param string $vars 提交的数据
* @param int $second 要求程序必须在$second秒内完成,负责到$second秒后放到后台执行
* @return string or boolean 成功且对方有返回值则返回
*/
function curlPost($url, $vars, $second=)
{
$ch = curl_init();
curl_setopt($ch,CURLOPT_TIMEOUT,$second);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, );
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST, );
curl_setopt($ch,CURLOPT_POSTFIELDS,$vars);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,FALSE);
// curl_setopt($ch, CURLOPT_HTTPHEADER, array(
// 'Content-Type: application/json; charset=utf-8',
// 'Content-Length: ' . strlen($vars))
// );
$data = curl_exec($ch);
curl_close($ch);
if($data)
return $data;
return false;
} /**
* CURL get方式提交数据
* 通过curl的get方式提交获取api数据
* @param string $url api地址
* @param int $second 超时时间,单位为秒
* @param string $log_path 日志存放路径,如果没有就不保存日志,还有存放路径要有读写权限
* @return true or false
*/
function curlGet($url,$second=,$log_path='', $host='', $port='')
{
$ch = curl_init();
curl_setopt($ch,CURLOPT_TIMEOUT,$second);
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_HEADER, );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, );
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,FALSE);
if(!empty($host)){
curl_setopt($ch,CURLOPT_HTTPHEADER,$host);
}
if(!empty($port)){
curl_setopt($ch,CURLOPT_PORT,$port);
}
$data = curl_exec($ch);
$return_ch = curl_errno($ch);
curl_close($ch);
if($return_ch!=)
{
if(!empty($log_path))
file_put_contents($log_path,curl_error($ch)."\n\r\n\r",FILE_APPEND);
return false;
}
else
{
return $data;
}
}
}

微信企业号发送监控消息【php】的更多相关文章

  1. python与shell通过微信企业号发送消息

    python与shell通过微信企业号发送信息,脚本来源于网络,做好搬运工,哈哈,相应的参考链接放在末位 shell版本: #!/bin/bash # CropID="xxxx" ...

  2. 微信企业号 发送信息 shell

    微信企业号发送信息shell #可作为shell函数模块调用,用于微信通知.jenkins发版微信通知等等 # 微信API官方文档 https://work.weixin.qq.com/api/doc ...

  3. 通过微信企业号发送zabbix报警

    采用微信报警时,管理员账户中必须要设置"示警媒体"一项,"收件人"一项可随便填写一下.其它成员则可以不用添加设置. ---------------------- ...

  4. JAVA微信公众号网页开发 —— 接收微信服务器发送的消息

    WeixinMessage.java package com.test; import java.io.Serializable; /** * This is an object that conta ...

  5. 【原创】在 ASP.NET Core 3.1 中使用 Senparc.Weixin.Work 企业微信 SDK —— 发送文本消息

    下面在 Web 空应用里展示一个简单的例子来实现发送文本消息. 本文目录: 创建 Web 空应用 命令行方式创建 添加SDK引用 命令行方式 进入项目目录 添加包引用 配置和使用SDK 添加appse ...

  6. 【原创】在 .NET Core 3.1 中使用 Senparc.Weixin.Work 企业微信 SDK —— 发送文本消息

    下面在控制台应用里展示一个简单的例子来实现发送文本消息. 本文目录: 创建控制台应用 添加SDK引用 命令行方式 进入项目目录 添加包引用 配置和使用SDK 添加appsettings.json文件 ...

  7. [实例]JAVA调用微信接口发送图文消息,不用跳到详情页

    package com.test; import java.io.IOException; import java.io.InputStream; import java.io.OutputStrea ...

  8. django 微信企业号 返回text消息

    from django.template import Context,Template textTemplate=""" <xml> <ToUserN ...

  9. 微信程序开发系列教程(三)使用微信API给微信用户发文本消息

    这个系列的第二篇教程,介绍的实际是被动方式给微信用户发文本消息,即微信用户关注您的公众号时,微信平台将这个关注事件通过一个HTTP post发送到您的微信消息服务器上.您对这个post请求做了应答(格 ...

随机推荐

  1. jeesite快速开发平台(五)----用户-角色-部门-区域-菜单-权限表关系

    转自: https://blog.csdn.net/u011781521/article/details/78994904

  2. C语言实现 读取写入ini文件实现(转)

    #include <stdio.h> #include <string.h> /* * 函数名: GetIniKeyString * 入口参数: title * 配置文件中一组 ...

  3. 新手C#重载、重写的学习2018.08.04

    重载:在同一类(class)中,使用相同的方法名称,不同的参数和(不一定)不同的返回值类型构造成的方法. 举例: class OverLoadTest { public void Hello() { ...

  4. Workgroup&Domain(Realm)

    [工作组 Work Group] 在一个网络内,可能有成百上千台电脑,如果这些电脑不进行分组,都列在“网上邻居”内,可想而知会有多么乱.为了解决这一问题,Windows 9x/NT/2000就引用了“ ...

  5. 自己制作winhex的模板

    winhex有很多的官方模板,可以在网上下载(后缀tpl)并放至它的安装目录,即可使用.不过要是自己能自己制作,这才好玩,不是么?! 打开模板管理器,可以选中其中一个模板,下面有应用,有编辑,你点开编 ...

  6. redis的连接方法|连接池|操作

    1.先看下redis的连接 import redis # 连接服务端 r = redis.Redis(host="127.0.0.1",port=6379) #获取所有的key值 ...

  7. Eclipse 安装PyDev开发Python及初步使用

    Eclipse 安装PyDev插件后可开发Python 参考网址:https://blog.csdn.net/wscdylzjy/article/details/44066977 具体请参考上述网址, ...

  8. 宽字符、多字节、unicode、utf-8、gbk编码转化

    今天遇到一个编码的问题,困惑了我很长时间,所以就简要的的了解了一下常用的编码类型. 我们最常见的是assic编码,它是一种单字节编码,对多容纳256个字符. 我们在编程的时候经常遇到unicode,u ...

  9. sizeToFit & sizeThatFits

    [sizeToFit & sizeThatFits] 1.sizeToFit,根据sizeThatFits方法返回的大小来调整receiver的大小.自定义子类不应该覆盖这个方法. 2.siz ...

  10. 给力分享新的ORM => Dapper( 转)

    出处:http://www.cnblogs.com/sunjie9606/archive/2011/09/16/2178897.html 最近一直很痛苦,想选一个好点的ORM来做项目,实在没遇到好的. ...