实例

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. 总结说明

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值