Heim > Backend-Entwicklung > PHP-Tutorial > 微信开发配置文件详细注释版

微信开发配置文件详细注释版

WBOY
Freigeben: 2016-07-29 09:01:45
Original
1055 Leute haben es durchsucht

/**
  * wechat php test
  */
//define your token
define("TOKEN", "weixin");
$wechatObj = new wechatCallbackapiTest();//将第11行代码的一个类实例化;
//$wechatObj->valid();//变量使用->访问类中的valid()方法,下文valid()方法为验证开发模式接口。这行作用就是验证接口,验证完可注释掉;
$wechatObj->responseMsg();
class wechatCallbackapiTest//定义一个类,类为面向对象开发的封装方式;
{
    public function valid()//定义一个公有的名为valid的方法,即验证接口的方法;
    {
        $echoStr = $_GET["echostr"];//从微信用户端获取一个随机字符串赋予变量$echoStr;
        //valid signature , option
        if($this->checkSignature()){//访问checkSignature签名验证方法,若签名一致,输出变量$echoStr,完整验证配置接口的操作;
            echo $echoStr;
            exit;
        }//签名及接口验证;
    }
    public function responseMsg()//定义一个方法;
    {
        //get post data, May be due to the different environments获取用户端发来的信息,不同的环境可能有差异;
        $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
          //extract post data解析用户数据;
        if (!empty($postStr)){//判断用户端信息是否为非空;
                /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,
                   the best way is to check the validity of xml by yourself */
                libxml_disable_entity_loader(true);
                  $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);//将$postStrl变量进行解析并赋予变量$postObj。simplexml_load_string()函数用于解析XML,参数SimpleXMLElement为新对象的类,LIBXML_NOCDATA表示将CDATA设置为文本节点,CDATA标签中的文本XML不进行解析。
                $fromUsername = $postObj->FromUserName;//将微信用户端的OpenID赋予变量$fromUsername;
                $toUsername = $postObj->ToUserName;//将公众号ID赋予变量$toUsername;
                $keyword = trim($postObj->Content);//将用户微信发来的文本内容去掉空格后赋予变量$keyword;
                $time = time();//将系统时间赋予变量$time;
                $Event = $postObj->Event;//这是一个事件获取;
                $textTpl = "
                            
                            
                            %s
                            
                            
                            0
                            
";    //构建XML格式的文本赋予变量$textTpl。注意XML中的格式为微信内容固定格式。
                            if($Event=="subscribe")//subscribe是收到订阅信息,Event是事件类型,subscribe(订阅)、unsubscribe(取消订阅)
                {
                    $textTpl = "
                            
                            
                            %s
                            
                            
                            0
                            
";  
                            $msgType ="text";
                            $contentStr = "谢谢关注,你可以回复点什么";
     $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                echo $resultStr;    
                    }///关注后自动回复文本消息
                            //switch($keyword)
                            //case "";             
                if(!empty( $keyword ))
                {
                      $msgType = "text";//回复文本信息类型为text型,变量类型为$msgType;
                    $contentStr = "报修,快递查询,饭卡挂失,失物招领,校园街景,新生报到,成绩查询";//$contentStr为回复的信息;
                    $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);//sprintf()为变参函数,$textTpl由于有5个%s,需要5个变量进行赋值。此行代码为关键,sprintf()函数要深入理解。
                    echo $resultStr;//输出回复信息,即发送微信;
                }else{
                    echo "Input something...";//输入内容,此消息不会发送到微信端,只是测试时使用。
                }
        }else {
            echo "";//微信端没有消息时,回复为空,无意义,测试用;
            exit;//退出;
        }
    }
        
    private function checkSignature()//传说中的签名验证程序,此行建立私有方法验证签名,这个私有的checkSignature方法,被第18行代码调用,官方文档为加密/校验流程:将token,timestamp,nonce这三个参数进行字典序排序,将这三个参数字符串拼接成一个字符串进行shal加密,开发者获得加密后字符串可与signature对比,标示该请求来源于微信;
    {
        // you must define TOKEN by yourself
        if (!defined("TOKEN")) {
            throw new Exception('TOKEN is not defined!');
        }
        
        $signature = $_GET["signature"];//从用户端获取签名赋予变量$signature;
        $timestamp = $_GET["timestamp"];//从用户端获取时间戳赋予变量$timestamp;
        $nonce = $_GET["nonce"];//从用户端获取随机数赋予变量$nonce;
                
        $token = TOKEN;
        $tmpArr = array($token, $timestamp, $nonce);//建立数组变量$tmpArr;
        // use SORT_STRING rule
        sort($tmpArr, SORT_STRING);//新建名排序;
        $tmpStr = implode( $tmpArr );//字典排序;
        $tmpStr = sha1( $tmpStr );//shal加密;
        
        if( $tmpStr == $signature ){//$tmpStr与$signature变量同值,返回真,否则返回假;
            return true;
        }else{
            return false;
        }
    }
}
?>

以上就介绍了微信开发配置文件详细注释版,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage