当前位置 主页 > 服务器问题 > win服务器问题汇总 >

    监控服务调用微信API如何给自己发告警信息

    栏目:win服务器问题汇总 时间:2019-12-05 14:14

    今天心血来潮,想试试用微信公众号给自己发消息。主要是想如何运维监控的设备故障时可以通过微信告警。

    查了一下开发者文档,发现普通未认证订阅号不能通过API群发,认证订阅号每天只能群一条信号,而认证的服务号每月发给每个月户也只有4条。瞬间心凉了一半,于是网上又搜了一下,发现有个“WeiXin-Private-API-master”的东东说是可以单独给每个关注的用户发送,于是下载试了一下,失败。再去查查官方文档,已找不到这个“single send”接口,官方的FAQ里回答也是没有这个功能。

    最后使用公众平台测试账号,最后总算成功了。具体的步骤如下:

    注:测试账号每天可以发送100条分组群发信息和100条openid列表群发信息。

    1.注册公众平台订阅号(个人的未认证订阅号即可)

    2.开通开发者中心功能,注册公众平台测试账号。获取到appID和appsecret

    3.通过appID和appsecret获取access_token。(也即是临时凭证,有效时间为两小时,需要在到期前去更新)。获取的url为 
    https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
    (将上面的APPID和APPSECRET替换成第2步获取到的ID和密码)

    4.使用个人微信号关注这个测试账号,关注后在右方会出现加密后的微信号(也就是OpenID)

    5.通过脚本调用API,这里用PHP,以OpenID列表群发为例

    <?php
    $post_data = array( "touser"=>array('OpenID1', 'OpenID2'), 
    //把OpenID替换成第4步获取到的加密微信号注意这里至少要两个OpenID,否则会返回错误信息。如果只有一个账号关注了的话,可以自己再随便造一个,或两个OpenID写成一样
              "msgtype"=> "text",
              "text" => array( "content" => "I am msg.") 
          ); 
    $post_data = json_encode($post_data) ;
     
    //因为API只接受json的格式的数据,所以要进行json encode,当然,以上的代码也可直接写成下面这样:
    //$postdata = '{"touser":["OpenID1","OpenID2"],"msgtype":"text","text":{"content":"I am msg."}}';
     
    $url='https://api.weixin.qq.com/cgi-bin/message/mass/send?access_token=ACCESS_TOKEN';
    //把ACCESS_TOKEN替换成第3步获取到的token
     
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_URL,$url); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $p); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    //上面两行是为了解决https证书问题,不加的话会报错,所以直接信任证书了。
    $result=curl_exec($ch); echo curl_error($ch);curl_close($ch);
    print_r($result);

    6.用浏览器打开这个页面,显示成功:

    7.在手机上查看订阅号发来的信息。(有一些延迟,所以对于需要紧急处理的监控不适合用微信订阅号来发)