|  | @@ -5,8 +5,6 @@ namespace app\index\controller;
 | 
	
		
			
				|  |  |  use think\Controller;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  use \GatewayWorker\Lib\Gateway;
 | 
	
		
			
				|  |  | -use app\common\library\Tlssigapiv2;
 | 
	
		
			
				|  |  | -use think\Db;
 | 
	
		
			
				|  |  |  class Test extends Controller
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |      public function test(){
 | 
	
	
		
			
				|  | @@ -27,298 +25,6 @@ class Test extends Controller
 | 
	
		
			
				|  |  |          echo $ipaddress;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    public function auto_imgroup(){
 | 
	
		
			
				|  |  | -        $sdkappid  = '1400818730';
 | 
	
		
			
				|  |  | -        $sdkappkey = 'f31aa80a36cef72829fbcdcb10aa2aadcea2944787f2b268d46021e67711326b';
 | 
	
		
			
				|  |  | -        $usersig   = $this->usersig($sdkappid,$sdkappkey);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        $random = rand(10000000,99999999);
 | 
	
		
			
				|  |  | -        $url = 'https://console.tim.qq.com/v4/open_msg_svc/get_history?sdkappid='.$sdkappid.'&identifier=administrator&usersig='.$usersig.'&random='.$random.'&contenttype=json';
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        $data = [
 | 
	
		
			
				|  |  | -            'ChatType' => 'Group',
 | 
	
		
			
				|  |  | -            'MsgTime'  => date('YmdH',strtotime('-23 Hours')),
 | 
	
		
			
				|  |  | -        ];
 | 
	
		
			
				|  |  | -        $tasklog = [
 | 
	
		
			
				|  |  | -            'type' => $data['ChatType'] == 'C2C' ? 1 : 2,
 | 
	
		
			
				|  |  | -            'datehour' => $data['MsgTime'],
 | 
	
		
			
				|  |  | -            'createtime' => time(),
 | 
	
		
			
				|  |  | -            'status' => 0,
 | 
	
		
			
				|  |  | -        ];
 | 
	
		
			
				|  |  | -        dump($data);
 | 
	
		
			
				|  |  | -        $jsonStr = json_encode($data);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        $header = array(
 | 
	
		
			
				|  |  | -            'Content-Type: application/json; charset=utf-8',
 | 
	
		
			
				|  |  | -            'Content-Length: ' . strlen($jsonStr)
 | 
	
		
			
				|  |  | -        );
 | 
	
		
			
				|  |  | -        $rs = curl_post($url,$jsonStr,$header);
 | 
	
		
			
				|  |  | -        $rs = json_decode($rs,true);
 | 
	
		
			
				|  |  | -        dump($rs);
 | 
	
		
			
				|  |  | -        if(is_array($rs) && isset($rs['ErrorCode']) && $rs['ErrorCode'] == 0){
 | 
	
		
			
				|  |  | -            $tasklog['status'] = 1;
 | 
	
		
			
				|  |  | -            //正常的,可以下载了
 | 
	
		
			
				|  |  | -            if(isset($rs['File']) && !empty($rs['File'])){
 | 
	
		
			
				|  |  | -                foreach($rs['File'] as $key => $val){
 | 
	
		
			
				|  |  | -                    echo $val['URL'];
 | 
	
		
			
				|  |  | -                    //下载
 | 
	
		
			
				|  |  | -                    $gz_path = $this->downloadfile($val['URL'],$data['ChatType'],$data['MsgTime'].'_'.$data['ChatType'].'.json.gz');
 | 
	
		
			
				|  |  | -                    dump($gz_path);
 | 
	
		
			
				|  |  | -                    //解压
 | 
	
		
			
				|  |  | -                    $json_path = $this->jieyagz($gz_path);
 | 
	
		
			
				|  |  | -                    dump($json_path);
 | 
	
		
			
				|  |  | -                    //分析
 | 
	
		
			
				|  |  | -                    $content = $this->readjson_group($json_path);
 | 
	
		
			
				|  |  | -                    dump($content);
 | 
	
		
			
				|  |  | -                    //入库
 | 
	
		
			
				|  |  | -                    if(!empty($content)){
 | 
	
		
			
				|  |  | -                        Db::name('imlog_group')->insertAll($content);
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        Db::name('imlog_tasklog')->insertGetId($tasklog);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        echo '结束';
 | 
	
		
			
				|  |  | -        exit;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    //下载聊天记录
 | 
	
		
			
				|  |  | -    public function auto_imc2c(){
 | 
	
		
			
				|  |  | -        $sdkappid  = '1400818730';
 | 
	
		
			
				|  |  | -        $sdkappkey = 'f31aa80a36cef72829fbcdcb10aa2aadcea2944787f2b268d46021e67711326b';
 | 
	
		
			
				|  |  | -        $usersig   = $this->usersig($sdkappid,$sdkappkey);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        $random = rand(10000000,99999999);
 | 
	
		
			
				|  |  | -        $url = 'https://console.tim.qq.com/v4/open_msg_svc/get_history?sdkappid='.$sdkappid.'&identifier=administrator&usersig='.$usersig.'&random='.$random.'&contenttype=json';
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        $data = [
 | 
	
		
			
				|  |  | -            'ChatType' => 'C2C',
 | 
	
		
			
				|  |  | -            'MsgTime'  => date('YmdH',strtotime('-3 Hours')),
 | 
	
		
			
				|  |  | -        ];
 | 
	
		
			
				|  |  | -        $tasklog = [
 | 
	
		
			
				|  |  | -            'type' => $data['ChatType'] == 'C2C' ? 1 : 2,
 | 
	
		
			
				|  |  | -            'datehour' => $data['MsgTime'],
 | 
	
		
			
				|  |  | -            'createtime' => time(),
 | 
	
		
			
				|  |  | -            'status' => 0,
 | 
	
		
			
				|  |  | -        ];
 | 
	
		
			
				|  |  | -        dump($data);
 | 
	
		
			
				|  |  | -        $jsonStr = json_encode($data);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        $header = array(
 | 
	
		
			
				|  |  | -            'Content-Type: application/json; charset=utf-8',
 | 
	
		
			
				|  |  | -            'Content-Length: ' . strlen($jsonStr)
 | 
	
		
			
				|  |  | -        );
 | 
	
		
			
				|  |  | -        $rs = curl_post($url,$jsonStr,$header);
 | 
	
		
			
				|  |  | -        $rs = json_decode($rs,true);
 | 
	
		
			
				|  |  | -        dump($rs);
 | 
	
		
			
				|  |  | -        if(is_array($rs) && isset($rs['ErrorCode']) && $rs['ErrorCode'] == 0){
 | 
	
		
			
				|  |  | -            $tasklog['status'] = 1;
 | 
	
		
			
				|  |  | -            //正常的,可以下载了
 | 
	
		
			
				|  |  | -            if(isset($rs['File']) && !empty($rs['File'])){
 | 
	
		
			
				|  |  | -                foreach($rs['File'] as $key => $val){
 | 
	
		
			
				|  |  | -                    //下载
 | 
	
		
			
				|  |  | -                    $gz_path = $this->downloadfile($val['URL'],$data['ChatType'],$data['MsgTime'].'_'.$data['ChatType'].'.json.gz');
 | 
	
		
			
				|  |  | -                    dump($gz_path);
 | 
	
		
			
				|  |  | -                    //解压
 | 
	
		
			
				|  |  | -                    $json_path = $this->jieyagz($gz_path);
 | 
	
		
			
				|  |  | -                    dump($json_path);
 | 
	
		
			
				|  |  | -                    //分析
 | 
	
		
			
				|  |  | -                    $content = $this->readjson($json_path);
 | 
	
		
			
				|  |  | -                    dump($content);
 | 
	
		
			
				|  |  | -                    //入库
 | 
	
		
			
				|  |  | -                    if(!empty($content)){
 | 
	
		
			
				|  |  | -                        Db::name('imlog_c2c')->insertAll($content);
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        Db::name('imlog_tasklog')->insertGetId($tasklog);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        echo '结束';
 | 
	
		
			
				|  |  | -        exit;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    //下载远程文件 到指定目录
 | 
	
		
			
				|  |  | -    private function downloadfile($file_url, $path = '', $save_file_name = '')
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        $basepath = '/uploaded/';
 | 
	
		
			
				|  |  | -        if ($path) {
 | 
	
		
			
				|  |  | -            $basepath = $basepath . $path . '/';
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        $basepath = $basepath . date('Ymd');
 | 
	
		
			
				|  |  | -        $dir_path = ROOT_PATH . '/public' . $basepath;
 | 
	
		
			
				|  |  | -        if (!is_dir($dir_path)) {
 | 
	
		
			
				|  |  | -            mkdir($dir_path, 0777, true);
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        $file = file_get_contents($file_url);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        //传入保存文件的名称
 | 
	
		
			
				|  |  | -        $filename = $save_file_name ?: pathinfo($file_url, PATHINFO_BASENAME);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        $resource = fopen($dir_path. '/'. $filename, 'w');
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        fwrite($resource, $file);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        fclose($resource);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        return $dir_path . '/' . $filename;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    //解压
 | 
	
		
			
				|  |  | -    private function jieyagz($gz_path = ''){
 | 
	
		
			
				|  |  | -//        $gz_path   = 'E:\phpstudy_pro\wwwnew\ggyuyin\/public/uploaded/C2C/20230726/2023072514_C2C.json.gz';
 | 
	
		
			
				|  |  | -        $json_path = substr($gz_path,0,-3);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        if ($zp = gzopen($gz_path, 'r')) { // 打开压缩文件
 | 
	
		
			
				|  |  | -            if ($fp = fopen($json_path, 'w')) { // 打开目标文件
 | 
	
		
			
				|  |  | -                while (!gzeof($zp)) {
 | 
	
		
			
				|  |  | -                    fwrite($fp, gzread($zp, 1024 * 512)); // 逐块读取和解压缩后写入
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -                fclose($fp);
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -            gzclose($zp);
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        return $json_path;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    //读取json并分析
 | 
	
		
			
				|  |  | -    private function readjson($json_path = ''){
 | 
	
		
			
				|  |  | -        $newMsgList = [];
 | 
	
		
			
				|  |  | -//        $json_path    = 'E:\phpstudy_pro\wwwnew\ggyuyin\/public/uploaded/C2C/20230726/2023072514_C2C.json';
 | 
	
		
			
				|  |  | -        $json_content = file_get_contents($json_path);
 | 
	
		
			
				|  |  | -        $json_content = json_decode($json_content,true);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        if(!empty($json_content) && is_array($json_content) && isset($json_content['MsgList'])){
 | 
	
		
			
				|  |  | -            $MsgList = $json_content['MsgList'];
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            if(!empty($MsgList)){
 | 
	
		
			
				|  |  | -                foreach($MsgList as $key => $val)
 | 
	
		
			
				|  |  | -                {
 | 
	
		
			
				|  |  | -                    $newone = [
 | 
	
		
			
				|  |  | -                        'ClientIP'        => isset($val['ClientIP'])        ? $val['ClientIP']             : '',
 | 
	
		
			
				|  |  | -                        'CloudCustomData' => isset($val['CloudCustomData']) ? $val['CloudCustomData']      : '',
 | 
	
		
			
				|  |  | -                        'From_Account'    => isset($val['From_Account'])    ? intval($val['From_Account']) : 0,
 | 
	
		
			
				|  |  | -                        //'MsgBody'         => isset($val['MsgBody'])         ? json_encode($val['MsgBody']) : '',
 | 
	
		
			
				|  |  | -                        'MsgFromPlatform' => isset($val['MsgFromPlatform']) ? $val['MsgFromPlatform']      : '',
 | 
	
		
			
				|  |  | -                        'MsgRandom'       => isset($val['MsgRandom'])       ? $val['MsgRandom']            : '',
 | 
	
		
			
				|  |  | -                        'MsgSeq'          => isset($val['MsgSeq'])          ? $val['MsgSeq']               : '',
 | 
	
		
			
				|  |  | -                        'MsgTimestamp'    => isset($val['MsgTimestamp'])    ? $val['MsgTimestamp']         : '',
 | 
	
		
			
				|  |  | -                        'To_Account'      => isset($val['To_Account'])      ? intval($val['To_Account'])   : 0,
 | 
	
		
			
				|  |  | -                    ];
 | 
	
		
			
				|  |  | -                    //解析数据类型
 | 
	
		
			
				|  |  | -                    if(isset($val['MsgBody'][0]['MsgType'])){
 | 
	
		
			
				|  |  | -                        $newone['MsgType'] = $val['MsgBody'][0]['MsgType'];
 | 
	
		
			
				|  |  | -                        //文本
 | 
	
		
			
				|  |  | -                        if($val['MsgBody'][0]['MsgType'] == 'TIMTextElem'){
 | 
	
		
			
				|  |  | -                            $newone['MsgInfo'] = '';
 | 
	
		
			
				|  |  | -                            if(isset($val['MsgBody'][0]['MsgContent']['Text'])){
 | 
	
		
			
				|  |  | -                                $newone['MsgInfo'] = $val['MsgBody'][0]['MsgContent']['Text'];
 | 
	
		
			
				|  |  | -                            }
 | 
	
		
			
				|  |  | -                        }
 | 
	
		
			
				|  |  | -                        //图片
 | 
	
		
			
				|  |  | -                        if($val['MsgBody'][0]['MsgType'] == 'TIMImageElem'){
 | 
	
		
			
				|  |  | -                            $newone['MsgInfo'] = '';
 | 
	
		
			
				|  |  | -                            if(isset($val['MsgBody'][0]['MsgContent']['ImageInfoArray'][0]['URL'])){
 | 
	
		
			
				|  |  | -                                $newone['MsgInfo'] = $val['MsgBody'][0]['MsgContent']['ImageInfoArray'][0]['URL'];
 | 
	
		
			
				|  |  | -                            }
 | 
	
		
			
				|  |  | -                        }
 | 
	
		
			
				|  |  | -                        //声音
 | 
	
		
			
				|  |  | -                        if($val['MsgBody'][0]['MsgType'] == 'TIMSoundElem'){
 | 
	
		
			
				|  |  | -                            $newone['MsgInfo'] = '';
 | 
	
		
			
				|  |  | -                            if(isset($val['MsgBody'][0]['MsgContent']['Url'])){
 | 
	
		
			
				|  |  | -                                $newone['MsgInfo'] = $val['MsgBody'][0]['MsgContent']['Url'];
 | 
	
		
			
				|  |  | -                            }
 | 
	
		
			
				|  |  | -                        }
 | 
	
		
			
				|  |  | -                        //视频
 | 
	
		
			
				|  |  | -                        if($val['MsgBody'][0]['MsgType'] == 'TIMVideoFileElem'){
 | 
	
		
			
				|  |  | -                            $newone['MsgInfo'] = '';
 | 
	
		
			
				|  |  | -                            if(isset($val['MsgBody'][0]['MsgContent']['VideoUrl'])){
 | 
	
		
			
				|  |  | -                                $newone['MsgInfo'] = $val['MsgBody'][0]['MsgContent']['VideoUrl'];
 | 
	
		
			
				|  |  | -                            }
 | 
	
		
			
				|  |  | -                        }
 | 
	
		
			
				|  |  | -                        //其他
 | 
	
		
			
				|  |  | -                        continue;
 | 
	
		
			
				|  |  | -                    }else{
 | 
	
		
			
				|  |  | -                        continue;
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                    $newMsgList[] = $newone;
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        return $newMsgList;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    //读取json并分析
 | 
	
		
			
				|  |  | -    public function readjson_group($json_path = ''){
 | 
	
		
			
				|  |  | -        $newMsgList = [];
 | 
	
		
			
				|  |  | -        //$json_path    = 'E:\phpstudy_pro\wwwnew\ggyuyin\/public/uploaded/Group/20230727/2023072615_Group.json';
 | 
	
		
			
				|  |  | -        $json_content = file_get_contents($json_path);
 | 
	
		
			
				|  |  | -        $json_content = json_decode($json_content,true);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        if(!empty($json_content) && is_array($json_content) && isset($json_content['MsgList'])){
 | 
	
		
			
				|  |  | -            $MsgList = $json_content['MsgList'];
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            if(!empty($MsgList)){
 | 
	
		
			
				|  |  | -                foreach($MsgList as $key => $val)
 | 
	
		
			
				|  |  | -                {
 | 
	
		
			
				|  |  | -                    $newone = [
 | 
	
		
			
				|  |  | -                        //'key' => $key,辅助查找
 | 
	
		
			
				|  |  | -                        'ClientIP'        => isset($val['ClientIP'])        ? $val['ClientIP']             : '',
 | 
	
		
			
				|  |  | -                        'From_Account'    => isset($val['From_Account'])    ? intval($val['From_Account']) : 0,
 | 
	
		
			
				|  |  | -                        'GroupId'         => isset($val['GroupId'])         ? intval($val['GroupId'])      : 0,
 | 
	
		
			
				|  |  | -                        //'MsgBody'         => isset($val['MsgBody'])         ? json_encode($val['MsgBody']) : '',
 | 
	
		
			
				|  |  | -                        'MsgFromPlatform' => isset($val['MsgFromPlatform']) ? $val['MsgFromPlatform']      : '',
 | 
	
		
			
				|  |  | -                        'MsgSeq'          => isset($val['MsgSeq'])          ? $val['MsgSeq']               : '',
 | 
	
		
			
				|  |  | -                        'MsgTimestamp'    => isset($val['MsgTimestamp'])    ? $val['MsgTimestamp']         : '',
 | 
	
		
			
				|  |  | -                    ];
 | 
	
		
			
				|  |  | -                    //解析数据类型
 | 
	
		
			
				|  |  | -                    if(isset($val['MsgBody'][0]['MsgType'])){
 | 
	
		
			
				|  |  | -                        $newone['MsgType'] = $val['MsgBody'][0]['MsgType'];
 | 
	
		
			
				|  |  | -                        //文本
 | 
	
		
			
				|  |  | -                        if($val['MsgBody'][0]['MsgType'] == 'TIMTextElem'){
 | 
	
		
			
				|  |  | -                            $newone['MsgInfo'] = '';
 | 
	
		
			
				|  |  | -                            if(isset($val['MsgBody'][0]['MsgContent']['Text'])){
 | 
	
		
			
				|  |  | -                                //继续解析
 | 
	
		
			
				|  |  | -                                $text = json_decode($val['MsgBody'][0]['MsgContent']['Text'],true);
 | 
	
		
			
				|  |  | -                                if(isset($text['type']) && $text['type'] == 1){
 | 
	
		
			
				|  |  | -                                    //TYPE_NORMAL =1;//普通消息
 | 
	
		
			
				|  |  | -                                    $newone['MsgInfo'] = isset($text['content']) ? $text['content'] : '';
 | 
	
		
			
				|  |  | -                                    $newMsgList[] = $newone;
 | 
	
		
			
				|  |  | -                                }
 | 
	
		
			
				|  |  | -                                //其他$text['type']的值都是房间内的,礼物的,表情等,不需要记录
 | 
	
		
			
				|  |  | -                            }
 | 
	
		
			
				|  |  | -                        }
 | 
	
		
			
				|  |  | -                        //房间内的不需要显示的内容
 | 
	
		
			
				|  |  | -                        if($val['MsgBody'][0]['MsgType'] == 'TIMCustomElem'){
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                        }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                    //大循环结束
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        return $newMsgList;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    private function usersig($sdkappid,$key){
 | 
	
		
			
				|  |  | -        $api = new TLSSigAPIv2($sdkappid,$key );
 | 
	
		
			
				|  |  | -        $sig = $api->genUserSig('administrator');
 | 
	
		
			
				|  |  | -        return $sig;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |      public function test_redis(){
 | 
	
		
			
				|  |  |          $redis = new Redis();
 | 
	
		
			
				|  |  |          $redisconfig = config("redis");
 |