云通信IM - 第三方回调简单接收配置

2021-02-21 18:48:58 浏览数 (1)

前言:

为了更好的管理和控制App,IM提供了第三方回调功能,配置使用后,即时通信IM会向App后台服务器发送请求,App后台可以根据收到的回调处理业务逻辑、数据处理存储、功能控制干预,比如禁止该消息下发、用户登录状态的实时变更等。即时通信 IM 目前支持的回调请参见 回调命令列表

配置回调:

1.准备一台云服务器,并放通443、80、9000端口,安装nginx服务、PHP环境

云服务器放通的端口云服务器放通的端口

2.登录IM控制台,回调配置里配置回调url设置事件回调

回调url配置回调url配置

回调地址必须是可以ping通的地址,且域名中不能使用下划线_,如果没有域名备案可以使用外网IP地址作为域名配置。 双向认证的目的是只能从即时通信IM后台回调访问,无法通过客户端或浏览器直接访问。 如何关闭回调:1.取消所有回调事件;2.更改回调地址,配置成无法接收的地址。

4.下载HTTPS双向认证证书、CA 证书,并将下载的Crt、Key、CA证书本地文件上传至服务器。Nginx双向认证文档

5.修改 nginx.conf 配置文件

代码语言:txt复制
    server {
        listen       443 default_server;
        listen       [::]:443 default_server;
        server_name  XX.XX.XX.XX;				# 域名或外网IP地址
        ssl_certificate        XX.XX.XX.XX.crt; # 腾讯给第三方签发的证书
        ssl_certificate_key    XX.XX.XX.XX.key; # 和证书配对的私钥
        ssl_verify_client on; # 验证请求来源
        ssl_client_certificate TencentQQAuthCA.crt; # 腾讯认证的 CA 证书

        location / {
          root /var/html/;
          index  index.html index.htm callback.php;
        }

    }

    server {
        listen 80;
        server_name            XX.XX.XX.XX; # 域名或外网IP地址
        error_log /var/log/nginx/callback_error.log error;

        root /var/html/;
      location / {
        index  index.html index.htm callback.php;
      }

      location ~ .php$ {
             fastcgi_pass   127.0.0.1:9000;
          fastcgi_index  index.php;
           fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
       }
    }

可以不配置双向认证,不配置也可以收到回调请求,双向认证只是为了更安全。 不配置双向认证取消ssl_verify_client on; ssl_client_certificate TencentQQAuthCA.crt; 即可。

6.在/var/html/路径下配置接收回调的PHP文件,并在同文件夹下创建callback.log文件用于保存收到的回调信息

代码语言:txt复制
<!DOCTYPE HTML>
<html>
<body>
<?php

		$json = file_get_contents("php://input");
		$data = json_decode($json, true);
		if($data){
        	$callback_file = fopen("callback.log", "a ") or die("open_file_error!");
        	fwrite($callback_file,var_export($data,true));
        	fwrite($callback_file, "n================================================n");
        	fclose($callback_file);
		}else{
    		echo 'Hello Word!';
		}

?>
</body>
</html>

测试验证回调:

使用Rest Api或客户端发消息验证是否可以收到回调(此处以单聊消息为例)

代码语言:txt复制
array (
  'MsgBody' => 
  array (
    0 => 
    array (
      'MsgType' => 'TIMTextElem', // 消息类型
      'MsgContent' => 
      array (
        'Text' => '测试是否可以收到单聊消息',// 消息内容
      ),
    ),
  ),
  'CallbackCommand' => 'C2C.CallbackBeforeSendMsg', // 回调事件类型
  'From_Account' => 'liyao',	// 发送方userid
  'To_Account' => 'test3',		// 接收方userid
  'MsgRandom' => 1156579512,	// 消息随机数
  'MsgSeq' => 17649,			// 消息ID
  'MsgTime' => 1613897890,		// 消息发送时间
  'MsgKey' => '17649_1156579512_1613897890', // 消息唯一标识
)

1.触发场景:

通过客户端发送单聊消息

通过Rest Api发送单发单聊消息

Rest Api 批量发单聊消息不会触发单聊回调

2. 可实现的功能:

可以通过该回调实时监控用户的单聊消息(记录日志等)

拦截用户的单聊发言请求(业务侧自行实现安全打击功能)

修改发言内容(例如过滤敏感词)

如果同时配置发言前回调和发言后回调,并且通过发言前回调禁止发言,则此时不会收到发言后回调

0 人点赞