PHP百度小程序rtc-room组件token获取经历

news2024/11/26 23:31:33

【前言】

目前就职盘古网络集团,一名PHPer程序员。我们的主营业务是百度产品相关,所以最近有了一个百度小程序项目,涉及其音视频组件做直播。

 开发文档

百度智能小程序文档

 鉴权token

百度智能小程序文档

 嗯,很好的功能。结果测试发现本地端画面没问题,然而远端画面黑屏。百度搜索没相关信息,社区贴子就一个,嗯很好。然后我就做了那个挖坑埋自己的事(发帖吧)。

智能小程序开发者社区

 经过漫长的世纪,给我的结果是我点背,申请小程序时其版本是V1,现在是V2了。他们给我处理了下就可以了,我真爱你。。。

废话不多说,文档示例中有go、java、python、偏偏没有php的。

 这你敢看?

经过我多年的php经验按照这个自写了一个类,分享给大家

<?php

namespace baiduapp;
const BASELEN = 50;

class BaiDuLive {
    public $token_version = 2;          // token版本字段
    public function __toString() {
        return get_class($this) . ': ' . print_r($this, true);
    }
    public function gen($app_id, $app_secret, $uid, $parameter, $privileges, $build_timestamp, $valid_time) {
        $uid_bytes = pack('n', strlen($uid)) . $uid;
        $parameter_bytes = '';
        foreach ($parameter as $k => $v) {
            $parameter_bytes .= pack('n', strlen($k)) . $k . pack('n', strlen($v)) . $v;
        }
        $privileges_bytes = '';
        foreach ($privileges as $k => $v) {
            $privileges_bytes .= pack('n', strlen($k)) . $k . pack('J', $v);
        }
        $token_len = BASELEN + strlen($uid) + strlen($parameter_bytes) + strlen($privileges_bytes);
        $barray = pack('NNN', $this->token_version, intval($token_len), intval($app_id)) .
            $uid_bytes .
            pack('n', count($parameter)) .
            $parameter_bytes .
            pack('n', count($privileges)) .
            $privileges_bytes .
            pack('N', intval($build_timestamp / 4294967296)) .
            pack('N', intval($build_timestamp % 4294967296)) .
            pack('N', intval($valid_time));
        $mac = hash_hmac('sha1', $barray, $app_secret, true);
        $barray .= $mac;
        return rtrim(strtr(base64_encode($barray), '+/', '-_'), '=');
    }
}

//$test = new BaiDuLive();
//$app_id = 后台提供appid;
//$app_secret = 后台提供秘钥;
//$uid = "456789"; //用户id
//$valid_time = 43200; //到期时间,注意不是时间戳,是秒,会根据build_timestamp相加
//$build_timestamp = time() * 1000; //13位当前时间戳
//$parameter = array();
//$privileges = array();
//$res = $test->gen($app_id, $app_secret, $uid, $parameter, $privileges, $build_timestamp, $valid_time);
//var_dump($res);

可以看到大量采用pack来转换数据,诶不想吐槽了,一加密鉴权至于么? 

 新版的音视频后台配置流程

 

 它会单独提供appid和秘钥。至于想测试生成出来的token是否正确,可以去文档下载一个你会的语言示例,它里面有鉴权测试。

 有意思的是,它python是2版本的。。。真老,我又根据python3改了下,不然报错。

php的生成然后扔它示例里的鉴权测试下没问题,有意思的是我的第一版php的发现生成出来和python的示例token不一致,同时间戳下,能鉴权通过,不过解析出来的build_timestamp是负数,因为php整型溢出了擦。

总结

总之这是一个磨人的经历,我将这个经历故事和代码给大家分享出来,为其他的玩百度小程序rtc-room的少爬坑吧。我上面的代码直接用就行。诶都是泪,我爱百度。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/784682.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Keil系列教程06_工程目标选项配置(二)

1写在前面 本文接着上一篇文章《Keil系列教程05_工程目标选项配置&#xff08;一&#xff09;》讲述的工程目标选项的后五项配置&#xff1a;C/C编译、 Asm汇编、 Linker链接、 Debug调试、 Utilities公共。 2 C/C编译 这里“C/C选项”和“Asm选项”类似&#xff0c;主要是与…

数学建模-因子分析模型

导入数据的路径不能有英文 这边的框框自己放的

iOS-持久化

目的 1.快速展示&#xff0c;提升体验 已经加载过的数据&#xff0c;用户下次查看时&#xff0c;不需要再次从网络&#xff08;磁盘&#xff09;加载&#xff0c;直接展示给用户 2.节省用户流量&#xff08;节省服务器资源&#xff09; 对于较大的资源数据进行缓存&#xf…

探索容器镜像安全管理之道

邓宇星&#xff0c;Rancher 中国软件架构师&#xff0c;7 年云原生领域经验&#xff0c;参与 Rancher 1.x 到 Rancher 2.x 版本迭代变化&#xff0c;目前负责 Rancher for openEuler(RFO)项目开发。 最近 Rancher v2.7.4 发布了&#xff0c;作为一个安全更新版本&#xff0c;也…

(二)安装部署InfluxDB

以下内容来自 尚硅谷&#xff0c;写这一系列的文章&#xff0c;主要是为了方便后续自己的查看&#xff0c;不用带着个PDF找来找去的&#xff0c;太麻烦&#xff01; 第 2 章 安装部署InfluxDB 1、linux 安装方式如下 通过包管理工具安装&#xff0c;比如apt 和yum直接下载可执…

PHP注册、登陆、6套主页-带Thinkphp目录解析-【强撸项目】

强撸项目系列总目录在000集 PHP要怎么学–【思维导图知识范围】 文章目录 本系列校训本项目使用技术 上效果图主页注册&#xff0c;登陆 phpStudy 设置导数据库项目目录如图&#xff1a;代码部分&#xff1a;控制器前台的首页 其它配套页面展示直接给第二套方案的页面吧第三套…

不会编程也能做数据分析?奥威BI系统就这么任性

BI系统有强大的大数据计算分析能力&#xff0c;能在短时间内完成海量数据智能可视化分析&#xff0c;满足大数据时代企业精细化数据分析要求。早期BI系统要求使用者具备一定IT基础&#xff0c;导致业务无法自主分析&#xff0c;而随着零编程BI系统的出现&#xff0c;业务部门也…

vue中实现列表自由拖拽排序

元素的 dragable 属性设置 为 true &#xff08;文本 图片 链接 的draggable 属性默认为 true&#xff09;则元素可拖放 <template><transition-group class"list"><uldragstart"dragstart(index)"dragenter"dragenter($event, index)…

代码-【3 队列判断是否相同】

前提条件&#xff1a; int QueueEmpty(Queue Q); //判断队列空否&#xff0c;1为空&#xff0c;0为不空 int GetHead(Queue Q,ElemTypes &x); //通过x返回队头元素的值 void EnQueue(Queue &Q.ElemType x); //将新元…

网络—零拷贝

一、前言 磁盘可以说是计算机系统最慢的硬件之一&#xff0c;读写速度相差内存 10 倍以上。所以为了提高系统吞吐量&#xff0c;减少磁盘访问次数&#xff0c;有很多优化措施&#xff0c;比如直接IO、异步IO&#xff0c;但其实还有一种优化策略&#xff0c;那就是——零拷贝&am…

脉冲频率、转速计算(信捷PLC C语言FC编程应用)

转速、线速度、角速度转换和计算关系请查看下面文章链接: 转速/线速度/角速度计算FC_RXXW_Dor的博客-CSDN博客里工业控制张力控制无处不在,也衍生出很多张力控制专用控制器,磁粉制动器等,本篇博客主要讨论PLC的张力控制相关应用和算法,关于绕线机的绕线算法,大家可以参看…

Python学习笔记-Django框架基础,APP,数据模型,后台管理,路由

一、Django框架简介 Django框架是Python的常用web框架&#xff0c;遵循 MVC 设计模式的框架&#xff0c;采用了MTV的框架模式&#xff0c;即模型M&#xff0c;视图V和模版T。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的&#xff0c;即是CMS&…

趋动科技携手星辰天合,推出针对人工智能领域的两款联合解决方案

近日&#xff0c;趋动科技与 XSKY星辰天合联合宣布&#xff0c;结合双方优势能力和产品&#xff0c;携手推出高性能数据湖一站式方案及全协议存算一体化方案&#xff0c;帮助客户简化 AI 工作的 IT 基础设施部署&#xff0c;实现 AI 相关工作更加灵活和便捷。 全协议存算一体化…

银河麒麟服务器安装wireshark

安装 yum install -y wireshark 界面展示 双击打开即可 上图为抓包工作界面

kubernetes持久化存储卷

kubernetes持久化存储卷 kubernetes持久化存储卷一、存储卷介绍二、存储卷的分类三、存储卷的选择四、本地存储卷之emptyDir五、本地存储卷之 hostPath六、网络存储卷之nfs七、PV(持久存储卷)与PVC(持久存储卷声明)7.1 认识pv与pvc7.2 pv与pvc之间的关系7.3 实现nfs类型pv与pvc…

通过cmake工程生成visual studio解决方案

1、前言 visual studio是一个很强大的开发工具&#xff0c;这个工具主要是通过解决方案对我们的源码进行编译等操作。但是我们很多时候拿到的可能并不是一个直接的解决方案&#xff0c;可能是是一个cmake工程&#xff0c;那么这个时候我们就需要通过cmake工程生成解决方案&…

力扣题库刷题笔记75--颜色分类

1、题目如下&#xff1a; 2、个人Pyhon代码实现如下&#xff1a; 第一种思路是取巧&#xff0c;通过计数0、1、2的个数&#xff0c;去替换nums 备注第10行代码在本地可以跑过&#xff0c;但是力扣跑不过&#xff0c;所以就用了第10-16行代码进行替换 第二种思路是通过冒泡排序去…

智慧导诊系统源码:基于springboot+redis+mybatis plus和mysql开发

智慧导诊系统源码 智慧导诊小程序源码&#xff0c;智慧导诊APP源码 人们经常去医院以不知道挂什么科而烦恼&#xff0c;有些病人不方便问又不好意思问。在互联网医院中挂号且又不知该挂什么科&#xff0c;找什么类型的医生&#xff0c;这些不足&#xff0c;给患者带来了极大的…

chrome macos编译

下载工具包 git clone https://chromium.googlesource.com/chromium/tools/depot_tools/gitpwd export PATH"$PATH:/Users/lichengjun/Downloads/chrome_build/depot_tools" mkdir chromium cd chromium 如果想快的话直接: fetch --nohooks --no-history chromium (…

深度学习(二)

目录 一、神经网络 整体架构: 架构细节: 神经元个数的影响: 神经网络过拟合解决: 卷积网络 整体架构: 卷积层 边缘填充 特征尺寸计算 池化层 特征图变化 递归神经网络 一、神经网络 整体架构: 图中分别为输入层、隐层1、隐层2、输出层 通过输入层输入某数值&#xf…