亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

微信公眾平臺開發接口PHP SDK完整版

2024-05-04 23:38:51
字體:
來源:轉載
供稿:網友
官方提供的SDK只有一個文本消息功能,我們將所有消息的消息類型及事件響應都整理了進來,并且加入日志記錄
 

代碼如下:

更新日志:

2013-01-01 版本1.0
2014-03-15 增加圖片、視頻、語音的內容回復
2014-04-09 增加菜單鏈接事件
2014-04-10 修改文本回復的判定方法

 

復制代碼代碼如下:

<?php
/*
    方倍工作室
    CopyRight 2014 All Rights Reserved
*/

 

define("TOKEN", "weixin");

$wechatObj = new wechatCallbackapiTest();
if (!isset($_GET['echostr'])) {
    $wechatObj->responseMsg();
}else{
    $wechatObj->valid();
}

class wechatCallbackapiTest
{
    //驗證消息
    public function valid()
    {
        $echoStr = $_GET["echostr"];
        if($this->checkSignature()){
            echo $echoStr;
            exit;
        }
    }

    //檢查簽名
    private function checkSignature()
    {
        $signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];
        $token = TOKEN;
        $tmpArr = array($token, $timestamp, $nonce);
        sort($tmpArr, SORT_STRING);
        $tmpStr = implode($tmpArr);
        $tmpStr = sha1($tmpStr);

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

    //響應消息
    public function responseMsg()
    {
        $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
        if (!empty($postStr)){
            $this->logger("R ".$postStr);
            $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
            $RX_TYPE = trim($postObj->MsgType);

            switch ($RX_TYPE)
            {
                case "event":
                    $result = $this->receiveEvent($postObj);
                    break;
                case "text":
                    $result = $this->receiveText($postObj);
                    break;
                case "image":
                    $result = $this->receiveImage($postObj);
                    break;
                case "location":
                    $result = $this->receiveLocation($postObj);
                    break;
                case "voice":
                    $result = $this->receiveVoice($postObj);
                    break;
                case "video":
                    $result = $this->receiveVideo($postObj);
                    break;
                case "link":
                    $result = $this->receiveLink($postObj);
                    break;
                default:
                    $result = "unknow msg type: ".$RX_TYPE;
                    break;
            }
            $this->logger("T ".$result);
            echo $result;
        }else {
            echo "";
            exit;
        }
    }

    //接收事件消息
    private function receiveEvent($object)
    {
        $content = "";
        switch ($object->Event)
        {
            case "subscribe":
                $content = "歡迎關注方倍工作室 ";
                $content .= (!empty($object->EventKey))?("/n來自二維碼場景 ".str_replace("qrscene_","",$object->EventKey)):"";
                break;
            case "unsubscribe":
                $content = "取消關注";
                break;
            case "SCAN":
                $content = "掃描場景 ".$object->EventKey;
                break;
            case "CLICK":
                switch ($object->EventKey)
                {
                    case "COMPANY":
                        $content = "方倍工作室提供互聯網相關產品與服務。";
                        break;
                    default:
                        $content = "點擊菜單:".$object->EventKey;
                        break;
                }
                break;
            case "LOCATION":
                $content = "上傳位置:緯度 ".$object->Latitude.";經度 ".$object->Longitude;
                break;
            case "VIEW":
                $content = "跳轉鏈接 ".$object->EventKey;
                break;
            default:
                $content = "receive a new event: ".$object->Event;
                break;
        }
        $result = $this->transmitText($object, $content);
        return $result;
    }

    //接收文本消息
    private function receiveText($object)
    {
        switch ($object->Content)
        {
            case "文本":
                $content = "這是個文本消息";
                break;
            case "圖文":
            case "單圖文":
                $content = array();
                $content[] = array("Title"=>"單圖文標題",  "Description"=>"單圖文內容", "PicUrl"=>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958");
                break;
            case "多圖文":
                $content = array();
                $content[] = array("Title"=>"多圖文1標題", "Description"=>"", "PicUrl"=>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958");
                $content[] = array("Title"=>"多圖文2標題", "Description"=>"", "PicUrl"=>"http://d.hiphotos.bdimg.com/wisegame/pic/item/f3529822720e0cf3ac9f1ada0846f21fbe09aaa3.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958");
                $content[] = array("Title"=>"多圖文3標題", "Description"=>"", "PicUrl"=>"http://g.hiphotos.bdimg.com/wisegame/pic/item/18cb0a46f21fbe090d338acc6a600c338644adfd.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958");
                break;
            case "音樂":
                $content = array("Title"=>"最炫民族風", "Description"=>"歌手:鳳凰傳奇", "MusicUrl"=>"http://121.199.4.61/music/zxmzf.mp3", "HQMusicUrl"=>"http://121.199.4.61/music/zxmzf.mp3");
                break;
            default:
                $content = date("Y-m-d H:i:s",time());
                break;
        }
        if(is_array($content)){
            if (isset($content[0]['PicUrl'])){
                $result = $this->transmitNews($object, $content);
            }else if (isset($content['MusicUrl'])){
                $result = $this->transmitMusic($object, $content);
            }
        }else{
            $result = $this->transmitText($object, $content);
        }
        return $result;
    }

    private function receiveImage($object)
    {
        $content = array("MediaId"=>$object->MediaId);
        $result = $this->transmitImage($object, $content);
        return $result;
    }

    private function receiveLocation($object)
    {
        $content = "你發送的是位置,緯度為:".$object->Location_X.";經度為:".$object->Location_Y.";縮放級別為:".$object->Scale.";位置為:".$object->Label;
        $result = $this->transmitText($object, $content);
        return $result;
    }

    private function receiveVoice($object)
    {
        if (isset($object->Recognition) && !empty($object->Recognition)){
            $content = "你剛才說的是:".$object->Recognition;
            $result = $this->transmitText($object, $content);
        }else{
            $content = array("MediaId"=>$object->MediaId);
            $result = $this->transmitVoice($object, $content);
        }

        return $result;
    }

    private function receiveVideo($object)
    {
        $content = array("MediaId"=>$object->MediaId, "ThumbMediaId"=>$object->ThumbMediaId, "Title"=>"", "Description"=>"");
        $result = $this->transmitVideo($object, $content);
        return $result;
    }

    private function receiveLink($object)
    {
        $content = "你發送的是鏈接,標題為:".$object->Title.";內容為:".$object->Description.";鏈接地址為:".$object->Url;
        $result = $this->transmitText($object, $content);
        return $result;
    }

    private function transmitText($object, $content)
    {
        $textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
        $result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content);
        return $result;
    }

    private function transmitImage($object, $imageArray)
    {
        $itemTpl = "<Image>
    <MediaId><![CDATA[%s]]></MediaId>
</Image>";

        $item_str = sprintf($itemTpl, $imageArray['MediaId']);

        $textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[image]]></MsgType>
$item_str
</xml>";

        $result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time());
        return $result;
    }

    private function transmitVoice($object, $voiceArray)
    {
        $itemTpl = "<Voice>
    <MediaId><![CDATA[%s]]></MediaId>
</Voice>";

        $item_str = sprintf($itemTpl, $voiceArray['MediaId']);

        $textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[voice]]></MsgType>
$item_str
</xml>";

        $result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time());
        return $result;
    }

    private function transmitVideo($object, $videoArray)
    {
        $itemTpl = "<Video>
    <MediaId><![CDATA[%s]]></MediaId>
    <ThumbMediaId><![CDATA[%s]]></ThumbMediaId>
    <Title><![CDATA[%s]]></Title>
    <Description><![CDATA[%s]]></Description>
</Video>";

        $item_str = sprintf($itemTpl, $videoArray['MediaId'], $videoArray['ThumbMediaId'], $videoArray['Title'], $videoArray['Description']);

        $textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[video]]></MsgType>
$item_str
</xml>";

        $result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time());
        return $result;
    }

    private function transmitNews($object, $newsArray)
    {
        if(!is_array($newsArray)){
            return;
        }
        $itemTpl = "    <item>
        <Title><![CDATA[%s]]></Title>
        <Description><![CDATA[%s]]></Description>
        <PicUrl><![CDATA[%s]]></PicUrl>
        <Url><![CDATA[%s]]></Url>
    </item>
";
        $item_str = "";
        foreach ($newsArray as $item){
            $item_str .= sprintf($itemTpl, $item['Title'], $item['Description'], $item['PicUrl'], $item['Url']);
        }
        $newsTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[news]]></MsgType>
<Content><![CDATA[]]></Content>
<ArticleCount>%s</ArticleCount>
<Articles>
$item_str</Articles>
</xml>";

        $result = sprintf($newsTpl, $object->FromUserName, $object->ToUserName, time(), count($newsArray));
        return $result;
    }

    private function transmitMusic($object, $musicArray)
    {
        $itemTpl = "<Music>
    <Title><![CDATA[%s]]></Title>
    <Description><![CDATA[%s]]></Description>
    <MusicUrl><![CDATA[%s]]></MusicUrl>
    <HQMusicUrl><![CDATA[%s]]></HQMusicUrl>
</Music>";

        $item_str = sprintf($itemTpl, $musicArray['Title'], $musicArray['Description'], $musicArray['MusicUrl'], $musicArray['HQMusicUrl']);

        $textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[music]]></MsgType>
$item_str
</xml>";

        $result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time());
        return $result;
    }

    private function logger($log_content)
    {
        if(isset($_SERVER['HTTP_APPNAME'])){   //SAE
            sae_set_display_errors(false);
            sae_debug($log_content);
            sae_set_display_errors(true);
        }else if($_SERVER['REMOTE_ADDR'] != "127.0.0.1"){ //LOCAL
            $max_size = 10000;
            $log_filename = "log.xml";
            if(file_exists($log_filename) and (abs(filesize($log_filename)) > $max_size)){unlink($log_filename);}
            file_put_contents($log_filename, date('H:i:s')." ".$log_content."/r/n", FILE_APPEND);
        }
    }
}
?>


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
69影院欧美专区视频| 成人黄色av免费在线观看| 亚洲欧美国产精品专区久久| 久久伊人精品一区二区三区| 日本高清不卡的在线| 色综合久久中文字幕综合网小说| 亚洲护士老师的毛茸茸最新章节| 欧美电影免费观看大全| 午夜欧美不卡精品aaaaa| 国产精品一区二区久久国产| 日韩av一区在线观看| 九九热精品视频在线播放| 91色精品视频在线| 一区二区三区国产视频| 国产精品久久久久91| 亚洲老板91色精品久久| 中文字幕av一区中文字幕天堂| 国产美女搞久久| 91精品国产高清久久久久久91| 久久免费福利视频| 精品国产乱码久久久久久天美| 91日本在线观看| 国产小视频91| 久久精品视频在线播放| 久久久亚洲欧洲日产国码aⅴ| 亚洲男人天堂古典| 欧美日韩国产中文精品字幕自在自线| 亚洲精品456在线播放狼人| 亚洲国产日韩精品在线| 9.1国产丝袜在线观看| 激情成人在线视频| 欧美日韩爱爱视频| 国产日韩欧美在线看| 一区二区欧美日韩视频| 午夜精品一区二区三区av| 亚洲女同精品视频| 日本一区二区不卡| 久久这里只有精品99| 成人亚洲激情网| 亚洲日本中文字幕| 日韩成人在线视频观看| 久久伊人精品天天| 青青青国产精品一区二区| 国产亚洲日本欧美韩国| 中文字幕在线国产精品| 日韩欧美高清视频| 亚洲精品福利资源站| 欧美最顶级丰满的aⅴ艳星| 97超级碰碰碰久久久| 亚洲成人网av| 国产美女精品视频免费观看| 国产91色在线|| 热草久综合在线| 欧美日本国产在线| 福利一区视频在线观看| 国产久一一精品| 国产成人91久久精品| 91久久久久久久久久久| 亚洲经典中文字幕| 在线精品高清中文字幕| 青青a在线精品免费观看| 国产成人精品免费视频| 在线视频日本亚洲性| 久久精品福利视频| 91精品久久久久久久久中文字幕| 亚洲小视频在线观看| 亚洲女同性videos| 怡红院精品视频| 欧美激情亚洲一区| 欧美国产亚洲视频| 奇米一区二区三区四区久久| 国产精品色婷婷视频| 精品五月天久久| 亚洲大胆美女视频| 一区二区三区回区在观看免费视频| 国产午夜精品免费一区二区三区| 中文字幕精品www乱入免费视频| 日韩电影第一页| 日韩精品黄色网| 91精品视频免费看| 欧美激情久久久久| 中文字幕在线精品| 国产精品久久久久久久9999| 91精品久久久久久久久久久久久久| 国产一区二区视频在线观看| 国产mv久久久| 亚洲伊人一本大道中文字幕| 91欧美精品成人综合在线观看| 国产精品h片在线播放| 成人深夜直播免费观看| 国产自产女人91一区在线观看| 黄色91在线观看| 日韩一级裸体免费视频| 亚洲精品国产精品国自产在线| 亚洲男人天堂2019| 欧美日韩成人在线播放| 欧美精品videossex88| 欧美国产欧美亚洲国产日韩mv天天看完整| 欧美激情一区二区三区高清视频| 91超碰caoporn97人人| 国产精品一区二区久久国产| 亚洲老板91色精品久久| 97碰碰碰免费色视频| 亚洲成色777777在线观看影院| 亚洲国产高清高潮精品美女| 亚洲美女av在线| 91亚洲永久免费精品| 久久久久久久国产精品视频| 欧美亚洲激情视频| 亚洲男人天堂网| 成人精品福利视频| 国产精品久久久久久久电影| 高清欧美性猛交xxxx| 亚洲人在线视频| 欧美日韩国产精品一区二区三区四区| 亚洲精品456在线播放狼人| 国产精品福利在线| 久久久久免费精品国产| 国产脚交av在线一区二区| 日本精品在线视频| 欧美大成色www永久网站婷| 亚洲男人的天堂在线播放| 97香蕉久久夜色精品国产| 国产成人在线亚洲欧美| 欧美一级大片视频| 国产精品ⅴa在线观看h| 国产精品直播网红| 亚洲自拍高清视频网站| 亚洲热线99精品视频| 97超级碰在线看视频免费在线看| 日本精品视频在线播放| 日韩亚洲第一页| 久久久久久久久网站| 欧美在线免费看| 欧美韩国理论所午夜片917电影| 国产成人精品久久亚洲高清不卡| 欧美日韩加勒比精品一区| 欧美精品激情blacked18| 欧美在线视频网| 一区二区三区四区精品| 亚洲第一男人天堂| 久久这里有精品视频| 国产精品久久av| 国产欧美一区二区三区在线看| 中文字幕精品久久久久| 亚洲精品中文字| 成人欧美一区二区三区黑人孕妇| 国产精品91在线| 91精品成人久久| 国产精品国模在线| 欧美人在线视频| 久久久亚洲国产天美传媒修理工| 国产日韩欧美一二三区| 欧美成人免费在线视频| 韩国美女主播一区| 国产精品美女主播| 欧美最近摘花xxxx摘花| 亚洲欧美第一页| 亚洲成人性视频| 欧美最猛性xxxxx(亚洲精品)| 狠狠色噜噜狠狠狠狠97| 亚州精品天堂中文字幕| 久久成人精品视频| 亚洲va码欧洲m码|