|  | @@ -126,7 +126,7 @@ exit;
 | 
	
		
			
				|  |  |          print_r($groupInfo);exit;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    public function substr(string $string, int $start, int $length = null): string
 | 
	
		
			
				|  |  | +    public function substr(string $string, int $start, int $length = null)
 | 
	
		
			
				|  |  |      {
 | 
	
		
			
				|  |  |          return mb_substr($string, $start, $length, 'UTF-8');
 | 
	
		
			
				|  |  |      }
 | 
	
	
		
			
				|  | @@ -679,7 +679,7 @@ exit;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |                  break;
 | 
	
		
			
				|  |  | -            case 'Group.CallbackAfterNewMemberJoin': // 新成员入群
 | 
	
		
			
				|  |  | +            /*case 'Group.CallbackAfterNewMemberJoin': // 新成员入群
 | 
	
		
			
				|  |  |                  $redis = new Redis();
 | 
	
		
			
				|  |  |                  $redisconfig = config("redis");
 | 
	
		
			
				|  |  |                  $redis->connect($redisconfig["host"], $redisconfig["port"]);
 | 
	
	
		
			
				|  | @@ -709,8 +709,8 @@ exit;
 | 
	
		
			
				|  |  |                  $res["ErrorCode"] = 0;
 | 
	
		
			
				|  |  |                  $res["ErrorInfo"] = "";
 | 
	
		
			
				|  |  |                  echo json_encode($res);
 | 
	
		
			
				|  |  | -                break;
 | 
	
		
			
				|  |  | -            case 'Group.CallbackAfterMemberExit': // 成员离开
 | 
	
		
			
				|  |  | +                break;*/
 | 
	
		
			
				|  |  | +            /*case 'Group.CallbackAfterMemberExit': // 成员离开
 | 
	
		
			
				|  |  |                  $redis = new Redis();
 | 
	
		
			
				|  |  |                  $redisconfig = config("redis");
 | 
	
		
			
				|  |  |                  $redis->connect($redisconfig["host"], $redisconfig["port"]);
 | 
	
	
		
			
				|  | @@ -753,7 +753,7 @@ exit;
 | 
	
		
			
				|  |  |                  $res["ErrorCode"] = 0;
 | 
	
		
			
				|  |  |                  $res["ErrorInfo"] = "";
 | 
	
		
			
				|  |  |                  echo json_encode($res);
 | 
	
		
			
				|  |  | -                break;
 | 
	
		
			
				|  |  | +                break;*/
 | 
	
		
			
				|  |  |             /* case 'Group.CallbackBeforeSendMsg': // 群内发送消息之前
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                  $config = config("wxMiniProgram");
 | 
	
	
		
			
				|  | @@ -870,6 +870,86 @@ exit;
 | 
	
		
			
				|  |  |          $this->sendMessageToUser($from_user,$to_user,$message);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    //请求的基础参数
 | 
	
		
			
				|  |  | +    private function baseTencentObj($url)
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        $random = rand(10000000,99999999);
 | 
	
		
			
				|  |  | +        $usersig = $this->usersig("administrator");
 | 
	
		
			
				|  |  | +        // 获取配置信息
 | 
	
		
			
				|  |  | +        $config = config("tencent_im");
 | 
	
		
			
				|  |  | +        $url = "$url";
 | 
	
		
			
				|  |  | +        $url .= "?sdkappid=".$config["sdkappid"];
 | 
	
		
			
				|  |  | +        $url .= "&identifier=administrator";
 | 
	
		
			
				|  |  | +        $url .= "&usersig=".$usersig;
 | 
	
		
			
				|  |  | +        $url .= "&random=".$random;
 | 
	
		
			
				|  |  | +        $url .= "&contenttype=json";
 | 
	
		
			
				|  |  | +        return new tencentim($url);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /** 设置管理员(im端的改变)
 | 
	
		
			
				|  |  | +     * @param $user_id
 | 
	
		
			
				|  |  | +     * @param $party_id
 | 
	
		
			
				|  |  | +     * @param int $status 1:yes 0:no
 | 
	
		
			
				|  |  | +     * @return array|false|mixed
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    public function setUpIMAdmin($user_id, $party_id, int $status=0) {
 | 
	
		
			
				|  |  | +        $url = "https://console.tim.qq.com/v4/group_open_http_svc/modify_group_member_info";
 | 
	
		
			
				|  |  | +        $tencentObj = $this->baseTencentObj($url);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        $groupInfo = $this->getGroupInfo($party_id);
 | 
	
		
			
				|  |  | +        if($groupInfo["GroupInfo"][0]["ErrorCode"] > 0) return false;
 | 
	
		
			
				|  |  | +        // 更新的信息
 | 
	
		
			
				|  |  | +        $data = [];
 | 
	
		
			
				|  |  | +        $data["GroupId"] = $party_id;
 | 
	
		
			
				|  |  | +        if ($status==1){
 | 
	
		
			
				|  |  | +            $data['Role'] = 'Admin';
 | 
	
		
			
				|  |  | +        }else{
 | 
	
		
			
				|  |  | +            $data['Role'] = 'Member';
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        $data['Member_Account'] = $user_id;
 | 
	
		
			
				|  |  | +        return $tencentObj->toSend($data);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    //获取群成员详细资料(目前没用到)
 | 
	
		
			
				|  |  | +    private function getGroupMemberDetails($party_id)
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        $url = "https://console.tim.qq.com/v4/group_open_http_svc/get_group_member_info";
 | 
	
		
			
				|  |  | +        $tencentObj = $this->baseTencentObj($url);
 | 
	
		
			
				|  |  | +        // 获取群组信息
 | 
	
		
			
				|  |  | +        $groupInfo = $this->getGroupInfo($party_id);
 | 
	
		
			
				|  |  | +        if($groupInfo["GroupInfo"][0]["ErrorCode"] > 0) return false;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // 更新的信息
 | 
	
		
			
				|  |  | +        $data = [];
 | 
	
		
			
				|  |  | +        $data["GroupId"] = $party_id;
 | 
	
		
			
				|  |  | +        return  $tencentObj->toSend($data);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    //IM管理员维护,同步本地管理员
 | 
	
		
			
				|  |  | +    public function imAdminMaintenance()
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        $partyIds = \app\admin\model\party\Party::column('id');
 | 
	
		
			
				|  |  | +        foreach ($partyIds as $party_id){
 | 
	
		
			
				|  |  | +            $groupInfo = $this->getGroupInfo($party_id);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            if($groupInfo["GroupInfo"][0]["ErrorCode"] > 0) continue;
 | 
	
		
			
				|  |  | +            $roomInfoData = $groupInfo["GroupInfo"][0]["AppDefinedData"];
 | 
	
		
			
				|  |  | +            $roomInfo = [];
 | 
	
		
			
				|  |  | +            if($roomInfoData) foreach($roomInfoData as $k => $v) {
 | 
	
		
			
				|  |  | +                if($v["Key"] == "roomInfo") $roomInfo = $v["Value"];
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            $roomInfo = json_decode($roomInfo,true);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            // 更新管理员
 | 
	
		
			
				|  |  | +            if(isset($roomInfo["managers"]) && !empty($roomInfo['managers'])) {
 | 
	
		
			
				|  |  | +                foreach ($roomInfo['managers'] as $v){
 | 
	
		
			
				|  |  | +                    $this->setUpIMAdmin($v,$party_id,1);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        $this->success("成功!");
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      /**
 | 
	
		
			
				|  |  |       * 获取用户在线更新
 | 
	
		
			
				|  |  |       */
 |