微信公众号开发原始初学版---php

来源:互联网 发布:js 所有input不可编辑 编辑:程序博客网 时间:2024/06/13 22:18
<?php
define("TOKEN", "weixin");
$wechatObj = new wechatCallbackapiTest();

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

class wechatCallbackapiTest
{
    public function valid()
    {
        $echoStr = $_GET["echostr"];
        if($this->checkSignature()){
            header('content-type:text');
            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)){
            $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);

            //判断该数据包是否是订阅的事件推送
            if (strtolower($postObj->MsgType)=='event') {
                //如果是关注 subscribe 事件
                if (strtolower($postObj->Event)=='subscribe') {
                    //回复用户消息(纯文本格式)
                    $toUser   = $postObj->FromUserName;
                    $fromUser = $postObj->ToUserName;
                    $time     = time();
                    $msgType  =  'text';
                    $content  = "欢迎关注我们的微信公众账号\n<a href='http://blog.csdn.net/zzz3112362088'>我的个人博客</a>";
                    $template = "<xml>
                                <ToUserName><![CDATA[%s]]></ToUserName>
                                <FromUserName><![CDATA[%s]]></FromUserName>
                                <CreateTime>%s</CreateTime>
                                <MsgType><![CDATA[%s]]></MsgType>
                                <Content><![CDATA[%s]]></Content>
                                </xml>";
                    $info     = sprintf($template, $toUser, $fromUser, $time, $msgType, $content);
                    echo $info;
                }
            }
            else if (strtolower($postObj->MsgType)=='text') {
                $fromUsername = $postObj->FromUserName;
                $toUsername = $postObj->ToUserName;
                $keyword = trim($postObj->Content);
                $time = time();
                $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>";
                // if($keyword == "?" || $keyword == "?")
                // {
                //     $msgType = "text";
                //     $contentStr = date("Y-m-d H:i:s",time());
                //     $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                //     echo $resultStr;
                // }else{
                //     $msgType='text';
                //     $contentStr='功能还没有实现,请稍后再试';
                //     $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                //     echo $resultStr;
                // }
                
                switch ($keyword) {
                    case '?':
                    case '?':
                        $msgType="text";
                        $contentStr=date("Y-m-d H:i:s",time());
                        $resultStr=sprintf($textTpl,$fromUsername,$toUsername,$time,$msgType,$contentStr);
                        echo $resultStr;
                        break;  
                    case 'hello':
                        $msgType="text";
                        $contentStr="我知道你是谁";
                        $resultStr=sprintf($textTpl,$fromUsername,$toUsername,$time,$msgType,$contentStr);
                        echo $resultStr;
                        break;
                    case 'picture':
                        $arr=array(
                            array(
                                'title'=>'个人博客',
                                'description'=>'包含我所学知识的记录',
                                'picurl'=>'http://1.tianyu12345.applinzi.com/images/23.jpg',
                                'url'=>'http://blog.csdn.net/zzz3112362088',),
                            // array(
                            //     'title'=>'qq空间',
                            //     'description'=>'个人生活记录',
                            //     'picurl'=>'http://1.tianyu12345.applinzi.com/images/24.jpg',
                            //     'url'=>'http://user.qzone.qq.com/649832402/main',),
                            );
                        $imageTpl="<xml>
                                    <ToUserName><![CDATA[%s]]></ToUserName>
                                    <FromUserName><![CDATA[%s]]></FromUserName>
                                    <CreateTime>%s</CreateTime>
                                    <MsgType><![CDATA[%s]]></MsgType>
                                    <ArticleCount>".count($arr)."</ArticleCount>
                                    <Articles>";
                        foreach ($arr as $key => $value) {
                            $imageTpl.="<item>
                                    <Title><![CDATA[".$value['title']."]]></Title>
                                    <Description><![CDATA[".$value['description']."]]></Description>
                                    <PicUrl><![CDATA[".$value['picurl']."]]></PicUrl>
                                    <Url><![CDATA[".$value['url']."]]></Url>
                                    </item>";
                        }                      
                        $imageTpl.="</Articles>
                                    </xml>";  
                                  
                        
                        // $arr = array(
                        //     array(
                        //         'title'=>'非常感谢关注',
                        //         'description'=>"我的个人博客",
                        //         'picUrl'=>'http://1.tianyu12345.applinzi.com/images/23.jpg',
                        //         'url'=>'http://blog.csdn.net/zzz3112362088',
                        //     ),
                        // );
                        // $imageTpl = "<xml>
                        //             <ToUserName><![CDATA[%s]]></ToUserName>
                        //             <FromUserName><![CDATA[%s]]></FromUserName>
                        //             <CreateTime>%s</CreateTime>
                        //             <MsgType><![CDATA[%s]]></MsgType>
                        //             <ArticleCount>".count($arr)."</ArticleCount>
                        //             <Articles>";
                        // foreach($arr as $k=>$v){
                        //     $imageTpl .="<item>
                        //                 <Title><![CDATA[".$v['title']."]]></Title>
                        //                 <Description><![CDATA[".$v['description']."]]></Description>
                        //                 <PicUrl><![CDATA[".$v['picUrl']."]]></PicUrl>
                        //                 <Url><![CDATA[".$v['url']."]]></Url>
                        //                 </item>";
                        // }
                        
                        // $imageTpl .="</Articles>
                        //             </xml> ";
                        echo sprintf($imageTpl,$fromUsername,$toUsername,$time,'news');
                        break;
                    default:
                        $msgType="text";
                        $contentStr="本部分功能还未实现,快加入我们吧!";
                        $resultStr=sprintf($textTpl,$fromUsername,$toUsername,$time,$msgType,$contentStr);
                        echo $resultStr;
                        break;
                }
            }
        }else{    //数据包为空
            echo "";
            exit;
        }
    }
}
0 0