官网文档

https://cloud.tencent.com/document/product/269/37413

由于我是用的laravel,所以用的web方式

<script src="/public/vendor/tim/tim-js.js"></script>
<script src="/public/vendor/tim/cos-js-sdk-v5.min.js"></script>

1、后端签名

https://cloud.tencent.com/document/product/269/32688

https://github.com/tencentyun/tls-sig-api-v2-php/blob/master/src/TLSSigAPIv2.php

拷贝一下就可以了

class TimUserSig
{private $key = false;private $sdkappid = 0;public function __construct(){$this->key = env('TIM_KEY');$this->sdkappid = env('TIM_SDKAPPID');}public function getSdkAppId(){return $this->sdkappid;}public function genUserSig( $userid, $expire = 86400*180 ) {try {return $this->__genSig( $userid, $expire, '', false );} catch(\Exception $e) {return '';}}private function __genSig( $identifier, $expire, $userbuf, $userbuf_enabled ) {$curr_time = time();$sig_array = Array('TLS.ver' => '2.0','TLS.identifier' => strval( $identifier ),'TLS.sdkappid' => intval( $this->sdkappid ),'TLS.expire' => intval( $expire ),'TLS.time' => intval( $curr_time ));$base64_userbuf = '';if ( true == $userbuf_enabled ) {$base64_userbuf = base64_encode( $userbuf );$sig_array['TLS.userbuf'] = strval( $base64_userbuf );}$sig_array['TLS.sig'] = $this->hmacsha256( $identifier, $curr_time, $expire, $base64_userbuf, $userbuf_enabled );if ( $sig_array['TLS.sig'] === false ) {throw new \Exception( 'base64_encode error' );}$json_str_sig = json_encode( $sig_array );if ( $json_str_sig === false ) {throw new \Exception( 'json_encode error' );}$compressed = gzcompress( $json_str_sig );if ( $compressed === false ) {throw new \Exception( 'gzcompress error' );}return $this->base64_url_encode( $compressed );}private function base64_url_encode( $string ) {static $replace = Array( '+' => '*', '/' => '-', '=' => '_' );$base64 = base64_encode( $string );if ( $base64 === false ) {throw new \Exception( 'base64_encode error' );}return str_replace( array_keys( $replace ), array_values( $replace ), $base64 );}private function hmacsha256( $identifier, $curr_time, $expire, $base64_userbuf, $userbuf_enabled ) {$content_to_be_signed = 'TLS.identifier:' . $identifier . "\n". 'TLS.sdkappid:' . $this->sdkappid . "\n". 'TLS.time:' . $curr_time . "\n". 'TLS.expire:' . $expire . "\n";if ( true == $userbuf_enabled ) {$content_to_be_signed .= 'TLS.userbuf:' . $base64_userbuf . "\n";}return base64_encode( hash_hmac( 'sha256', $content_to_be_signed, $this->key, true ) );}
}

前端页面可以参考demo

https://cloud.tencent.com/document/product/269/36852

<div class="layui-card-body"><div class="im-chat-wrapper"><div class="layui-row"><div class="layui-col-xs4"><div class="im-list-container"><div class="im-header-bar"><button class="header-btn" title="刷新列表"><i class="layui-icon layui-icon-refresh-1" id="refushConversationList"></i></button></div><div class="im-scroll-container" id="conversationList"></div></div></div><div class="layui-col-xs8"><div class="im-current-conversation-wrapper"><ul id="emojis"></ul><div class="im-current-conversation"><div class="im-header"><h3 id="fromUser">用户</h3></div><div class="im-content" id="imcontent"></div><div class="im-footer"><div id="im-message-send-box-wrapper"><div class="im-send-header-bar"><i class="layui-icon layui-icon-face-smile-fine upload-picker" id="emojiPicker" title="发表情"></i>   <i class="layui-icon layui-icon-picture upload-picker" id="imageMessage" title="发图片"><input type="file" id="imagePicker" accept="image/*" /></i>   <i class="layui-icon layui-icon-video upload-picker" title="发视频"><input type="file" id="videoPicker" accept="video/*" /></i>   <i class="layui-icon layui-icon-file upload-picker" title="发文件"><input type="file" id="filePicker" accept=".xls,.xlsx,.doc,.docx,.csv,.pdf,.txt,.zip.tar" /></i>   </div><div class="im-send-box"><textarea class="layui-textarea" rows="4" id="message"></textarea><button type="button" class="layui-btn im-send-btn" id="send">发送</button></div></div></div></div></div></div></div></div></div>

我这里把一些东西抽离了下

tim.js

var $ = layui.$;
var scrollContent = document.getElementById('imcontent');/*** 发送文本消息*/
function sendTextMessage(tim, msg, toUsesr)
{// 发送文本消息,Web 端与小程序端相同// 1. 创建消息实例,接口返回的实例可以上屏var message = tim.createTextMessage({to: toUsesr,conversationType: TIM.TYPES.CONV_C2C,// 消息优先级,用于群聊(v2.4.2起支持)。如果某个群的消息超过了频率限制,后台会优先下发高优先级的消息,详细请参考:https://cloud.tencent.com/document/product/269/3663#.E6.B6.88.E6.81.AF.E4.BC.98.E5.85.88.E7.BA.A7.E4.B8.8E.E9.A2.91.E7.8E.87.E6.8E.A7.E5.88.B6)// 支持的枚举值:TIM.TYPES.MSG_PRIORITY_HIGH, TIM.TYPES.MSG_PRIORITY_NORMAL(默认), TIM.TYPES.MSG_PRIORITY_LOW, TIM.TYPES.MSG_PRIORITY_LOWEST// priority: TIM.TYPES.MSG_PRIORITY_NORMAL,payload: {text: msg}});// 2. 发送消息, 返回Promisevar promise = tim.sendMessage(message); if (promise != undefined) {promise.then(function(imResponse) {console.log(imResponse)if (imResponse.code == 0) {parseMyResponse(imResponse)}$('#message').val('');}).catch(function(imError) {layer.msg('消息发送失败,请检查网络或重新发送');});}
}/*** 发送图片消息*/
function sendImageMessage(tim, file, toUsesr)
{var message = tim.createImageMessage({to: toUsesr,conversationType: TIM.TYPES.CONV_C2C,payload: {file: file,},onProgress: function(event) { console.log('file uploading:', event) }});// 2. 发送消息var promise = tim.sendMessage(message);if (promise != undefined) { promise.then(function(imResponse) {if (imResponse.code == 0) {parseMyResponse(imResponse)}}).catch(function(imError) {layer.msg('消息发送失败,请检查网络或重新发送');});}
}/*** 发送视频消息*/
function sendVideoMessage(tim, file, toUsesr)
{var message = tim.createVideoMessage({to: toUsesr,conversationType: TIM.TYPES.CONV_C2C,payload: {file: file,},onProgress: function(event) { console.log('file uploading:', event) }});// 2. 发送消息var promise = tim.sendMessage(message);if (promise != undefined) {promise.then(function(imResponse) {if (imResponse.code == 0) {parseMyResponse(imResponse)}}).catch(function(imError) {layer.msg('消息发送失败,请检查网络或重新发送');});}
}/*** 发送文件消息*/
function sendFileMessage(tim, file, toUsesr)
{var message = tim.createFileMessage({to: toUsesr,conversationType: TIM.TYPES.CONV_C2C,payload: {file: file,},onProgress: function(event) { console.log('file uploading:', event) }});// 2. 发送消息var promise = tim.sendMessage(message);if (promise != undefined) {promise.then(function(imResponse) {if (imResponse.code == 0) {parseMyResponse(imResponse)}}).catch(function(imError) {layer.msg('消息发送失败,请检查网络或重新发送');});}
}/*** 发送表情消息*/
function sendFaceMessage(tim, index, emoji, toUsesr)
{var message = tim.createFaceMessage({to: toUsesr,conversationType: TIM.TYPES.CONV_C2C,payload: {index: index,data: emoji // String 额外数据}});// 2. 发送消息var promise = tim.sendMessage(message);if (promise != undefined) {promise.then(function(imResponse) {if (imResponse.code == 0) {parseMyResponse(imResponse)}}).catch(function(imError) {layer.msg('消息发送失败,请检查网络或重新发送');});}
}/*** 获取会话列表*/
function mgetConversationList(tim)
{var promiseConversationList = tim.getConversationList();if (promiseConversationList != undefined) {promiseConversationList.then(function(imResponse) {var conversationList = imResponse.data.conversationList; // 会话列表,用该列表覆盖原有的会话列表if (conversationList != undefined) {for(var i = 0; i < conversationList.length; i++) {console.log(conversationList[i])parseConversationList(conversationList[i]);}}}).catch(function(imError) {layer.msg('获取会话列表失败,请检查网络或重新发送');});}
}/*** 获取消息列表*/
function mgetMessageList(tim, dataConversationID)
{let promiseMessageList = tim.getMessageList({conversationID: dataConversationID, count: 30});if (promiseMessageList != undefined) {promiseMessageList.then(function(imResponse) {var messageList = imResponse.data.messageList; // 消息列表。console.log(messageList)if (messageList.length > 0) {for(var i = 0; i < messageList.length; i++) {parseFriendResponse(messageList[i])}}// 设置消息已读, 这里默认最多未读消息30条tim.setMessageRead({conversationID: dataConversationID});//const nextReqMessageID = imResponse.data.nextReqMessageID; // 用于续拉,分页续拉时需传入该字段。//const isCompleted = imResponse.data.isCompleted; // 表示是否已经拉完所有消息。});}
}/*** * 解析发送回调*/
function parseImResponse(payload, resType)
{var html = '';if (resType == 'TIMTextElem') {html = payload.text;} else if (resType == 'TIMImageElem') {var images = payload.imageInfoArray;if (images.length > 1) {var image = images[1].imageUrl;html = '<img src="'+image+'" height="180"/>';}} else if (resType == 'TIMFileElem') {var fileName = payload.fileName;var fileUrl = payload.fileUrl;html = fileName + ' &nbsp;<a href="'+fileUrl+'" style="color:#0099CC">下载</a>';} else if (resType == 'TIMFaceElem') {var emoji = payload.data;html = '<img src="https://imgcache.qq.com/open/qcloud/tim/assets/emoji/'+emoji+'" width="30" height="30"/>';}return html;
}/*** * 解析会话列表回调*/
function parseImConversationResponse(payload, resType)
{var html = '';if (resType == 'TIMTextElem') {html = payload.text;} else if (resType == 'TIMImageElem') {html = '[图片]';} else if (resType == 'TIMFileElem') {html = '[文件]';} else if (resType == 'TIMFaceElem') {html = '[表情]';}return html;
}/*** 显示自己的消息*/
function parseMyResponse(imResponse)
{var resData = imResponse.data.message;var resType = resData.type;var resPayload = resData.payload;var html = parseImResponse(resPayload, resType);var resDate = formatDateTime(resData.time);var resAvatar = 'https://imgcache.qq.com/open/qcloud/video/act/webim-avatar/avatar-2.png';if (html != '') {var htmlRes = myMessage(resAvatar, resDate, html);$('#imcontent').append(htmlRes);scrollContent.scrollTop = scrollContent.scrollHeight + 100;}
}/*** 显示别人的消息*/
function parseFriendResponse(imResponse)
{var resType = imResponse.type;var resPayload = imResponse.payload;var html = parseImResponse(resPayload, resType);var resDate = formatDateTime(imResponse.time);var resAvatar = 'https://imgcache.qq.com/open/qcloud/video/act/webim-avatar/avatar-2.png';if (html != '') {var htmlRes = friendMessage(resAvatar, resDate, html);$('#imcontent').append(htmlRes);scrollContent.scrollTop = scrollContent.scrollHeight + 100;}
}/*** 回显自己的消息*/
function myMessage(avatar, date, content)
{var html = '<div class="message-wrapper position-right">';html += '<div class="group-layout position-right">';html += '<div class="col-1"><div class="avatar shape-circle"><img src="'+avatar+'"></div></div>';html += '<div class="col-2">';html += '<div class="date">'+date+'</div>';html += '<div class="content-wrapper"><div class="message-content">'+content+'</div></div>';html += '</div>';html += '</div></div>';return html;
}/*** 回显别人的消息*/
function friendMessage(avatar, date, content)
{var html = '<div class="message-wrapper position-left">';html += '<div class="group-layout position-left">';html += '<div class="col-1"><div class="avatar shape-circle"><img src="'+avatar+'"></div></div>';html += '<div class="col-2">';html += '<div class="date">'+date+'</div>';html += '<div class="content-wrapper"><div class="message-content">'+content+'</div></div>';html += '</div>';html += '</div></div>';return html;
}/*** 解析会话列表*/
function parseConversationList(conversationData)
{var resMessage = conversationData.lastMessage;var resConversationID = conversationData.conversationID;var resUserProfile = conversationData.userProfile;var resUnreadCount = conversationData.unreadCount;var resUserId = resUserProfile.userID;var resAvatar = resUserProfile.avatar;if (resAvatar == '') {resAvatar = 'https://imgcache.qq.com/open/qcloud/video/act/webim-avatar/avatar-3.png';}var resType = resMessage.type;var resPayload = resMessage.payload; var resHtml = parseImConversationResponse(resPayload, resType);var html ='<div class="im-conversation-container" data-id="'+resConversationID+'" data-user="'+resUserId+'">';html += '<div class="im-close-btn"><div class="im-item-delete">删除</div></div>';html += '<div class="im-warp">';html += '<div class="im-avatar"><img src="'+resAvatar+'" width="40" height="40" /></div>';html += '<div class="im-content-main">';html += '<div class="im-name-time"><div class="im-name">'+resUserId+'</div><div class="im-time">2020-10-15</div></div>';html += '<div class="im-content-count"><div class="im-content">'+resHtml+'</div><div class="im-count">';if (resUnreadCount > 0) {html += '<span class="layui-badge">'+resUnreadCount+'</span>';}html += '</div></div>';html += '</div></div></div>';$('#conversationList').append(html);
}/***  格式化时间戳*/
function formatDateTime(date)
{var date = new Date(date * 1000);var year = date.getFullYear();var month = date.getMonth()+1;var day = date.getDate();month = month < 10 ? "0"+month:month;day = day < 10 ? "0"+day:day;return year+'-'+month+'-'+day;
}function emojis()
{return ['emoji_141@2x.png', 'emoji_113@2x.png',  'emoji_75@2x.png', 'emoji_7@2x.png', 'emoji_9@2x.png', 'emoji_69@2x.png','emoji_68@2x.png', 'emoji_85@2x.png', 'emoji_88@2x.png', 'emoji_76@2x.png', 'emoji_33@2x.png', 'emoji_27@2x.png','emoji_120@2x.png', 'emoji_59@2x.png', 'emoji_37@2x.png', 'emoji_5@2x.png', 'emoji_79@2x.png', 'emoji_107@2x.png','emoji_18@2x.png', 'emoji_105@2x.png', 'emoji_38@2x.png', 'emoji_48@2x.png', 'emoji_22@2x.png', 'emoji_49@2x.png', 'emoji_53@2x.png', 'emoji_39@2x.png', 'emoji_54@2x.png', 'emoji_10@2x.png', 'emoji_83@2x.png', 'emoji_95@2x.png','emoji_91@2x.png', 'emoji_8@2x.png', 'emoji_127@2x.png', 'emoji_55@2x.png', 'emoji_90@2x.png', 'emoji_29@2x.png','emoji_3@2x.png', 'emoji_56@2x.png', 'emoji_84@2x.png', 'emoji_111@2x.png', 'emoji_67@2x.png', 'emoji_126@2x.png','emoji_35@2x.png', 'emoji_15@2x.png', 'emoji_19@2x.png', 'emoji_62@2x.png', 'emoji_30@2x.png', 'emoji_133@2x.png','emoji_119@2x.png', 'emoji_70@2x.png', 'emoji_32@2x.png', 'emoji_17@2x.png', 'emoji_45@2x.png', 'emoji_44@2x.png','emoji_66@2x.png', 'emoji_104@2x.png', 'emoji_63@2x.png', 'emoji_11@2x.png', 'emoji_99@2x.png', 'emoji_108@2x.png','emoji_112@2x.png', 'emoji_26@2x.png', 'emoji_89@2x.png', 'emoji_14@2x.png', 'emoji_1@2x.png', 'emoji_82@2x.png','emoji_25@2x.png', 'emoji_71@2x.png', 'emoji_12@2x.png', 'emoji_16@2x.png', 'emoji_43@2x.png', 'emoji_64@2x.png', 'emoji_50@2x.png', 'emoji_34@2x.png', 'emoji_97@2x.png', 'emoji_92@2x.png', 'emoji_137@2x.png', 'emoji_65@2x.png', 'emoji_123@2x.png', 'emoji_135@2x.png', 'emoji_24@2x.png', 'emoji_60@2x.png', 'emoji_61@2x.png', 'emoji_140@2x.png', 'emoji_40@2x.png', 'emoji_58@2x.png', 'emoji_51@2x.png', 'emoji_23@2x.png', 'emoji_98@2x.png', 'emoji_4@2x.png', 'emoji_0@2x.png', 'emoji_116@2x.png', 'emoji_52@2x.png', 'emoji_118@2x.png', 'emoji_94@2x.png', 'emoji_28@2x.png', 'emoji_115@2x.png', 'emoji_77@2x.png', 'emoji_110@2x.png', 'emoji_87@2x.png', 'emoji_41@2x.png', 'emoji_20@2x.png', 'emoji_124@2x.png', 'emoji_86@2x.png', 'emoji_101@2x.png', 'emoji_131@2x.png', 'emoji_102@2x.png', 'emoji_139@2x.png', 'emoji_138@2x.png', 'emoji_96@2x.png', 'emoji_6@2x.png', 'emoji_114@2x.png', 'emoji_46@2x.png', 'emoji_109@2x.png', 'emoji_81@2x.png', 'emoji_72@2x.png', 'emoji_36@2x.png', 'emoji_130@2x.png', 'emoji_136@2x.png', 'emoji_134@2x.png', 'emoji_42@2x.png', 'emoji_117@2x.png', 'emoji_21@2x.png', 'emoji_31@2x.png', 'emoji_2@2x.png', 'emoji_63@2x.png', 'emoji_78@2x.png', 'emoji_132@2x.png', 'emoji_125@2x.png', 'emoji_128@2x.png', 'emoji_47@2x.png', 'emoji_80@2x.png', 'emoji_103@2x.png', 'emoji_57@2x.png', 'emoji_129@2x.png' ];
}function wiboEmojis()
{return {'[NO]': 'emoji_0@2x.png','[OK]': 'emoji_1@2x.png','[下雨]': 'emoji_2@2x.png','[么么哒]': 'emoji_3@2x.png','[乒乓]': 'emoji_4@2x.png','[便便]': 'emoji_5@2x.png','[信封]': 'emoji_6@2x.png','[偷笑]': 'emoji_7@2x.png','[傲慢]': 'emoji_8@2x.png','[再见]': 'emoji_9@2x.png','[冷汗]': 'emoji_10@2x.png','[凋谢]': 'emoji_11@2x.png','[刀]': 'emoji_12@2x.png','[删除]': 'emoji_13@2x.png','[勾引]': 'emoji_14@2x.png','[发呆]': 'emoji_15@2x.png','[发抖]': 'emoji_16@2x.png','[可怜]': 'emoji_17@2x.png','[可爱]': 'emoji_18@2x.png','[右哼哼]': 'emoji_19@2x.png','[右太极]': 'emoji_20@2x.png','[右车头]': 'emoji_21@2x.png','[吐]': 'emoji_22@2x.png','[吓]': 'emoji_23@2x.png','[咒骂]': 'emoji_24@2x.png','[咖啡]': 'emoji_25@2x.png','[啤酒]': 'emoji_26@2x.png','[嘘]': 'emoji_27@2x.png','[回头]': 'emoji_28@2x.png','[困]': 'emoji_29@2x.png','[坏笑]': 'emoji_30@2x.png','[多云]': 'emoji_31@2x.png','[大兵]': 'emoji_32@2x.png','[大哭]': 'emoji_33@2x.png','[太阳]': 'emoji_34@2x.png','[奋斗]': 'emoji_35@2x.png','[奶瓶]': 'emoji_36@2x.png','[委屈]': 'emoji_37@2x.png','[害羞]': 'emoji_38@2x.png','[尴尬]': 'emoji_39@2x.png','[左哼哼]': 'emoji_40@2x.png','[左太极]': 'emoji_41@2x.png','[左车头]': 'emoji_42@2x.png','[差劲]': 'emoji_43@2x.png','[弱]': 'emoji_44@2x.png','[强]': 'emoji_45@2x.png','[彩带]': 'emoji_46@2x.png','[彩球]': 'emoji_47@2x.png','[得意]': 'emoji_48@2x.png','[微笑]': 'emoji_49@2x.png','[心碎了]': 'emoji_50@2x.png','[快哭了]': 'emoji_51@2x.png','[怄火]': 'emoji_52@2x.png','[怒]': 'emoji_53@2x.png','[惊恐]': 'emoji_54@2x.png','[惊讶]': 'emoji_55@2x.png','[憨笑]': 'emoji_56@2x.png','[手枪]': 'emoji_57@2x.png','[打哈欠]': 'emoji_58@2x.png','[抓狂]': 'emoji_59@2x.png','[折磨]': 'emoji_60@2x.png','[抠鼻]': 'emoji_61@2x.png','[抱抱]': 'emoji_62@2x.png','[抱拳]': 'emoji_63@2x.png','[拳头]': 'emoji_64@2x.png','[挥手]': 'emoji_65@2x.png','[握手]': 'emoji_66@2x.png','[撇嘴]': 'emoji_67@2x.png','[擦汗]': 'emoji_68@2x.png','[敲打]': 'emoji_69@2x.png','[晕]': 'emoji_70@2x.png','[月亮]': 'emoji_71@2x.png','[棒棒糖]': 'emoji_72@2x.png','[汽车]': 'emoji_73@2x.png','[沙发]': 'emoji_74@2x.png','[流汗]': 'emoji_75@2x.png','[流泪]': 'emoji_76@2x.png','[激动]': 'emoji_77@2x.png','[灯泡]': 'emoji_78@2x.png','[炸弹]': 'emoji_79@2x.png','[熊猫]': 'emoji_80@2x.png','[爆筋]': 'emoji_81@2x.png','[爱你]': 'emoji_82@2x.png','[爱心]': 'emoji_83@2x.png','[爱情]': 'emoji_84@2x.png','[猪头]': 'emoji_85@2x.png','[猫咪]': 'emoji_86@2x.png','[献吻]': 'emoji_87@2x.png','[玫瑰]': 'emoji_88@2x.png','[瓢虫]': 'emoji_89@2x.png','[疑问]': 'emoji_90@2x.png','[白眼]': 'emoji_91@2x.png','[皮球]': 'emoji_92@2x.png','[睡觉]': 'emoji_93@2x.png','[磕头]': 'emoji_94@2x.png','[示爱]': 'emoji_95@2x.png','[礼品袋]': 'emoji_96@2x.png','[礼物]': 'emoji_97@2x.png','[篮球]': 'emoji_98@2x.png','[米饭]': 'emoji_99@2x.png','[糗大了]': 'emoji_100@2x.png','[红双喜]': 'emoji_101@2x.png','[红灯笼]': 'emoji_102@2x.png','[纸巾]': 'emoji_103@2x.png','[胜利]': 'emoji_104@2x.png','[色]': 'emoji_105@2x.png','[药]': 'emoji_106@2x.png','[菜刀]': 'emoji_107@2x.png','[蛋糕]': 'emoji_108@2x.png','[蜡烛]': 'emoji_109@2x.png','[街舞]': 'emoji_110@2x.png','[衰]': 'emoji_111@2x.png','[西瓜]': 'emoji_112@2x.png','[调皮]': 'emoji_113@2x.png','[象棋]': 'emoji_114@2x.png','[跳绳]': 'emoji_115@2x.png','[跳跳]': 'emoji_116@2x.png','[车厢]': 'emoji_117@2x.png','[转圈]': 'emoji_118@2x.png','[鄙视]': 'emoji_119@2x.png','[酷]': 'emoji_120@2x.png','[钞票]': 'emoji_121@2x.png','[钻戒]': 'emoji_122@2x.png','[闪电]': 'emoji_123@2x.png','[闭嘴]': 'emoji_124@2x.png','[闹钟]': 'emoji_125@2x.png','[阴险]': 'emoji_126@2x.png','[难过]': 'emoji_127@2x.png','[雨伞]': 'emoji_128@2x.png','[青蛙]': 'emoji_129@2x.png','[面条]': 'emoji_130@2x.png','[鞭炮]': 'emoji_131@2x.png','[风车]': 'emoji_132@2x.png','[飞吻]': 'emoji_133@2x.png','[飞机]': 'emoji_134@2x.png','[饥饿]': 'emoji_135@2x.png','[香蕉]': 'emoji_136@2x.png','[骷髅]': 'emoji_137@2x.png','[麦克风]': 'emoji_138@2x.png','[麻将]': 'emoji_139@2x.png','[鼓掌]': 'emoji_140@2x.png','[龇牙]': 'emoji_141@2x.png'};
}function wiboEmojiNames()
{return ['[龇牙]','[调皮]','[流汗]','[偷笑]','[再见]','[敲打]','[擦汗]','[猪头]','[玫瑰]','[流泪]','[大哭]','[嘘]','[酷]','[抓狂]','[委屈]','[便便]','[炸弹]','[菜刀]','[可爱]','[色]','[害羞]','[得意]','[吐]','[微笑]','[怒]','[尴尬]','[惊恐]','[冷汗]','[爱心]','[示爱]','[白眼]','[傲慢]','[难过]','[惊讶]','[疑问]','[困]','[么么哒]','[憨笑]','[爱情]','[衰]','[撇嘴]','[阴险]','[奋斗]','[发呆]','[右哼哼]','[抱抱]','[坏笑]','[飞吻]','[鄙视]','[晕]','[大兵]','[可怜]','[强]','[弱]','[握手]','[胜利]','[抱拳]','[凋谢]','[米饭]','[蛋糕]','[西瓜]','[啤酒]','[瓢虫]','[勾引]','[OK]','[爱你]','[咖啡]','[月亮]','[刀]','[发抖]','[差劲]','[拳头]','[心碎了]','[太阳]','[礼物]','[皮球]','[骷髅]','[挥手]','[闪电]','[饥饿]','[咒骂]','[折磨]','[抠鼻]','[鼓掌]','[糗大了]','[左哼哼]','[打哈欠]','[快哭了]','[吓]','[篮球]','[乒乓]','[NO]','[跳跳]','[怄火]','[转圈]','[磕头]','[回头]','[跳绳]','[激动]','[街舞]','[献吻]','[左太极]','[右太极]','[闭嘴]','[猫咪]','[红双喜]','[鞭炮]','[红灯笼]','[麻将]','[麦克风]','[礼品袋]','[信封]','[象棋]','[彩带]','[蜡烛]','[爆筋]','[棒棒糖]','[奶瓶]','[面条]','[香蕉]','[飞机]','[左车头]','[车厢]','[右车头]','[多云]','[下雨]','[钞票]','[熊猫]','[灯泡]','[风车]','[闹钟]','[雨伞]','[彩球]','[钻戒]','[沙发]','[纸巾]','[手枪]','[青蛙]'];
}

登录及消息发送

//var emojis = emojis();
var emojis = wiboEmojis();
var emojiNames = wiboEmojiNames();
var emojisList = '';
/*for(var i = 0; i < emojis.length; i++) {emojisList += '<li data-index="'+i+'" data-emoji="https://imgcache.qq.com/open/qcloud/tim/assets/emoji/'+emojis[i]+'"><img src="https://imgcache.qq.com/open/qcloud/tim/assets/emoji/'+emojis[i]+'" width="30" height="30" /></li>';
}*/
for(var i = 0; i < emojiNames.length; i++) {emojisList += '<li data-index="'+i+'" data-emoji="'+emojis[emojiNames[i]]+'"><img src="https://imgcache.qq.com/open/qcloud/tim/assets/emoji/'+emojis[emojiNames[i]]+'" width="30" height="30" /></li>';
}
$('#emojis').html(emojisList);
var scrollContent = document.getElementById('imcontent');
var userSig = '{{$userSig}}';
if (userSig == '') {layer.msg('验证失败');
} else {var options = {SDKAppID: '{{$sdkAppId}}' // 接入时需要将0替换为您的即时通信 IM 应用的 SDKAppID};// 创建 SDK 实例,`TIM.create()`方法对于同一个 `SDKAppID` 只会返回同一份实例var tim = TIM.create(options);// 设置 SDK 日志输出级别,详细分级请参见 setLogLevel 接口的说明tim.setLogLevel(0); // 普通级别,日志量较多,接入时建议使用// tim.setLogLevel(1); // release 级别,SDK 输出关键信息,生产环境时建议使用// 注册 COS SDK 插件tim.registerPlugin({'cos-js-sdk': COS});// 接下来可以通过 tim 进行事件绑定和构建 IM 应用let promiseLogin = tim.login({userID: '{{$userId}}', userSig: '{{$userSig}}'}); if (promiseLogin != undefined) {promiseLogin.then(function(imResponse) {layer.msg('登录成功,点击刷新列表按钮获取最新信息');}).catch(function(imError) {layer.msg('登录失败,请检查网络或重新发送');});}// 表情框显示与隐藏$('#emojiPicker').click(function() {$('#emojis').toggle();})$('#refushConversationList').click(function() {$('#conversationList').html('');$('#imcontent').html('');$('#fromUser').html('');// 获取会话列表mgetConversationList(tim);})$('#conversationList').on('click', '.im-conversation-container', function() {$('.im-conversation-container').removeClass('choose');$(this).addClass('choose');var dataUser = $(this).attr('data-user');var dataConversationID = $(this).attr('data-id');$('#imcontent').html('');if (dataUser != '') {var toUser = dataUser;$('#fromUser').html(toUser);// 获取消息mgetMessageList(tim, dataConversationID);// 发送文本$('#send').click(function() {var message = $('#message').val();sendTextMessage(tim, message, toUser);})// 发送图片$('#imagePicker').change(function(e) {var file = e.currentTarget.files[0]sendImageMessage(tim, file, toUser);})// 发送视频$('#videoPicker').change(function(e) {var file = e.currentTarget.files[0]sendVideoMessage(tim, file, toUser);})// 发送文件$('#filePicker').change(function(e) {var file = e.currentTarget.files[0]sendFileMessage(tim, file, toUser);})// 发送表情$('#emojis').on('click', 'li', function() {var dataIndex = parseInt($(this).attr('data-index'));var dataEmoji = $(this).attr('data-emoji')sendFaceMessage(tim, dataIndex, dataEmoji, toUser);$('#emojis').hide();})}})$('#conversationList').on('click', '.im-conversation-container .im-close-btn', function() {$(this).parent().remove();})$('#conversationList').on('mouseover', '.im-conversation-container', function() {console.log(1111)$(this).find('.im-close-btn').css('right', '0px');})$('#conversationList').on('mouseout', '.im-conversation-container', function() {console.log(1111)$(this).find('.im-close-btn').css('right', '-50px');})let onMessageReceived = function(event) {// event.data - 存储 Message 对象的数组 - [Message]var messages = event.data;for(var i = 0; i< messages.length; i++) {var resData = messages[i];parseFriendResponse(resData)}};tim.on(TIM.EVENT.MESSAGE_RECEIVED, onMessageReceived);// 监听状态let onSdkNotReady = function(event) {// 如果想使用发送消息等功能,接入侧需驱动 SDK 进入 ready 状态,重新调用 login 接口即可,如下所示:tim.login({userID: '{{$userId}}', userSig: '{{$userSig}}'}); };tim.on(TIM.EVENT.SDK_NOT_READY, onSdkNotReady);
}

php集成腾讯云im相关推荐

  1. 使用springboot集成腾讯云短信服务,解决配置文件读取乱码问题

    使用springboot集成腾讯云短信服务,解决配置文件读取乱码问题 参考文章: (1)使用springboot集成腾讯云短信服务,解决配置文件读取乱码问题 (2)https://www.cnblog ...

  2. springboot+sms 集成腾讯云短信平台

    springboot+sms 集成腾讯云短信平台实现发送短信功能 一.申请短信功能 到腾讯云管理平台申请短信功能(https://console.cloud.tencent.com/) 1.1 创建短 ...

  3. SpringBoot集成腾讯云存储COS服务

    前言 该文章会先简单的介绍一下腾讯云的COS存储,然后演示如何在SpringBoot项目中集成COS,每一步都有记录,保证初学者也能看懂. 文章目录 前言 1.腾讯云对象存储介绍 1.1.开通&quo ...

  4. SpringBoot集成腾讯云COS存储

    河南循中网络科技有限公司 - 精心创作,详细分解,按照步骤,均可成功! 文章目录 学习资料 集成腾讯云COS存储 添加pom依赖 common的pom文件 yaml配置 创建TencentCosUti ...

  5. Java集成腾讯云音视频录制功能

    Java集成腾讯云音视频录制功能 为什么要实现音视频录制功能 因为我们做的是一个医院的项目,医生和患者可能进行视频通话和语音通话,为了保证通话的质量以及后续的问题, 我们就需要进行音视频录制,以便后续 ...

  6. 微信小程序集成腾讯云 IM SDK

    1.背景 因业务功能需求需要接入IM(即时聊天)功能,一开始想到的是使用 WebSocket 来实现这个功能,然天意捉弄(哈哈)服务器版本太低不支持 wx 协议(也就不支持 WebSocket了)不得 ...

  7. 快速集成腾讯云短信实现短信发送(Spring Boot)

    前言 腾讯云活动白嫖 1.地址 地址:https://cloud.tencent.com/act/free?from=14600 2.创建签名(根据实际情况选择) 我的是网站 3.创建模板 选择模板内 ...

  8. iOS 集成腾讯云聊天 最新sdk使用方法

    一.创建应用 参照腾讯云官方文档 https://cloud.tencent.com/document/product/269/32674 二. 下载Demo源码https://github.com/ ...

  9. ‘TEduBoard‘ is not defined集成腾讯云互动白板时报错

    以下按照腾讯官方文档集成sdk时,即报标题中的错误 var initParams = {id: "sketch", // dom节点idclassId: 1, // 课堂 ID,3 ...

  10. ThinkPHP6集成腾讯云、短信宝短信发送的工具类

    composer安装 composer require mrwanghongda/sms-sdk 代码: use Mrwanghongda\SmsSdk\Sms\SmsFactory;/*** 短信宝 ...

最新文章

  1. 5、catch中发生了未知异常,finally代码块如何应对?
  2. 临时表空间过大解决方法
  3. Google Python Class --- Sorting
  4. linux 编辑脚本 vi,linux中vi编辑器的练习心得
  5. 使用Action启动/关闭Service
  6. PAT甲级1123 Is It a Complete AVL Tree (30分):[C++题解]建立平衡树、bfs,判完全二叉树
  7. mysql 把表的值用来计算_mysql一张表到底能存多少数据?
  8. hdu 5358(尺取法)
  9. Ubuntu 14 配置Android Studio的快捷启动方式
  10. WebService入门篇
  11. 征名公布|Qtum量子链企业版—Unita 中文名征集圆满落幕
  12. 416B. Art Union
  13. django访问mysql数据库--模型(model)
  14. Python常用模块实战之ATM和购物车系统再升级
  15. 统计学习导论(ISLR) 第四章分类算法课后习题
  16. 自制Json解析工具(易语言)
  17. 吃饭,睡觉,打豆豆任务二
  18. linux系统可以安装浩辰CAD,浩辰CAD Linux下载
  19. Reggie外卖项目 —— 开发环境搭建
  20. 44、建筑的外墙保温与装饰工程的防火检查

热门文章

  1. 微信小程序或微信网页里关注公众号
  2. 云基础架构|部署分类|IaaS|PaaS|SaaS——浅析云计算架构
  3. AngularJs的UI组件ui-Bootstrap分享(四)——Datepicker Popup
  4. 基于SSM+SpringBoot+Vue+ElmentUI实现公司案件管理系统
  5. CRMEB多商户商城系统主要功能及技术亮点
  6. 【Code】numpy、pytorch实现全连接神经网络
  7. 毕业之后才知道的——知网查重原理以及降重举例
  8. layui数据表格实现内容筛选的全选和反选功能
  9. 利用Aliddns进行端口映射,外网可以使用域名访问,在公司内网用域名访问不通。
  10. 工具 | 2的次方对照表