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
//回调验证
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


    zabbix微信 | 微信对接自己服务器(2)_第1张图片
    开启回调模式
  • 验证成功后将index.php改成如下可实现接收信息并做出反馈

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 =  
" 
 
 
".sReqTimeStamp." 
 
 
";'*/
//返回图文新闻信息,更多方法参考官方接口文档,被动响应消息里边的代码更换XML文件
$sRespData =  
"
   
   
   ".sReqTimeStamp."
   
   1
   
       
           <![CDATA[测试]]>
           
           
           
       
   
";
$sEncryptMsg = ""; //xml格式的密文 
$errCode = $wxcpt->EncryptMsg($sRespData, $sReqTimeStamp, $sReqNonce, $sEncryptMsg); 
if ($errCode == 0) {
print($sEncryptMsg);
} else { 
print($errCode . "\n\n");
}
?>
  • 自己可以根据业务需求,接收到相应信息后,执行本地脚本并返回操作结果实现微信控制zabbix。


    zabbix微信 | 微信对接自己服务器(2)_第2张图片
    最终效果

你可能感兴趣的:(zabbix微信 | 微信对接自己服务器(2))