处理微信公众号带参数二维码的事件

<?php
namespace Mp\Controller;
use Think\Controller;
$wechatObj = new IndexController();  
$wechatObj->responseMsg();  
class IndexController extends Controller
{
	private $token;
	public function index($id=''){
		$mp = M('mp')->find($id);
		$this->token = $mp['token'];
		$echostr = I('get.echostr');
		// echo $echostr;
		// exit;
		if(!empty($echostr)){
			if($this->checkSignature()){
				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)){  
                  
                $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);  
                $RX_TYPE = trim($postObj->MsgType);  
  
                switch($RX_TYPE)  
                {  
                    case "text":  
                        $resultStr = $this->handleText($postObj);  
                        break;  
                    case "event":  
                        $resultStr = $this->handleEvent($postObj);  
                        break;  
                    default:  
                        $resultStr = "Unknow msg type: ".$RX_TYPE;  
                        break;  
                }  
                echo $resultStr;  
        }else {  
            echo "";  
            exit;  
        }  
    }  
    public function handleText($postObj)  
    {  
        $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(!empty( $keyword ))  
        {  
            $msgType = "text";  
            // $contentStr = "Welcome to wechat world!";  
            $contentStr = $this->keyword($keyword);
           
            $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);  
            echo $resultStr;  
        }else{  
            echo "Input something...";  
        }  
    }  
  
    public function handleEvent($object)  
    {  
        $contentStr = "";  
        switch ($object->Event)  
        {  
            case "subscribe":  
                //
            // if (isset($object->EventKey)){
                    // $sceneid = str_replace("qrscene_","",$object->EventKey); 
                    // $data=$this->hu($sceneid);
                     $contentStr = "微信开发考试现在报名了输入报名试试";
                    // $where['tag']=$sceneid;
                    // $data=M('tags')->where('tag="$sceneid"')->find();
                    // $tagid=$data['tag_id'];
                    // $contentStr=$tagid;
                    // $ret=$this->fansGroup($object->FromUserName,$sceneid);
                    // if($ret==true){
                        // $contentStr ='你的openid为'.$sceneid;
                    // }else{
                    //     $contentStr ="失败了,".$object->FromUserName;
                    // } 
                // }
                break;
                case 'SCAN':
                 if(isset($object->EventKey)){
                        $scene_str=$object->EventKey;
                        $ret=$this->fansGroup($object->FromUserName,$scene_str);
                        if($ret==true){
                            $contentStr='你的openid为'.$object->EventKey.'分配到'.$scene_str;
                        }else{
                            $contentStr='失败了,'.json_encode($ret);
                        }
                    }else{
                        $contentStr='您扫描过了哦~';
                    }
              
                break;  
            default :  
                $contentStr = "Unknow Event: ".$object->Event;  
                break;  
        }  
        $resultStr = $this->responseText($object, $contentStr);  
        return $resultStr;  
    }  
      
            // // public function hu($ii){
            //   return $ii;
            // }
	private function checkSignature()
	{
        $signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];	
        		
		$token = $this->token;
		$tmpArr = array($token, $timestamp, $nonce);
		sort($tmpArr);
		$tmpStr = implode( $tmpArr );
		$tmpStr = sha1( $tmpStr );
		
		if( $tmpStr == $signature ){
			return true;
		}else{
			return false;
		}
	}
   
        public function fansGroup($openid="",$tagname=""){
        //当前请求公众号
        // $id = $_GET['id'];
          $mp=getCurrentMp();
        $where['mp_id'] = $mp['id'];
        $where['tag'] = $tagname;
        $data = M('tags')->where($where)->find();
        // print_r($data);
        // exit;

        if(!empty($data)){
            $accessToken = getAccess_token();
            $api = "https://api.weixin.qq.com/cgi-bin/tags/members/batchtagging?access_token=" . $accessToken;
            $arr = array();
            $arr = ['openid_list'=>array($openid),'tagid'=>(int)$data['tag_id']];
            // $arr['openid_list'] = array($openid);
            // $arr['tagid'] = 109;
            $arr = json_encode($arr,JSON_UNESCAPED_UNICODE);
            // dump($arr);
            // exit;
            $ret = request_post($api,$arr);
            // print_r($ret);
            // exit;
            if($ret['errcode']==0){
               return '您被分配到' . $tagname;
            }else{
               return '分配失败';
            } 
        }else{
           return array('无此标签' . $tagname);
        }
    }
     public function responseText($object, $content, $flag=0)  
					    {  
					        $textTpl = "<xml>  
					                    <ToUserName><![CDATA[%s]]></ToUserName>  
					                    <FromUserName><![CDATA[%s]]></FromUserName>  
					                    <CreateTime>%s</CreateTime>  
					                    <MsgType><![CDATA[text]]></MsgType>  
					                    <Content><![CDATA[%s]]></Content>  
					                    <FuncFlag>%d</FuncFlag>  
					                    </xml>";  
					        $resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content, $flag);  
					        return $resultStr;  
					    } 
}

猜你喜欢

转载自blog.csdn.net/mo3408/article/details/80861765
今日推荐