<?php
//获取UserSig
// namespace Tencent;
// if ( version_compare( PHP_VERSION, '5.1.2' ) < 0 ) {
// trigger_error( 'need php 5.1.2 or newer', E_USER_ERROR );
// }
// $TLSSigAPIv2=new TLSSigAPIv2(1400437259,"b7009c4a7bc78740e5a472a443978d282805cf62d931db0bc89920d0d57a7c80");
// var_dump($TLSSigAPIv2->genUserSig("administrator"));
// die;
class TLSSigAPIv2 {
private $key = "b7009c4a7bc78740e5a472a443978d282805cf62d931db0bc89920d0d57a7c80";
private $sdkappid = 1400437259;
/**
*【功能说明】用于签发 TRTC 和 IM 服务中必须要使用的 UserSig 鉴权票据
*
*【参数说明】
* @param string userid - 用户id,限制长度为32字节,只允许包含大小写英文字母(a-zA-Z)、数字(0-9)及下划线和连词符。
* @param string expire - UserSig 票据的过期时间,单位是秒,比如 86400 代表生成的 UserSig 票据在一天后就无法再使用了。
* @return string 签名字符串
* @throws \Exception
*/
public function genUserSig( $userid, $expire = 86400*180 ) {
return $this->__genSig( $userid, $expire, '', false );
}
/**
*【功能说明】
* 用于签发 TRTC 进房参数中可选的 PrivateMapKey 权限票据。
* PrivateMapKey 需要跟 UserSig 一起使用,但 PrivateMapKey 比 UserSig 有更强的权限控制能力:
* - UserSig 只能控制某个 UserID 有无使用 TRTC 服务的权限,只要 UserSig 正确,其对应的 UserID 可以进出任意房间。
* - PrivateMapKey 则是将 UserID 的权限控制的更加严格,包括能不能进入某个房间,能不能在该房间里上行音视频等等。
* 如果要开启 PrivateMapKey 严格权限位校验,需要在【实时音视频控制台】=>【应用管理】=>【应用信息】中打开“启动权限密钥”开关。
*
*【参数说明】
* @param userid - 用户id,限制长度为32字节,只允许包含大小写英文字母(a-zA-Z)、数字(0-9)及下划线和连词符。
* @param expire - PrivateMapKey 票据的过期时间,单位是秒,比如 86400 生成的 PrivateMapKey 票据在一天后就无法再使用了。
* @param roomid - 房间号,用于指定该 userid 可以进入的房间号
* @param privilegeMap - 权限位,使用了一个字节中的 8 个比特位,分别代表八个具体的功能权限开关:
* - 第 1 位:0000 0001 = 1,创建房间的权限
* - 第 2 位:0000 0010 = 2,加入房间的权限
* - 第 3 位:0000 0100 = 4,发送语音的权限
* - 第 4 位:0000 1000 = 8,接收语音的权限
* - 第 5 位:0001 0000 = 16,发送视频的权限
* - 第 6 位:0010 0000 = 32,接收视频的权限
* - 第 7 位:0100 0000 = 64,发送辅路(也就是屏幕分享)视频的权限
* - 第 8 位:1000 0000 = 200,接收辅路(也就是屏幕分享)视频的权限
* - privilegeMap == 1111 1111 == 255 代表该 userid 在该 roomid 房间内的所有功能权限。
* - privilegeMap == 0010 1010 == 42 代表该 userid 拥有加入房间和接收音视频数据的权限,但不具备其他权限。
*/
public function genPrivateMapKey( $userid, $expire, $roomid, $privilegeMap ) {
$userbuf = $this->__genUserBuf( $userid, $roomid, $expire, $privilegeMap, 0, '' );
echo $userbuf . '\n';
return $this->__genSig( $userid, $expire, $userbuf, true );
}
/**
*【功能说明】
* 用于签发 TRTC 进房参数中可选的 PrivateMapKey 权限票据。
* PrivateMapKey 需要跟 UserSig 一起使用,但 PrivateMapKey 比 UserSig 有更强的权限控制能力:
* - UserSig 只能控制某个 UserID 有无使用 TRTC 服务的权限,只要 UserSig 正确,其对应的 UserID 可以进出任意房间。
* - PrivateMapKey 则是将 UserID 的权限控制的更加严格,包括能不能进入某个房间,能不能在该房间里上行音视频等等。
* 如果要开启 PrivateMapKey 严格权限位校验,需要在【实时音视频控制台】=>【应用管理】=>【应用信息】中打开“启动权限密钥”开关。
*
*【参数说明】
* @param userid - 用户id,限制长度为32字节,只允许包含大小写英文字母(a-zA-Z)、数字(0-9)及下划线和连词符。
* @param expire - PrivateMapKey 票据的过期时间,单位是秒,比如 86400 生成的 PrivateMapKey 票据在一天后就无法再使用了。
* @param roomstr - 房间号,用于指定该 userid 可以进入的房间号
* @param privilegeMap - 权限位,使用了一个字节中的 8 个比特位,分别代表八个具体的功能权限开关:
* - 第 1 位:0000 0001 = 1,创建房间的权限
* - 第 2 位:0000 0010 = 2,加入房间的权限
* - 第 3 位:0000 0100 = 4,发送语音的权限
* - 第 4 位:0000 1000 = 8,接收语音的权限
* - 第 5 位:0001 0000 = 16,发送视频的权限
* - 第 6 位:0010 0000 = 32,接收视频的权限
* - 第 7 位:0100 0000 = 64,发送辅路(也就是屏幕分享)视频的权限
* - 第 8 位:1000 0000 = 200,接收辅路(也就是屏幕分享)视频的权限
* - privilegeMap == 1111 1111 == 255 代表该 userid 在该 roomid 房间内的所有功能权限。
* - privilegeMap == 0010 1010 == 42 代表该 userid 拥有加入房间和接收音视频数据的权限,但不具备其他权限。
*/
public function genPrivateMapKeyWithStringRoomID( $userid, $expire, $roomstr, $privilegeMap ) {
$userbuf = $this->__genUserBuf( $userid, 0, $expire, $privilegeMap, 0, $roomstr );
echo $userbuf . '\n';
return $this->__genSig( $userid, $expire, $userbuf, true );
}
public function __construct( $sdkappid, $key ) {
$this->sdkappid = $sdkappid;
$this->key = $key;
}
/**
* 用于 url 的 base64 encode
* '+' => '*', '/' => '-', '=' => '_'
* @param string $string 需要编码的数据
* @return string 编码后的base64串,失败返回false
* @throws \Exception
*/
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 );
}
/**
* 用于 url 的 base64 decode
* '+' => '*', '/' => '-', '=' => '_'
* @param string $base64 需要解码的base64串
* @return string 解码后的数据,失败返回false
* @throws \Exception
*/
private function base64_url_decode( $base64 ) {
static $replace = Array( '+' => '*', '/' => '-', '=' => '_' );
$string = str_replace( array_values( $replace ), array_keys( $replace ), $base64 );
$result = base64_decode( $string );
if ( $result == false ) {
throw new \Exception( 'base64_url_decode error' );
}
return $result;
}
/**
* TRTC业务进房权限加密串使用用户定义的userbuf
* @brief 生成 userbuf
* @param account 用户名
* @param dwSdkappid sdkappid
* @param dwAuthID 数字房间号
* @param dwExpTime 过期时间:该权限加密串的过期时间. 过期时间 = now+dwExpTime
* @param dwPrivilegeMap 用户权限,255表示所有权限
* @param dwAccountType 用户类型, 默认为0
* @param roomStr 字符串房间号
* @return userbuf string 返回的userbuf
*/
private function __genUserBuf( $account, $dwAuthID, $dwExpTime, $dwPrivilegeMap, $dwAccountType,$roomStr ) {
腾讯即时通讯(Tencent Instant Messaging, 简称TIM)是一款由腾讯公司推出的高效沟通工具,广泛应用于企业级通信场景。在进行腾讯IM对接时,我们需要理解并掌握以下几个关键知识点: 1. **API接口文档**:对接任何第三方服务,首先需要获取到官方提供的API接口文档。腾讯IM提供了丰富的API接口,包括用户管理、会话管理、消息发送与接收、群组管理等功能。通过这些接口,开发者可以实现与腾讯IM系统的交互。 2. **身份验证**:在调用API之前,需要进行身份验证。腾讯IM通常使用Access Token进行权限验证,开发者需要通过特定的API获取Access Token,并在请求时携带此Token,确保操作的合法性。 3. **用户管理**:对接IM系统,需要处理用户注册、登录、注销等操作。腾讯IM提供用户创建、查询、更新和删除等接口,开发者需要根据业务需求设计相应的逻辑。 4. **会话管理**:会话是IM的核心功能之一,包括单聊和群聊。开发者需要熟悉如何创建、获取、更新和结束会话,以及如何管理和同步会话状态。 5. **消息发送与接收**:消息发送是IM的主要功能,包括文本、图片、语音、视频等多种类型。开发者需要理解消息发送的流程,如何构建消息结构,以及如何处理消息的接收和展示。 6. **事件监听**:为了实时响应用户行为和系统事件,如消息送达、用户上线离线等,需要设置事件监听器。腾讯IM提供了丰富的事件回调,开发者需要根据业务需求订阅并处理这些事件。 7. **群组管理**:对于企业级应用,群组管理功能至关重要。包括创建、加入、退出群组,管理群成员,以及群消息的发送和接收等。开发者需要了解群组相关的API,以实现高效的团队协作。 8. **安全与隐私保护**:在对接过程中,必须确保数据的安全性和用户的隐私。这涉及到数据传输的加密、用户信息的保护以及防止恶意攻击等措施。 9. **兼容性与稳定性**:确保IM对接方案在不同平台(如iOS、Android、Web)上运行良好,同时要保证系统的高可用性和稳定性,避免因接口调用问题导致服务中断。 10. **性能优化**:为了提供流畅的用户体验,对接时要考虑消息的推送延迟、网络条件下的数据传输效率等问题,可能需要进行缓存策略、消息分发优化等技术处理。 在实际开发过程中,可能会遇到各种挑战,例如网络环境不稳定、用户量大导致的性能瓶颈等,因此开发者需要具备扎实的编程基础,熟悉网络编程和多线程技术,同时保持对腾讯IM官方文档的持续关注,以便获取最新的技术和解决方案。通过不断实践和优化,才能确保腾讯IM对接的成功实施,为企业或项目带来高效便捷的通信体验。






- 1











- 粉丝: 3114
- 资源: 68
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- Matlab-Matlab资源
- zzrobot_ws-机器人开发资源
- WeUI-Kotlin资源
- lua-5.1.4-15.el7.x64-86.rpm.tar.gz
- 语音质检-实时质检-FreeVoiceQualityControl-AI人工智能资源
- mozjs52-52.9.0-1.el7.x64-86.rpm.tar.gz
- cu-bridge-硬件开发资源
- UMC-移动应用开发资源
- unisrc-单片机开发资源
- ScanConfTool_V2.3(扫描配置工具)
- yudao-ui-admin-vben-Typescript资源
- 基于多传感器融合的轻量化旋转机械故障诊断模型
- java-springboot+vue论坛管理系统毕业设计实现源码(完整前后端+mysql+说明文档+LunW+PPT).zip
- java-springboot+vue旅游管理系统实现源码(完整前后端+mysql+说明文档+LunW+PPT).zip
- java-springboot+vue论坛管理系统实现源码(完整前后端+mysql+说明文档+LunW+PPT).zip
- java-springboot+vue旅游民宿管理平台实现源码(完整前后端+mysql+说明文档+LunW+PPT).zip



评论0