微信 关注/取消关注事件

<?php
/**
  * wechat php test
  */
//确定下你的token那个地方和微信公众平台的一致。然后URL那个路径是你真正设置验证的这个路径。然后验签那个地方是没有设置才去验签的,!isset()希望能帮到你。望采纳
 
//define your token
define("TOKEN", "weixin");
$wechatObj = new wechatCallbackapiTest();
if(!isset($_GET['echostr'])){
    $wechatObj->responseMsg();
}else{
    $wechatObj->valid();
}
//$wechatObj->valid();
 
class wechatCallbackapiTest
{
    public function valid()
    {
        $echoStr = $_GET["echostr"];
 
        //valid signature , option
        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": //文本消息
                                $result = $this->receiveText($postObj);
                                break;
                        case "image"://图片消息
                                $result = $this->receiveImage($postObj);
                                break;
                        case "voice"://语音消息
                                $result = $this->receiveVoice($postObj);
                                break;
                        case "video"://视频消息
                                $result = $this->receiveVideo($postObj);
                                break;
                        case "location"://位置消息
                                $result = $this->receiveLocation($postObj);
                                break;
                        case "link";//链接消息
                                $result = $this->receiveLink($postObj);
                                break;
                        case "event":// 关注、取消关注事件
                                $result = $this->receiveEvent($postObj);
                                break;
                        default:
                                $result = "unknow msg type:".$RX_TYPE;
                                break;
                    }
                    echo $result;
            }else{
                echo "";
                exit;
            }  
    }
     
        /**
         * 接受文本消息
         */
        private function receiveText($object){
                $content = "你发送的是文本,内容为:".$object->Content;
                $result  = $this->transmitText($object, $content);
                return $result; 
        }
         
        /**
         * 接受图片消息
         */
        private function receiveImage($object){
                $content = "你发送的是图片,地址为:".$object->PicUrl;
                $result  = $this->transmitText($object, $content);
                return $result; 
        }
         
        /**
         * 接收语音消息
         */
        private function receiveVoice($object){
                $content = "你发送的是语音,媒体ID为:".$object->MediaId;
                $result  = $this->transmitText($object, $content);
                return $result;
        }
         
        /**
         * 接收视频消息
         */
        private function receviveVideo($object){
                $content = "你发送的是视频,媒体ID为:".$object->MediaId;
                $result  = $this->transmitText($object, $content);
                return $result;
        }
         
        /**
         * 接收位置消息
         */
        private function receiveLocation($object){
            $content    =    "你发送的是位置,维度为:".$object->Location_X.";维度为:".$object->Location_Y."缩放级别为:".$object->scale.";位置为:".$object->Label;
            $result        =    $this->transmitText($object, $content);
            return $result;
        }
         
        /**
         * 接收链接信息
         */
        private function receiveLink($object){
            $content    =    "你发送的是链接,标题为:".$object->Title.";内容为:".$object->Description.";链接地址为:".$object->Url;
            $result        =    $this->transmitText($object, $content);
            return $result;
        }
         
         
        /**
         * 关注 取消关注事件
         */
        private function receiveEvent($object){
            $content    =    "";
            switch ($object->Event){
                case "subscribe"://关注事件
                            $content    =    "欢迎关注(⊙o⊙)哦";
                            break;
                case "unsubscribe"://取消关注
                            $content = "";
                            break;
            }
            $result = $this->transmitText($object, $content);
            return $result;
        }
         
         
         
        /**
         * 回复文本消息
         */
        private function transmitText($object,$content){
                $textTpl = "<xml>
                                    <ToUserName><![CDATA[%s]]></ToUserName>
                                    <FromUserName><![CDATA[%s]]></FromUserName>
                                    <CreateTime>%s</CreateTime>
                                    <MsgType><![CDATA[text]]></MsgType>
                                    <Content><![CDATA[%s]]></Content>
                                    </xml>";
                $result = sprintf($textTpl,$object->FromUserName,$object->ToUserName,time(),$content);
                return $result;
        }
         
         
    private function checkSignature()
    {
    $signature = $_GET["signature"];
    $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;
        }
    }
}

 

转载于:https://my.oschina.net/u/1168113/blog/1805208

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值