php微信關注後消息回覆以及關鍵字回覆

<?php
header('content-type:text/html;charset=utf-8');
define("TOKEN", "weixin"); //define your token
$wx = new wechatCallbackapiTest();
if($_GET['echostr']){
    $wx->valid(); //如果發來了echostr則進行驗證
}else{
    $wx->responseMsg(); //如果沒有echostr,則返回消息
}
    
 
class wechatCallbackapiTest{
 
    //微信驗證
    public function valid(){ //valid signature , option

        $echoStr = $_GET["echostr"];
        if($this->checkSignature()){ //調用驗證字段
            echo $echoStr;
            exit;
        }
    }
 
    /*
     返回消息數據
    */
    public function responseMsg(){

        $postStr = file_get_contents('php://input');//php7.0以上用這個接收參數、
        //數據
        // "<xml>
        // <ToUserName><![CDATA[gh_bb86c5992fd8]]><\/ToUserName>\n
        // <FromUserName><![CDATA[ojTmjwa0o63WAjWfbbkOUU-lr1IA]]><\/FromUserName>\n
        // <CreateTime>1550115489<\/CreateTime>\n
        // <MsgType><![CDATA[event]]><\/MsgType>\n
        // <Event><![CDATA[subscribe]]><\/Event>\n
        // <EventKey><![CDATA[]]><\/EventKey>\n
        // <\/xml>"
        //get post data, May be due to the different environments
        // $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //接收微信發來的XML數據   版本php7.0以上這個函數已經作廢
        file_put_contents('02.txt',json_encode($postStr));
        //extract post data
        if(!empty($postStr)){
         
            //解析post來的XML爲一個對象$postObj
            $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);

            $fromUsername = $postObj->FromUserName; //請求消息的用戶
            $toUsername = $postObj->ToUserName; //"我"的公衆號id
            $keyword = trim($postObj->Content); //消息內容
            $time = time(); //時間戳
            $msgtype = 'text'; //消息類型:文本
            $textTpl = "<xml>
            <ToUserName><![CDATA[%s]]></ToUserName>
            <FromUserName><![CDATA[%s]]></FromUserName>
            <CreateTime>%s</CreateTime>
            <MsgType><![CDATA[%s]]></MsgType>
            <Content><![CDATA[%s]]></Content>
            </xml>";
            file_put_contents('01.txt',json_encode($postObj));


            if(strtolower($postObj->MsgType == 'event' )){ //如果XML信息裏消息類型爲event
                if($postObj->Event == 'subscribe'){ //如果是訂閱事件
                    // $contentStr = $fromUsername."歡迎訂閱misaka去年夏天32434!\n更多精彩內容:http://blog.csdn.net/misakaqunianxiatian";
                    // $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgtype, $contentStr);
                    // echo $resultStr;
                    $contentStrq = "歡迎訂閱:請點擊鏈接<a href='http://blog.csdn.net/misakaqunianxiatian'>wordwrap</a>";
                    $resultStrq = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgtype, $contentStrq);
                    echo $resultStrq;
                    exit();
                }
            }

            switch (keyword) {
                case '1':
                    $contentStr = '我是1號';
                    break;
                case '2':
                    $contentStr = '我是2號';
                    break;
                default:
                    $contentStr = '輸入數字試試';
                    break;
            }
            $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgtype, $contentStr);
            echo $resultStr;
            file_put_contents('01.txt',json_encode($resultStr));
            exit(); 

        }else {
            echo "";
            exit;
        }
    }
  
    //驗證字段
    private function checkSignature(){
 
        $signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"]; 

        $token = TOKEN;
        $tmpArr = array($token, $timestamp, $nonce);
        sort($tmpArr);
        $tmpStr = implode( $tmpArr );
        $tmpStr = sha1( $tmpStr );

        if( $tmpStr == $signature ){
            return true;
        }else{
            return false;
        }
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章