<commit_before><?php
    //设置下时区
	date_default_timezone_set('Asia/Shanghai');
    
	//声明一个常量定义一个token值, token
	define("TOKEN", "weixin");

	//通过Wechat类， 创建一个对象
	$wechatObj = new Wechat();
	
	//如果没有通过GET收到echostr字符串， 说明不是再使用token验证
	if (!isset($_GET['echostr'])) {
		//调用wecat对象中的方法响应用户消息
   		$wechatObj->responseMsg();
	}else{
		//调用valid()方法，进行token验证
	
 		$echoStr = $_GET["echostr"];

      		  //valid signature , option
       		 if($wechatObj->valid()){
        		echo $echoStr;
        		exit;
        	}
	}


	//声明一个Wechat的类， 处理接收消息， 接收事件， 响应各种消息， 以及token验证
	class Wechat {
	     
	//验证签名, 手册中原代码改写
    	public function valid() {


 		 // you must define TOKEN by yourself
       		 if (!defined("TOKEN")) {
          		  throw new Exception('TOKEN is not defined!');
      		  }
        
      		  $signature = $_GET["signature"];
        	  $timestamp = $_GET["timestamp"];
      		  $nonce = $_GET["nonce"];
        		
		$token = TOKEN;
		$tmpArr = array($token, $timestamp, $nonce);
       		 // use SORT_STRING rule
		sort($tmpArr, SORT_STRING);
		$tmpStr = implode( $tmpArr );
		$tmpStr = sha1( $tmpStr );
		
		if( $tmpStr == $signature ){
			return true;
		}else{
			return false;
		}
		
   	 }

    //响应消息处理
    public function responseMsg()
    {
	//接收微新传过来的xml消息数据    
	$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];

	//如果接收到了就处理并回复
	if (!empty($postStr)){
	    //将接收到的XML字符串写入日志， 用R标记表示接收消息
	    $this->logger("<WX Request>---------------- 接收事件推送 ---- ".date('H:i:s')." ---------<WX Request>".PHP_EOL.$postStr);
	    //将接收的消息处理返回一个对象
	    $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);

	    //从消息对象中获取消息的类型 text  image location voice vodeo link 
            $RX_TYPE = trim($postObj->MsgType);
             
            //消息类型分离, 通过RX_TYPE类型作为判断， 每个方法都需要将对象$postObj传入
            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 = "unknown msg type: ".$RX_TYPE;   //未知的消息类型
                    break;
	    }
	    //将响应的消息再次写入日志， 使用T标记响应的消息！

            $this->logger("<Dev Respone>--------开发服回复 ---- ".date('H:i:s')." ---------<Dev Respone>".PHP_EOL.$result);
	    //输出消息给微信
	    echo $result;
	}else {
	    //如果没有消息则输出空，并退出
            echo "";
            exit;
        }
    }

     //接收事件消息
    private function receiveEvent($object)
    {
		//包含函数库
		include "func.inc.php";    

		//临时定义一个变量， 不同的事件发生时， 给用户反馈不同的内容
		$content = "";

		//================================== 对用户触发的不同事件做处理 ===================================
		switch ($object->Event)
		{
			//-------------------------- 用户关注 触发的事件 --------------------------
			case "subscribe":

                $content = array();
                $content[] = array("Title"=>"欢迎光临！",  "Description"=>"大家好，我是笨笨，笨笨的笨，笨笨的笨，谢谢！", "PicUrl"=>"https://mmbiz.qlogo.cn/mmbiz_jpg/0sSkmBT5m0YSu61LribFl6Q7NfjficDnrclvJeVtMkSEYCY5jVEpnytZaGzmZkqTiaWa841SNnIYR18WdCEXf0kOw/0");
				//通过事件中的xml转成的object对象中的FromUserName获取openid
				$openid = $object->FromUserName;
				//如果是扫描带参数的二维码
				if(!empty($object->EventKey)) {
					//将前缀去了， 只留下参数， 这个参数就是二维码中咱们指定的组ID
					$groupid = str_replace("qrscene_","",$object->EventKey);
					//调用func.inc.php中的adduser函数， 将用户加入到指定的组， 并加到指定的数据库
					adduser( $openid, $groupid);

					//如果用户传来EventKey事件， 则是扫描二维码的
					$content .= "\n来自二维码场景 ".$groupid;

				}else{
					//如果是扫描自带的二维码使用下面函数添加
					adduser($openid, 0);
				}

				break;
			//-------------------------- 取消关注时触发的事件 --------------------------
			case "unsubscribe":
				$content = "取消关注";
				//用户在取消关注时将wuser表中的关注列设置为0
				$openid = $object->FromUserName;
                //调用func.inc.php中的 deluser 函数， 将用户从数据库删除
				deluser($openid);		

				break;

			//--------------------------  扫码事件 --------------------------
			case "scancode_waitmsg":
                // $content = "scancode_waitmsg 扫码得到结果： ".$object->EventKey ."
                // ScanType： ".$object->ScanCodeInfo->ScanType ."
                // ScanResult： ".$object->ScanCodeInfo->ScanResult;				
                $muneId = $object->EventKey;//创建菜单时的 "key": "rselfmenu_0_0", 
                $scanType = $object->ScanCodeInfo->ScanType;
                $scanResult = $object->ScanCodeInfo->ScanResult;
                $isbn = explode(',',$scanResult)[1]; 
                //------------- 扫图书 ISBN 码 -----------------
                include '../servers/BooksInfo.class.php';
                $BooksInfo = new BooksInfo(); 
                $content =  $BooksInfo->isbn($isbn);//获得回复消息XML
                //----------------------------------------------
                //$content =  $isbn;
                $this->logger("<WX Request>----------------  BooksInfo-> isbn( $isbn) ---- ".date('H:i:s')." ---------<WX Request>".PHP_EOL.$content);

				break;

            case "scancode_push":
                //这事件一触发，微信就显示它息的界面了。后台貌似只能记录下信息什么的。
                //$content = "scancode_push 扫码得到结果： ".$object->EventKey;

                break;
			//--------------------------  菜单点击事件 --------------------------
			case "CLICK":
				switch ($object->EventKey)
				{
					case "company":
						$content = array();
						$content[] = array("Title"=>"小规模低性能低流量网站设计原则",  "Description"=>"单图文内容", "PicUrl"=>"http://mmbiz.qpic.cn/mmbiz/2j8mJHm8CogqL5ZSDErOzeiaGyWIibNrwrVibuKUibkqMjicCmjTjNMYic8vwv3zMPNfichUwLQp35apGhiciatcv0j6xwA/0", "Url" =>"http://mp.weixin.qq.com/s?__biz=MjM5NDAxMDEyMg==&mid=201222165&idx=1&sn=68b6c2a79e1e33c5228fff3cb1761587#rd");
						break;
					case "Information":
						$content = "姓名：金鑫";
						break;
					case "Profile":
						$content = "本人勇于挑战。";
						break;
					case "Experience":
						$content = "游戏策划";
						break;
					case "Contact":<commit_msg>还是啥也没有。再测<commit_after><?php
    //设置下时区
	date_default_timezone_set('Asia/Shanghai');
    
	//声明一个常量定义一个token值, token
	define("TOKEN", "weixin");

	//通过Wechat类， 创建一个对象
	$wechatObj = new Wechat();
	
	//如果没有通过GET收到echostr字符串， 说明不是再使用token验证
	if (!isset($_GET['echostr'])) {
		//调用wecat对象中的方法响应用户消息
   		$wechatObj->responseMsg();
	}else{
		//调用valid()方法，进行token验证
	
 		$echoStr = $_GET["echostr"];

      		  //valid signature , option
       		 if($wechatObj->valid()){
        		echo $echoStr;
        		exit;
        	}
	}


	//声明一个Wechat的类， 处理接收消息， 接收事件， 响应各种消息， 以及token验证
	class Wechat {
	     
	//验证签名, 手册中原代码改写
    	public function valid() {


 		 // you must define TOKEN by yourself
       		 if (!defined("TOKEN")) {
          		  throw new Exception('TOKEN is not defined!');
      		  }
        
      		  $signature = $_GET["signature"];
        	  $timestamp = $_GET["timestamp"];
      		  $nonce = $_GET["nonce"];
        		
		$token = TOKEN;
		$tmpArr = array($token, $timestamp, $nonce);
       		 // use SORT_STRING rule
		sort($tmpArr, SORT_STRING);
		$tmpStr = implode( $tmpArr );
		$tmpStr = sha1( $tmpStr );
		
		if( $tmpStr == $signature ){
			return true;
		}else{
			return false;
		}
		
   	 }

    //响应消息处理
    public function responseMsg()
    {
	//接收微新传过来的xml消息数据    
	$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];

	//如果接收到了就处理并回复
	if (!empty($postStr)){
	    //将接收到的XML字符串写入日志， 用R标记表示接收消息
	    $this->logger("<WX Request>---------------- 接收事件推送 ---- ".date('H:i:s')." ---------<WX Request>".PHP_EOL.$postStr);
	    //将接收的消息处理返回一个对象
	    $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);

	    //从消息对象中获取消息的类型 text  image location voice vodeo link 
            $RX_TYPE = trim($postObj->MsgType);
             
            //消息类型分离, 通过RX_TYPE类型作为判断， 每个方法都需要将对象$postObj传入
            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 = "unknown msg type: ".$RX_TYPE;   //未知的消息类型
                    break;
	    }
	    //将响应的消息再次写入日志， 使用T标记响应的消息！

            $this->logger("<Dev Respone>--------开发服回复 ---- ".date('H:i:s')." ---------<Dev Respone>".PHP_EOL.$result);
	    //输出消息给微信
	    echo $result;
	}else {
	    //如果没有消息则输出空，并退出
            echo "";
            exit;
        }
    }

     //接收事件消息
    private function receiveEvent($object)
    {
		//包含函数库
		include "func.inc.php";    

		//临时定义一个变量， 不同的事件发生时， 给用户反馈不同的内容
		$content = "";

		//================================== 对用户触发的不同事件做处理 ===================================
		switch ($object->Event)
		{
			//-------------------------- 用户关注 触发的事件 --------------------------
			case "subscribe":

                $content = array();
                $content[] = array("Title"=>"欢迎光临！",  "Description"=>"大家好，我是笨笨，笨笨的笨，笨笨的笨，谢谢！", "PicUrl"=>"https://mmbiz.qlogo.cn/mmbiz_jpg/0sSkmBT5m0YSu61LribFl6Q7NfjficDnrclvJeVtMkSEYCY5jVEpnytZaGzmZkqTiaWa841SNnIYR18WdCEXf0kOw/0");
				//通过事件中的xml转成的object对象中的FromUserName获取openid
				$openid = $object->FromUserName;
				//如果是扫描带参数的二维码
				if(!empty($object->EventKey)) {
					//将前缀去了， 只留下参数， 这个参数就是二维码中咱们指定的组ID
					$groupid = str_replace("qrscene_","",$object->EventKey);
					//调用func.inc.php中的adduser函数， 将用户加入到指定的组， 并加到指定的数据库
					adduser( $openid, $groupid);

					//如果用户传来EventKey事件， 则是扫描二维码的
					$content .= "\n来自二维码场景 ".$groupid;

				}else{
					//如果是扫描自带的二维码使用下面函数添加
					adduser($openid, 0);
				}

				break;
			//-------------------------- 取消关注时触发的事件 --------------------------
			case "unsubscribe":
				$content = "取消关注";
				//用户在取消关注时将wuser表中的关注列设置为0
				$openid = $object->FromUserName;
                //调用func.inc.php中的 deluser 函数， 将用户从数据库删除
				deluser($openid);		

				break;

			//--------------------------  扫码事件 --------------------------
			case "scancode_waitmsg":
                // $content = "scancode_waitmsg 扫码得到结果： ".$object->EventKey ."
                // ScanType： ".$object->ScanCodeInfo->ScanType ."
                // ScanResult： ".$object->ScanCodeInfo->ScanResult;				
                $muneId = $object->EventKey;//创建菜单时的 "key": "rselfmenu_0_0", 
                $scanType = $object->ScanCodeInfo->ScanType;
                $scanResult = $object->ScanCodeInfo->ScanResult;
                $isbn = explode(',',$scanResult)[1]; 
                //------------- 扫图书 ISBN 码 -----------------
                // include '../servers/BooksInfo.class.php';
                // $BooksInfo = new BooksInfo(); 
                // $content =  $BooksInfo->isbn($isbn);//获得回复消息XML
                //----------------------------------------------
                $content =  $isbn;
                //$this->logger("<WX Request>----------------  BooksInfo-> isbn( $isbn) ---- ".date('H:i:s')." ---------<WX Request>".PHP_EOL.$content);

				break;

            case "scancode_push":
                //这事件一触发，微信就显示它息的界面了。后台貌似只能记录下信息什么的。
                //$content = "scancode_push 扫码得到结果： ".$object->EventKey;

                break;
			//--------------------------  菜单点击事件 --------------------------
			case "CLICK":
				switch ($object->EventKey)
				{
					case "company":
						$content = array();
						$content[] = array("Title"=>"小规模低性能低流量网站设计原则",  "Description"=>"单图文内容", "PicUrl"=>"http://mmbiz.qpic.cn/mmbiz/2j8mJHm8CogqL5ZSDErOzeiaGyWIibNrwrVibuKUibkqMjicCmjTjNMYic8vwv3zMPNfichUwLQp35apGhiciatcv0j6xwA/0", "Url" =>"http://mp.weixin.qq.com/s?__biz=MjM5NDAxMDEyMg==&mid=201222165&idx=1&sn=68b6c2a79e1e33c5228fff3cb1761587#rd");
						break;
					case "Information":
						$content = "姓名：金鑫";
						break;
					case "Profile":
						$content = "本人勇于挑战。";
						break;
					case "Experience":
						$content = "游戏策划";
						break;
					case "Contact":
{'fraction_non_alphanumeric': 0.20388646622293627, 'fraction_numerical': 0.00979267079794966, 'mean_word_length': 1.678688524590164, 'pattern_counts': {'":': 36, '<': 17, '<?xml version=': 0, '>': 93, 'https://': 2, 'lorem ipsum': 0, 'www.': 0, 'xml': 6}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2304558', 'n_tokens_mistral': 5774, 'n_tokens_neox': 5424, 'n_words': 667}