OpenServerController.php 15.2 KB
<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2019/1/19
 * Time: 11:32
 */

namespace app\portal\controller;


use cmf\controller\HomeBaseController;
use cmf\controller\WeChatBaseController;
use EasyWeChat\Foundation\Application;
use think\Db;

class OpenServerController extends HomeBaseController
{
    public function index(){
        if(!isset($_GET["echostr"])){
            $this->responseMsg();
        }else{
            $this->valid();
        }
    }

    public function valid()
    {
        $echoStr = $_GET["echostr"];
        echo $echoStr;
        exit;
    }
    public function test(){
//        dump(cache('referrer'));
        dump(cache('aaa'));
        dump(cache('bcc'));
        dump(cache('c'));
        dump(cache('data_id'));
        exit();
        dump(cache('result'));
        dump(cache('result1'));
        dump(cache('third_party_user'));
        dump(cache('user'));
    }
    public function responseMsg()
    {
        $conf = config('wechat_config');
        $app=new Application($conf);
        $server = $app->server;

        $server->setMessageHandler(function ($message) {
            switch ($message->MsgType) {
                case 'event':
                    switch ($message->Event) {
                        case 'subscribe':
                            if(empty($message->EventKey)){
                                return '感谢您关注我,学考君帮助您的孩子爱上阅读,快速提分! 
这里有热门的教育资讯,海量的免费资源,优质的学习干货!  
点击右下角【学考商城】→进入【校园团购】→选择您想要的优惠书籍,即可点击购买! 
您在购买过程中有任何质疑,欢迎拨打投诉电话:010-57257538

回复关键词“中华国学”有11节精彩的国学课可以听哦!';
                            }else{
                                //获取用户openid
                                $openid=$message->FromUserName;
                                $param=substr($message->EventKey,8);
                                $data = explode("-",$param);
                                $my_user_id = $data[0];
                                $status = $data[1];
                                $third_party_user = Db::name('third_party_user')->where('openid',$openid)->find();
                                if(!$third_party_user){
                                    //获取用户信息
                                    $options=config('wechat_config');
                                    $app = new Application($options);
                                    $accessToken = $app->access_token; // EasyWeChat\Core\AccessToken 实例
                                    $token = $accessToken->getToken(false);
                                    $url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=$token&openid=$openid&lang=zh_CN";
                                    $user_data = json_decode($this->http_get($url),true);
                                    $user_id = $this->new_user($user_data,$openid,$options['app_id']);
                                }else{
                                    $user_id = $third_party_user['user_id'];
                                }
                                $new_data = [
                                    'my_user_id' => $my_user_id,
                                    'status_id' => $status,
                                ];
                                $this->bind($user_id,$new_data);
                                return '感谢您关注我,学考君帮助您的孩子爱上阅读,快速提分! 
这里有热门的教育资讯,海量的免费资源,优质的学习干货!  
点击右下角【学考商城】→进入【校园团购】→选择您想要的优惠书籍,即可点击购买! 
您在购买过程中有任何质疑,欢迎拨打投诉电话:010-57257538

回复关键词“中华国学”有11节精彩的国学课可以听哦!';
                            }
                            break;
                        case 'SCAN':
                            //获取用户openid
                            $openid=$message->FromUserName;
                            $param=$message->EventKey;
                            $data = explode("-",$param);
                            cache(null);
                            cache('data',$data);
                            $my_user_id = $data[0];
                            $status = $data[1];
                            $third_party_user = Db::name('third_party_user')->where('openid',$openid)->find();
                            if(!$third_party_user){
                                //获取用户信息
                                $options=config('wechat_config');
                                $app = new Application($options);
                                $accessToken = $app->access_token; // EasyWeChat\Core\AccessToken 实例
                                $token = $accessToken->getToken(false);
                                $url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=$token&openid=$openid&lang=zh_CN";
                                $user_data = json_decode($this->http_get($url),true);
                                $user_id = $this->new_user($user_data,$openid,$options['app_id']);
                            }else{
                                $user_id = $third_party_user['user_id'];
                            }
                            $new_data = [
                                'my_user_id' => $my_user_id,
                                'status_id' => $status,
                            ];
                            $this->bind($user_id,$new_data);
                            break;
                        default:
//                            return '收到event消息';
                            break;
                    }
                    break;
                case 'text':
                    $text = '您好,欢迎关注“学考无忧”公众号。
我们致力于打造一个为广大家长和同学们提升知识视野,提高学习成绩的优质服务号,这里有热门的教育资讯,海量的免费资源,优质的学习干货,会为大家提供教辅类以及课外阅读阅读书籍,帮助同学们提高学习成绩。
真正让家长省心,孩子无忧。感谢关注。';
                    switch ($message->Content) {
                        case '中华国学':
                            $text = 'https://appLuAK2Xa13279.h5.xiaoeknow.com/content_page/eyJ0eXBlIjozLCJyZXNvdXJjZV90eXBlIjoiIiwicmVzb3VyY2VfaWQiOiIiLCJwcm9kdWN0X2lkIjoicF81Y2ZkZmZhMmJmYzcxXzZVMGl2YTZpIiwiYXBwX2lkIjoiYXBwTHVBSzJYYTEzMjc5In0';
                    }
                    return $text;
                    break;
                default:
//                    return '收到其它消息';
                    break;
            }
        });

        $response = $server->serve();

        $response->send();
    }

    private function check_signature()
    {
        $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;
        }
    }

    public function http_get($url){
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL,$url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
        $result = curl_exec($ch);
        // grab URL, and print
        if(curl_errno($ch)){
            print curl_error($ch);
        }
        curl_close($ch);
        return $result;
    }

    public function new_user($wechat_user,$openid,$appId) {
        $currentTime = time();
        $ip          = $this->request->ip(0, true);
        $userId = Db::name("user")->insertGetId([
            'create_time'     => $currentTime,
            'user_status'     => 1,
            'user_type'       => 2,
            'sex'             => $wechat_user['sex'],
            'user_nickname'   => $wechat_user['nickname'],
            'avatar'          => $wechat_user['headimgurl'],
            'last_login_ip'   => $ip,
            'last_login_time' => $currentTime,
        ]);

        $row=Db::name("third_party_user")->insert([
            'openid'          => $openid,
            'user_id'         => $userId,
            'third_party'     => 'public',
            'nickname'        => $wechat_user['nickname'],
            'app_id'          => $appId,
            'last_login_ip'   => $ip,
            'union_id'        => '',
            'last_login_time' => $currentTime,
            'create_time'     => $currentTime,
            'login_times'     => 1,
            'status'          => 1,
            'more'            => json_encode($wechat_user)
        ]);
        return $userId;
    }

    public function bind($uid,$data_id){
        cache('data_id',$data_id);
        $data_my_user = Db::name('my_user') -> where('uid',$uid) -> find();
        if($data_my_user){
            //用户是否为自由人 是自由人则绑定 不是自由人判断是不是老师
            if($data_my_user['status'] == 0 || $data_my_user['status'] == 1 || $data_my_user['status'] == 5 || $data_my_user['status'] == 6){
                //判断跳转链接是否存在数据 存在则绑定关系
                if(!empty($data_id)){
                    //判断上级权限是否存在
                    $my_user = Db::name('my_user') -> where('id',$data_id['my_user_id']) -> find();
                    if(empty($my_user)){
                        $this->error('查无此人','','','');
                    }
                    if($my_user['status'] != $data_id['status_id']){
                        $this->error('该二维码已失效','','','');
                    }
                    //判断数据是老师还是业务员
                    if($data_id['status_id'] == 2){
                        //业务员分享 更改用户身份为老师
                        $my_user_phone = Db::name('my_user') -> where('id',$data_id['my_user_id']) -> find();
                        $data_update['status'] = 3;
                        $data_update['inviter_phone'] = $my_user_phone['phone'];
                        $data_update['is_pro'] = 1;
                        $data_update['pid'] = $my_user_phone['id'];
                        $data_update['bind_time'] = time();
                        $data_update['bind_status'] = 1;
                        Db::name('my_user') -> where('uid',$uid) -> update($data_update);
                    }elseif ($data_id['status_id'] == 3){
                        //老师分享 更改用户身份为学生
                        cache('aaa','SSSSSS');
                        $my_user_phone = Db::name('my_user') -> where('id',$data_id['my_user_id']) -> find();
                        cache('bbb','######');
                        $data_update['status'] = 4;
                        $data_update['inviter_phone'] = $my_user_phone['phone'];
                        $data_update['is_pro'] = 0;
                        $data_update['pid'] = $my_user_phone['id'];
                        $data_update['bind_time'] = time();
                        $data_update['bind_status'] = 1;
                        Db::name('my_user') -> where('uid',$uid) -> update($data_update);
                    }
                }
            }
            /*else{
                //判断跳转链接是否存在数据
                if(!empty($data_id['status_id'])){
                    //判断上级权限是否存在
                    $my_user = Db::name('my_user') -> where('id',$data_id['my_user_id']) -> find();
                    if(empty($my_user)){
                        $this->error('查无此人','','','');
                    }
                    if($my_user['status'] != $data_id['status_id']){
                        $this->error('该二维码已失效','','','');
                    }
                    //判断用户是不是老师
                    if($data_my_user['status'] == 3){
                        //是老师则判断老师绑定状态
                        if($data_my_user['bind_status'] = 2){
                            //判断是否为业务员分享的链接
                            if($data_id['status_id'] == 2){
                                //是业务员分享则更新老师的pid
                                $my_user_phone = Db::name('my_user') -> where('id',$data_id['my_user_id']) -> find();
                                $data_update['pid'] = $my_user_phone['id'];
                                $data_update['bind_time'] = time();
                                $data_update['bind_status'] = 1;
                                Db::name('my_user') -> where('uid',$uid) -> update($data_update);
                            }
                        }
                    }
                }
            }*/
        }else{
            //判断跳转链接是否存在数据 如果不存在添加一条自由人用户
            if(!empty($data_id)){
                //判断上级权限是否存在
                $my_user = Db::name('my_user') -> where('id',$data_id['my_user_id']) -> find();
                if(empty($my_user)){
                    $this->error('查无此人','','','');
                }
                if($my_user['status'] != $data_id['status_id']){
                    $this->error('该二维码已失效','','','');
                }
                //判断数据是老师还是业务员
                if($data_id['status_id'] == 2){
                    //业务员分享 添加老师
                    $my_user_phone = Db::name('my_user') -> where('id',$data_id['my_user_id']) -> find();
                    $data_inser['status'] = 3;
                    $data_inser['uid'] = $uid;
                    $data_inser['inviter_phone'] = $my_user_phone['phone'];
                    $data_inser['create_time'] = time();
                    $data_inser['is_pro'] = 1;
                    $data_inser['pid'] = $my_user_phone['id'];
                    $data_inser['bind_time'] = time();
                    $data_inser['bind_status'] = 1;
                    Db::name('my_user') -> insert($data_inser);
                }elseif ($data_id['status_id'] == 3){
                    //老师分享 添加学生
                    $my_user_phone = Db::name('my_user') -> where('id',$data_id['my_user_id']) -> find();
                    $data_inser['status'] = 4;
                    $data_inser['uid'] = $uid;
                    $data_inser['inviter_phone'] = $my_user_phone['phone'];
                    $data_inser['create_time'] = time();
                    $data_inser['is_pro'] = 0;
                    $data_inser['pid'] = $my_user_phone['id'];
                    $data_inser['bind_time'] = time();
                    $data_inser['bind_status'] = 1;
                    Db::name('my_user') -> insert($data_inser);
                }
            }else{
                $data_inser['status'] = 0;
                $data_inser['uid'] = $uid;
                $data_inser['create_time'] = time();
                $data_inser['is_pro'] = 0;
                Db::name('my_user') -> insert($data_inser);
            }

        }
    }
}