php简单接管公众号后台

8 篇文章 0 订阅
5 篇文章 0 订阅

前提

配置服务器在这里插入图片描述

代码

php文件
//此处处接管了 关注事件吧关注用户添加到数据库
    public function actionAc(){
    define("TOKEN", "****");//定义识别码
    define("APPID", "wx3ea1b*****148bc");//公众号appid
    define("SECRET", "7492106fccf11******e60");
    $wechatObj = new wechatCallbackapiTest();//实例化wechatCallbackapiTest类
    if(!isset($_GET["echostr"])){
        $wechatObj->responseMsg();
    }else{
        $wechatObj->valid();//进行认证
    }
    class wechatCallbackapiTest
{
    public function valid()
    {
        $echoStr = $_GET["echostr"];
        if($this->checkSignature()){
            echo $echoStr;
            exit;
        }
    }
    public function responseMsg()//执行接收器方法
    {
        $postStr = file_get_contents('php://input', 'r');
        if (!empty($postStr)){
            $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
            $RX_TYPE = trim($postObj->MsgType);
            switch($RX_TYPE){
                case "event":
                    $result = $this->receiveEvent($postObj);
                    break;
                case "text";
                    $content = $this->selecttext($postObj);
                    $result =  $this->transmitText($postObj,$content);
                    break;

            }
            if (isset($result)){
                echo $result;
            }else{
                echo "";
                exit;
            }
        }else{
            echo "";
            exit;
        }
    }
    private function receiveEvent($object){
        $content = "";

        switch ($object->Event){
            case "subscribe":
                $content = "终于等到你!点击下方【约课】按钮去体验迈步课程吧,新人更有优惠大礼包可以领取哦!";//这里是向关注者发送的提示信息
                $this->getuserinfo($object);
                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> 
       <FuncFlag>0</FuncFlag> 
       </xml>";
        $result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content);
        return $result;
    }

    private function transmitImage($object,$content){
        $textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType>< ![CDATA[image] ]></MsgType>
<Image>
    <MediaId>< ![CDATA[[%s] ]></MediaId>
</Image>
</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, SORT_STRING);
        $tmpStr = implode( $tmpArr );
        $tmpStr = sha1( $tmpStr );
        if( $tmpStr == $signature ){
            return true;
        }else{
            return false;
        }
    }
//存储用户信息  平台数据为小程序和公众号数据互通
    private function getuserinfo($object){

        $getaccurl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".APPID."&secret=".SECRET;
        $access_token =  json_decode(self::curl($getaccurl),true);
        $url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$access_token['access_token']."&openid=".$object->FromUserName."&lang=zh_CN";
        $info =  $access_token =  json_decode(self::curl($url),true);
        $open_id = $info['openid'];
        $unid = isset($info['unionid'])?$info['unionid']:'';
        $nickname = $info['nickname'];
        $headimgurl = $info['headimgurl'];
        $sex = $info['sex'];
        $model = new MemberWeixin();
        $model = MemberWeixin::findOne(['unionid'=>$unid]);
        if (!$model){
            $model = new   MemberWeixin();
            $model->unionid = $unid;
            $model->nickname = $nickname;
            $model->pic = $headimgurl;
            $model->sex = $sex;
            $model->wechat_open_id = $open_id;
        }else{
            $model->wechat_open_id = $open_id;
            $model->sex = $sex;
        }
        $model->save();


    }
    public static function curl($url){
        $ch = curl_init();
        // 2. 设置选项,包括URL
        curl_setopt($ch,CURLOPT_URL,$url);
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
        curl_setopt($ch,CURLOPT_HEADER,0);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        // 3. 执行并获取HTML文档内容
        $output = curl_exec($ch);
        if($output === FALSE ){
            echo "CURL Error:".curl_error($ch);
        }
        // 4. 释放curl句柄
        curl_close($ch);
        return $output;
    }
    //此处为监听用户输入事件进行回复
    public function selecttext($postObj){
        $Content =$postObj->Content;
        $open_id =$postObj->FromUserName;
        if ($_SERVER['SERVER_PORT'] == 80){  该判断在不同的服务器下有可能有误  去掉即可
            $http = "http://";
        }else{
            $http = "https://";
        }
        if ($Content =="教练绑定"||$Content ==  '绑定教练'){
            $host = $http.$_SERVER['HTTP_HOST'].'/v1/web/index?open_id='.$open_id;
            $info = json_decode(self::curl('http://api.ft12.com/api.php?format=json&url='.$host));
            if ($info->url !== ''){
                $content = $info->url;
            }
            $content = "系统回复:如果您是迈步运动教练,请点击【<a href='".$content."'>这里</a>】,在打开的页面验证您的手机号进行绑定。";
        }else{
            $content = '你好欢迎来到迈步健身服务!';
        }
        return $content;

    }


}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值