zabbix微信 | 微信对接自己服务器(2)

上接使用微信告警

企业号微信对接自己服务器

1.本地服务器与微信服务器的信任

  • 本地具有独立外网ip服务器获取微信服务器的ip段
#CropID、Secret微信企业号中“设置--功能--权限管理”可以找到
CropID='*******' 
Secret='*******'
GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret"
Gtoken=$(/usr/bin/curl -s -G "$GURL" | awk -F\" '{print $4}')
/usr/bin/curl "https://qyapi.weixin.qq.com/cgi-bin/getcallbackip?access_token=$Gtoken"
  • 在iptables 加入如下例子:
#将取得的ip加入信任中(使其可以访问到这个服务器上的资源)
-A INPUT -s 101.226.103.0/24 -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT

2.本地部署微信加密文件
在本地服务器(具有外网ip)部署php+nginx,使其可以在公网访问

  • 下载加解密库部署在自己服务器上,使其可以在网络上访问,本文以php为例
//filename:index.php
//回调验证
<?php
//添加腾讯提供的接口文件WXBizMsgCrypt.php由上文连接官方下载
include_once "inc/WXBizMsgCrypt.php";

//设置自己企业号的相关参数
$encodingAesKey="";//企业微信中应用中心开回调模式时自定义
$corpId="";//企业微信中设置找
$token="";//企业微信中应用中心开回调模式时自定义

//获取待验证的参数
$sVerifyMsgSig = $_GET["msg_signature"];
$sVerifyTimeStamp = $_GET["timestamp"];
$sVerifyNonce = $_GET["nonce"];
$sVerifyEchoStr = $_GET["echostr"];

//以企业号参数为参数生成解码对象
$wxcpt = new WXBizMsgCrypt($token, $encodingAesKey, $corpId);

//进行地址解析
$errCode = $wxcpt->VerifyURL($sVerifyMsgSig, $sVerifyTimeStamp, $sVerifyNonce, $sVerifyEchoStr, $sEchoStr);
if ($errCode == 0) {
    //如果没有异常就返回加密的echostr的明文
    echo $sEchoStr;
} else {
    //出现异常就返回异常编码
    echo $errCode;
}
?>
  • 微信所需文件路径结构
├── inc
│   ├── errorCode.php
│   ├── pkcs7Encoder.php
│   ├── sha1.php
│   ├── WXBizMsgCrypt.php
│   └── xmlparse.php
├── index.php

3.开启回调模式

  • 在自己创建的应用上开启回调模式填入URL


    开启回调模式
  • 验证成功后将index.php改成如下可实现接收信息并做出反馈

<?php
include_once "inc/WXBizMsgCrypt.php";
//用户参数
$encodingAesKey = "";
$token = "";
$corpId = "";
//回调认证
$sVerifyMsgSig =$_GET["msg_signature"];
$sVerifyTimeStamp = $_GET["timestamp"];
$sVerifyNonce = $_GET["nonce"];
$sVerifyEchoStr =$_GET["echostr"];
$EchoStr = "";
$wxcpt = new WXBizMsgCrypt($token, $encodingAesKey, $corpId);
$errCode = $wxcpt->VerifyURL($sVerifyMsgSig, $sVerifyTimeStamp, $sVerifyNonce, $sVerifyEchoStr, $sEchoStr);
if ($errCode == 0) {
print $sEchoStr;
} else { 
print($errCode . "\n\n");
}
//接收信息
$sReqData = file_get_contents("php://input");
$sMsg = ""; // 解析之后的明文
$errCode = $wxcpt->DecryptMsg($sVerifyMsgSig, $sVerifyTimeStamp, $sVerifyNonce, $sReqData, $sMsg);
if ($errCode == 0) {
file_put_contents('msg/'.$sVerifyTimeStamp.'.txt', $sMsg);//明文输出收到的xml
$xml = new DOMDocument();
$xml->loadXML($sMsg);
$content = $xml->getElementsByTagName('Content')->item(0)->nodeValue;//文字信息的内容
$FromUserName = $xml->getElementsByTagName('FromUserName')->item(0)->nodeValue; //发送用户的id
$MsgType = $xml->getElementsByTagName('MsgType')->item(0)->nodeValue; //消息类型
$Event = $xml->getElementsByTagName('Event')->item(0)->nodeValue; //事件类型
$ScanResult = $xml->getElementsByTagName('ScanResult')->item(0)->nodeValue; //扫描结果
$PicUrl = $xml->getElementsByTagName('PicUrl')->item(0)->nodeValue;//图片链接
$Latitude = $xml->getElementsByTagName('Latitude')->item(0)->nodeValue; //经度
$Longitude = $xml->getElementsByTagName('Longitude')->item(0)->nodeValue;//纬度
$Precision = $xml->getElementsByTagName('Precision')->item(0)->nodeValue; //精度
$MediaId = $xml->getElementsByTagName('MediaId')->item(0)->nodeValue;//资源ID
} else { 
print($errCode . "\n\n");
}
//根据接收信息做反馈-文字
if($MsgType == "text") {
switch($content){ 
case "1": 
$mycontent="我收到了数字1";
$MsgType=text; 
break; 
case "2": 
$mycontent="我收到了数字2";
$MsgType=text; 
break; 
case "3": 
$mycontent="我收到了数字3";
$MsgType=text;
break; 
default : 
$mycontent="输入123试试";//默认回复
$MsgType=text; 
break; 
}
}
//返回文字信息
/*$sRespData =  
"<xml> 
<ToUserName><![CDATA[".$reqFromUserName."]]></ToUserName> 
<FromUserName><![CDATA[".$corpId."]]></FromUserName> 
<CreateTime>".sReqTimeStamp."</CreateTime> 
<MsgType><![CDATA[text]]></MsgType> 
<Content><![CDATA[".$mycontent."]]></Content> 
</xml>";'*/
//返回图文新闻信息,更多方法参考官方接口文档,被动响应消息里边的代码更换XML文件
$sRespData =  
"<xml>
   <ToUserName><![CDATA[".$reqFromUserName."]]></ToUserName>
   <FromUserName><![CDATA[".$corpId."]]></FromUserName>
   <CreateTime>".sReqTimeStamp."</CreateTime>
   <MsgType><![CDATA[news]]></MsgType>
   <ArticleCount>1</ArticleCount>
   <Articles>
       <item>
           <Title><![CDATA[测试]]></Title>
           <Description><![CDATA[详细内容]]></Description>
           <PicUrl><![CDATA[http://www.baidu.com/images/logo.jpg]]></PicUrl>
           <Url><![CDATA[http://www.baidu.com]]></Url>
       </item>
   </Articles>
</xml>";
$sEncryptMsg = ""; //xml格式的密文 
$errCode = $wxcpt->EncryptMsg($sRespData, $sReqTimeStamp, $sReqNonce, $sEncryptMsg); 
if ($errCode == 0) {
print($sEncryptMsg);
} else { 
print($errCode . "\n\n");
}
?>
  • 自己可以根据业务需求,接收到相应信息后,执行本地脚本并返回操作结果实现微信控制zabbix。


    最终效果
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,099评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,828评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,540评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,848评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,971评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,132评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,193评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,934评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,376评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,687评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,846评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,537评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,175评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,887评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,134评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,674评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,741评论 2 351

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,642评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,892评论 25 707
  • 1.21点30分,一个人漫步在街道上。关掉腾讯视频,打算写点东西,给现在的自己,给将来的自己。 2.天气特别好,微...
    尘世书童阅读 117评论 0 1
  • 这里的天空近得好像可以触摸和感觉,因为空气稀薄,所以阳光充盈。晴天时,蓝天就像一块巨大的幕布,垂在草原所有的景物之...
    清潇MAY阅读 465评论 0 2
  • 相爱恨早 离开了属于你我的城市, 离开了你, 又一个人继续孤独寂寞的活着。 是一段漫长暗恋的开始, 还是个分开生活...
    南素简阅读 164评论 0 0