轻风易扬

如果不能在混乱中创造出秩序,那么设计也就失去了意义,我愿去寻找这种秩序感

© 轻风易扬
Powered by LOFTER

轻风易扬之后台技术学习(9)--通过微信查看系统负载

小菜敲键盘:

最终效果:



1. 在微信公共账号登陆

   http://mp.weixin.qq.com 

2.设置消息接口


URL是接口请求地址,只要能响应请求就可以了.Token是用于验证的,自己填写.

( 在提交的时候需要验证接口URL,验证的方法就是原样的输出$_GET["echostr"]内容 )

3.流程

当用户通过微信发送消息至公共账号时,微信会先将消息内容发送到填写的URL中,接着在将URL返回的内容回复的用户.

返回内容的格式

<xml>

<ToUserName><![CDATA[%s]]></ToUserName>

<FromUserName><![CDATA[%s]]></FromUserName>

<CreateTime>%s</CreateTime>

<MsgType><![CDATA[%s]]></MsgType>

<Content><![CDATA[%s]]></Content>

<FuncFlag>0</FuncFlag>

</xml>

接口可以通过$GLOBALS["HTTP_RAW_POST_DATA"]取出消息内容,大致如下

array(

'ToUserName' => 'gh_796d31df32ca',

'FromUserName' => 'ozd7Ajq3z7-7ARPDJQCfVCful8k',

'CreateTime' => '1359637234',

'MsgType' => 'text',

'Content' => '消息正文',

'MsgId' => '58394235901414'

)

4.控制器代码

function index(){

          

    $this->load->library('weixin');

    $this->L->weixin->init();

    $msg     = $this->L->weixin->getMsg();

    $content = '';

          

    switch (trim($msg)) {

        case 'C':

            $content = "cpu负载:\n";

            $str     = shell_exec('more /proc/stat');

            $pattern = "/(cpu[0-9]?)[\s]+([0-9]+)[\s]+([0-9]+)[\s]+([0-9]+)[\s]+([0-9]+)[\s]+([0-9]+)[\s]+([0-9]+)[\s]+([0-9]+)/";

            preg_match_all($pattern, $str, $out);

            $content .= "共有".count($out[1])."个CPU,每个CPU利用率如下:";

            for($n=0;$n<count($out[1]);$n++){

                $content .= "\n ".$out[1][$n]."=".(100*($out[1][$n]+$out[2][$n]+$out[3][$n])/($out[4][$n]+$out[5][$n]+$out[6][$n]+$out[7][$n]))."%";

            }

            break;

        case 'M':

            $content = "内存负载:\n";

            $str = shell_exec('more /proc/meminfo');

            $pattern = "/(.+):\s*([0-9]+)/";

            preg_match_all($pattern, $str, $out);

            $content .= "物理内存总量:".$out[2][0];

            $content .= "\n已使用的内存:".$out[2][1];

            $content .= "\nz内存使用率:".(100*($out[2][0]-$out[2][1])/$out[2][0]);

            break;

        case 'N':

            $content = "网络情况:\n";

            $str     = shell_exec('more /proc/net/dev');

            $pattern = "/(eth[0-9]+):\s*([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+([0-9]+)/";

            preg_match_all($pattern, $str, $out);

            $content .= "共有".count($out[1])."个网络接口,每个网络接口利用率如下:";

            for($n=0;$n<count($out[1]);$n++){

                $content .= "\n ".$out[1][$n].":收到 ".$out[3][$n]." 个数据包,发送 ".$out[11][$n]." 个数据包";

            }

            break;

        default:

            $content = "指令格式:\n C => 查看cup使用率\n M => 查看内存使用率\n N => 查看网络接口";

            break;

    }

    $this->L->weixin->responseMsg($content);

}

5.类

Class WeiXin{

          

    private $postObj = array();

          

    public function init(){

        $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];

        if (empty($postStr)){

            return false;

        }

        $this->postObj    = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);

    }

          

    public function getMsg(){

        return $this->postObj->Content;

    }

          

    public function responseMsg($content , $msgType = "text"){

        $textTpl      = "<xml>

                        <ToUserName><![CDATA[%s]]></ToUserName>

                        <FromUserName><![CDATA[%s]]></FromUserName>

                        <CreateTime>%s</CreateTime>

                        <MsgType><![CDATA[%s]]></MsgType>

                        <Content><![CDATA[%s]]></Content>

                        <FuncFlag>0</FuncFlag>

                        </xml>";  

        $fromUsername = $this->postObj->FromUserName;

        $toUsername   = $this->postObj->ToUserName;         

        $resultStr    = sprintf($textTpl, $fromUsername, $toUsername, time(), $msgType, $content);

        echo $resultStr;

    }

          

    /**

     * 响应客户端消息

     */

    public function responseMsg3(){

          

        //get post data, May be due to the different environments

        $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];

        if (empty($postStr)){

            return false;

        }

          

        $time         = time();

        $postObj      = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);

        $fromUsername = $postObj->FromUserName;

        $toUsername   = $postObj->ToUserName;

        $keyword      = trim($postObj->Content);

        $textTpl      = "<xml>

                        <ToUserName><![CDATA[%s]]></ToUserName>

                        <FromUserName><![CDATA[%s]]></FromUserName>

                        <CreateTime>%s</CreateTime>

                        <MsgType><![CDATA[%s]]></MsgType>

                        <Content><![CDATA[%s]]></Content>

                        <FuncFlag>0</FuncFlag>

                        </xml>";            

        $msgType = "text";

        $contentStr = ">>";

        $contentStr .= json_encode($postObj);

        $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);

        echo $resultStr;

    }

          

    /**

     * 用于网址接入平台时的验证(接入的时候使用一次就够了)

     */

    public function valid(){

        $echoStr = $_GET["echostr"];

        if($this->checkSignature()){

            echo $echoStr;

            exit;

        }

    }

          

    /**

     * 合法性进行校验

     */

    private function checkSignature(){

          

        if( !isset($_GET["signature"]) || !isset($_GET["timestamp"]) || !isset($_GET["nonce"]) ){

            return false;

        }

        $signature    = $_GET["signature"];

        $timestamp    = $_GET["timestamp"];

        $nonce        = $_GET["nonce"];

                          

        $tmpArr = array(TOKEN, $timestamp, $nonce);

        sort($tmpArr);

        $tmpStr = implode( $tmpArr );

        $tmpStr = sha1( $tmpStr );

              

        if( $tmpStr == $signature ){

            return true;

        }else{

            return false;

        }

    }

文档:

http://mp.weixin.qq.com/cgi-bin/readtemplate?t=wxm-callbackapi-doc&lang=zh_CN#token


评论
热度 ( 1 )
  1. 轻风易扬愤怒的小菜 转载了此文字
TOP