微信企业号发送监控消息【php】
2018-06-22 05:21:43来源:未知 阅读 ()
公司这边有做监控异常并将消息发送到企业公众号的功能。大概如下:
1 定时任务检测异常消息 2 将消息存入redis队列 3 定时处理队列异常消息 4 发送到微信企业号对应的部门组
这里我们来看一下微信发送过程,其他不做讨论。
简单的来说,只需要两个步骤即可:
1 获取AccessToken 2 发送消息到对应的项目部门组
一 获取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() + 7100; 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=8,$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'] == 0) { 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=30) { $ch = curl_init(); curl_setopt($ch,CURLOPT_TIMEOUT,$second); curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_POST, 1); 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=30,$log_path='', $host='', $port='') { $ch = curl_init(); curl_setopt($ch,CURLOPT_TIMEOUT,$second); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 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!=0) { if(!empty($log_path)) file_put_contents($log_path,curl_error($ch)."\n\r\n\r",FILE_APPEND); return false; } else { return $data; } } }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:php加密与解密
下一篇:一次wamp搭建过程
- Laravel 中 “规范” 的开发短信验证码发送功能 2020-02-08
- php调用云片网接口发送短信的实现方法 2019-12-14
- php邮件发送的两种方式 2019-11-30
- 详析php发送post请求的方法 2019-10-09
- 微信公众平台开发之配置与请求 2019-09-23
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash