Openim.php 6.9 KB
<?php
/**
 * Created by PhpStorm.
 * User: ty01
 * Date: 2022/3/22
 * Time: 11:51
 */

namespace app\api\controller\tencentim;


use think\Request;

class Openim extends Base
{
    public $StatusList;

    public function __construct(Request $request = null)
    {
        parent::__construct($request);
        $this->StatusList = ["Online" => "在班", "PushOnline" => "下班", "Offline" => "下班"];
    }

    /**
     * 1. 获取腾讯云App管理员帐号的签名
     */
    public function getUserSig()
    {
        return $this->userSig;
    }

    /**
     * 2. 查询帐号在线状态
     * 单次限制500条
     */
    public function query_online_status($param)
    {
//        $param = $this->request->param();//前端传json
        if (empty($param)) {
            return array_callback(false, "参数异常");
        }
        $res = $this->send("v4/openim/query_online_status", $param);
        $result = json_decode($res, true);


        if (empty($result) || $result['ActionStatus'] == "FAIL") {
            return array_callback(false, "即时通讯接口异常" . $result['ErrorCode'] . $result['ErrorInfo']);
        }

        $return_data = [];
        $QueryResult = $result['QueryResult'];//返回的用户在线状态结构化信息
        if (!empty($QueryResult)) {
            foreach ($QueryResult as $k => $v) {
                $return_data[$v['To_Account']] = ["To_Account" => $v['To_Account'], "Status" => $v['Status'], "StatusCn" => $this->StatusList[$v['Status']]];
            }
        }
        $ErrorList = $result['ErrorList'];//状态查询失败的帐号列表,在此列表中的目标帐号,状态查询失败或目标帐号不存在。若状态全部查询成功,则 ErrorList 为空
        if (!empty($ErrorList)) {
            foreach ($ErrorList as $kk => $vv) {
                $return_data[$vv['To_Account']] = ["To_Account" => $vv['To_Account'], "Status" => "Offline", "StatusCn" => $this->StatusList["Offline"]];
            }
        }

        return array_callback(true, "成功", $return_data);

    }


    /**
     * 2. 查询帐号在线状态
     * 单次限制500条
     */
    public function api_query_online_status()
    {
        $param = $this->request->param();
        if (empty($param)) {
            $this->error("参数异常");
        }
        $res = $this->send("v4/openim/query_online_status", $param);
        $result = json_decode($res, true);

        if (empty($result) || $result['ActionStatus'] == "FAIL") {
            $this->error("即时通讯接口异常" . $result['ErrorCode'] . $result['ErrorInfo']);
        }

        $return_data = [];
        $QueryResult = $result['QueryResult'];//返回的用户在线状态结构化信息
        if (!empty($QueryResult)) {
            foreach ($QueryResult as $k => $v) {
                $return_data[$v['To_Account']] = ["To_Account" => $v['To_Account'], "Status" => $v['Status'], "StatusCn" => $this->StatusList[$v['Status']]];
            }
        }
        $ErrorList = $result['ErrorList'];//状态查询失败的帐号列表,在此列表中的目标帐号,状态查询失败或目标帐号不存在。若状态全部查询成功,则 ErrorList 为空
        if (!empty($ErrorList)) {
            foreach ($ErrorList as $kk => $vv) {
                $return_data[$vv['To_Account']] = ["To_Account" => $vv['To_Account'], "Status" => "Offline", "StatusCn" => $this->StatusList["Offline"]];
            }
        }

        $this->success("成功", $return_data);

    }

    public function api_account_import(){
        $param=[
            "UserID"=>"15587067522"
        ];
        $res = $this->send("v4/im_open_login_svc/kick", $param);
        $result = json_decode($res, true);

        if (empty($result) || $result['ActionStatus'] == "FAIL") {
            $this->error("即时通讯接口异常" . $result['ErrorCode'] . $result['ErrorInfo']);
        }

        $this->success("成功", $result);
    }

    /**
     * 3. 删除帐号
     */
    public function api_account_delete()
    {
        $param = $this->request->param();
        if (empty($param)) {
            $this->error("参数异常");
        }
        $res = $this->send("v4/im_open_login_svc/account_delete", $param);
        $result = json_decode($res, true);

        if (empty($result) || $result['ActionStatus'] == "FAIL") {
            $this->error("即时通讯接口异常" . $result['ErrorCode'] . $result['ErrorInfo']);
        }

        $this->success("成功", $result);
    }

    /**
     * 4. 设置用户头像
     */
    public function portrait_set($param)
    {
        if (empty($param)) {
            return array_callback(false, "参数异常");
        }
        $param_data = [
            "From_Account" => $param['mobile'],
            "ProfileItem" =>
                [
                    [
                        "Tag" => "Tag_Profile_IM_Image",
                        "Value" => $param['avatar']
                    ]
                ]
        ];
//        file_put_contents("kevin_head.log", json_encode($param_data) . PHP_EOL . PHP_EOL, FILE_APPEND);


        $res = $this->send("v4/profile/portrait_set", $param_data);
        $result = json_decode($res, true);

        if (empty($result) || $result['ActionStatus'] == "FAIL") {
            return array_callback(false, "即时通讯接口异常" . $result['ErrorCode'] . $result['ErrorInfo']);
        }

        return array_callback(true, "头像设置成功", $result);

    }

    /**
     * 5. 批量发单聊消息
     */
    public function batchsendmsg($param)
    {
//        $param = $this->request->param();
        if (empty($param)) {
//            $this->error("参数异常");
            return array_callback(false, "参数异常");
        }
        $param_data = [
            "SyncOtherMachine" => 2, // 消息不同步至发送方
//            "MsgLifeTime"=>0,//只发给在线用户
            "To_Account" => $param['to_user_list'],
//            "MsgSeq" => 1, // 消息序列号
            "MsgRandom" => mt_rand(10000000, 99999999), // 消息随机数
            "MsgBody" => [ // 消息
                [
                    "MsgType" => "TIMTextElem", // 消息类型,TIMTextElem为文本消息
                    "MsgContent" => [
                        "Text" => $param['text'] // 消息文本
                    ]
                ]
            ],
            "CloudCustomData" => "您有新的信息待查看"
        ];
        $res = $this->send("v4/openim/batchsendmsg", $param_data);
        $result = json_decode($res, true);

        if (empty($result) || $result['ActionStatus'] == "FAIL") {
//            $this->error("IM接口异常" . $result['ErrorCode'] . $result['ErrorInfo']);
            return array_callback(false, "IM接口异常" . $result['ErrorCode'] . $result['ErrorInfo']);
        }
//        $this->success("IM发送消息成功", $result);
        return array_callback(true, "IM发送消息成功", $result);
    }


}