實例

1. 功能分析

2. 結構設計

3. 數據庫設計

4. 代碼實現

......
<?php
    //wechat php test

    define("TOKEN","weixin");
    $wechatObj=new wechatCallbackapiTest();
    //$wechatObj->valid();
    $wechatObj->responseMsg();
    class wechatCallbackapiTest{
        public function valid(){
            $echoStr = $_GET["echostr"];
            if($this->checkSignature()){
                echo $echoStr;
                exit;
            }
        }
        public function responseMsg() {
            $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
            if(!empty($postStr)){
                libxml_disable_entity_loader(true);
                $postObj=simplexml_load_string($postStr,'SimpleXMLElement',LIBXML_NOCDATA);
                $fromUsername=$postObj->FromUserName;
                $toUsername=$postObj->ToUserName;
                $type=$postObj->MsgType;
                $customrevent=$postObj->Event;
                $latitude=$postObj->Location_X;
                $longitude=$postObj->Location_Y;
                $keyword=trim($postObj->Content);
                $time=time();
                $textTpl="<xml>
                        <ToUserName><![CDATA[%s]]></ToUserName>
                        <FromUserName><![CDATA[%s]]></FromUserName>
                        <CreateTime>%s</CreateTime>
                        <MsgType><![CDATA[text]]></MsgType>
                        <Content>%s</Content>
                        <FuncFlag>0</FuncFlag>                  
                        </xml>"
                switch($type){
                    case "event":
                        if($customrevent=="subscribe"){
                            $contentStr-"感謝關注\n回覆1查看使用說明";
                        }
                        break;
                    case "image":
                        $contentStr="圖片";
                        break;
                    case "location"://處理地理位置信息 高德地圖
                        $contentStr="&lt;a href=&quot;http://mo.amap.com/
                            ?from={$latitude},{$longitude}(你的位置)
                            &amp;to=23.113111,116.121212(我的公司)
                            &amp;type=0&amp;opt=1&amp;dev=1&quot;&gt;查看地圖&lt;/a&gt;";
                        break;
                    case "link":
                        $contentStr="link";
                        break;
                    case "text":
                        switch($keyword){
                            case "1":
                                $contentStr="回覆1查看使用說明\n
                                             回覆2查看介紹\n
                                             回覆3收聽1072\n
                                             回覆4或地理位置查看辦公地址\n
                                             回覆問題進行自助問答:如交通事故";
                                break;
                            case "2":
                                $contentStr="介紹";
                                break;
                            case "3"://音樂信息
                                $musicTpl="<xml>
                                    <ToUserName><![CDATA[%s]]></ToUserName>
                                    <FromUserName><![CDATA[%s]]></FromUserName>
                                    <CreateTime>%s</CreateTime>
                                    <MsgType><![CDATA[music]]></MsgType>
                                    <Music>
                                        <Title><![CDATA[1072 交通熱線]]></Title>
                                        <Description><![CDATA[2012年9月14日]]></Description>
                                        <MusicUrl><![CDATA[http://weixin1234.duapp.com/radio/20120914.wma]]></MusicUrl>
                                        <HQMusicUrl><![CDATA[http://weixin1234.duapp.com/radio/20120914.wma]]></HQMusicUrl>
                                    </Music>
                                    <FuncFlag>0</FuncFlag>
                                    </xml>";
                                $resultStr1=sprintf($musicTpl,$fromUsername,$toUsername,$time);
                                echo $resultStr1;
                                break;
                            case "4":
                                $contentStr="地址";
                                break;
                            default:
                                include("conn.php");
                                sql="SELECT * FROM 'ask' WHERE 'title' like '%{$keyword}%' LIMIT 1";//模糊查詢
                                $query=mysql_query($sql);//執行SQL語句
                                $rs=mysql_fetch_array($query);//獲取SQL語句結果
                                $title=$rs['title'];
                                $answer=$rs['content'];//獲取答覆
                                $answer=str_replace("\n","",$answer);//刪除空格
                                mysql_close($link);//關閉數據庫
                                $contentStr="{$title}\n{$answer}";
                    }
                    break;
                default:
                    $contentStr="此功能尚未開發";
            }
            $resultStr=sprintf($textTpl,$fromUsername,$toUsername,$time,$contentStr);
            echo $resultStr;
        }else{
            echo "";
            exit;
        }
    }
    private function checkSignature(){
        $signature = $_GET["signatue"];
        $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;
        }
    }
}

?>



......

5. 系統測試

6. 總結說明

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