保利威文档中心

幫助中心

獨立授權

更新時間:2026-05-13 16:43:22

功能路徑

【我的直播】 --> 【頻道設定】-->【觀看條件設定】-->【獨立授權】

功能介紹

開啟直播觀看頁時 URL 需帶上指定的參數,經過直播系統驗證請求合法後,直接進入直播觀看頁,同時將使用者所傳參數作為觀看頁的觀眾資訊進行設定,要求介面回傳的觀眾帳號具有唯一性,即同一個帳號不能在兩個地方同時登入,較早登入的帳號會被踢出。

1、Secretkey:用於校驗簽章的產生。

獨立授權流程詳解

1、將頻道設定為獨立授權後,透過後台或 API 介面取得使用者獨立授權觀看條件的 secretkey。

2、在請求保利威直播觀看頁時需帶上相關參數,如:https://live.polyv.cn/watch/1965681?userid=1b448be323&ts=1498547407000&sign=dd9dc9e42ad7c0204398e925a4ee0f46&nickname=viewerTests&avatar=http://livestatic.videocc.net/assets/wimages/missing_face.png

3、直播系統會對使用者提交的 sign 參數的值做比較判斷是否合法,一次成功請求後,該連結將失效(sign 只能成功使用一次),如果合法,直播系統將使用 nickname、userid、avatar,進入到保利威視直播觀看頁聊天區將顯示學員的暱稱和頭像。如果驗證失敗,則顯示錯誤頁面。

線上 API 呼叫

請求參數描述

參數名 必選 類型 說明
userid true String 觀眾 id,重複 id 時先登入的觀眾會被踢出直播間【僅支援英文大小寫、數字和底線,長度最大 64 位字元,超出 64 位的部分將被截取不做記錄】。注意 userid 中的 i 為小寫
ts true Long 當前 13 位毫秒級時間戳記,3 分鐘內有效
sign true String 用於校驗的簽章,產生規則是 secretkey + userid + secretkey + ts 進行 MD5 加密
nickname true String 觀眾暱稱,需要進行 url 安全的 base64 編碼
avatar false String 觀眾頭像的 url 地址
vid false String 回放影片 id,如需回放某個回放影片,則需要傳該參數,如:e07738ddd6
該值可使用介面【查詢影片庫列表】回傳的 videoId
param4 false String 統計觀眾觀看日誌的自訂參數,需要先進行 base64 加密後再進行 urlencode
param5 false String 統計觀眾觀看日誌的自訂參數,需要先進行 base64 加密後再進行 urlencode
failRedirectUrl false String 獨立授權驗證失敗則轉跳到該 url,不填則跳轉預設失敗頁
secretData false String 存放目標參數(SM2)加密後的字串
actor false String 觀眾個人化頭銜

參數加密

支援 SM2 的加密方式,加密的參數列表: userid、nickname、param4、param5

SM2 加密說明

參數名 支援加密 類型 說明
userid Y String 觀眾用戶 ID,加密可選
nickname Y String 觀眾暱稱,加密可選
param4 Y String 參數 4,加密可選
param5 Y String 參數 5,加密可選
secretData N String 存放目標參數加密後的字串

加密樣式

secretData 存放加密後的值,加密之前的值: userid={userid}&nickname={nickname}

watch_url?userid=xx&nickname=xx&ts={ts}&sign=md5(secretkey + userid + secretkey + ts)&secretData=SM2(userid={userid}&nickname={nickname}&param4={param4}&param5={param5})

參數組裝

簽章: 參與加密的參數真實值用於簽章,簽章方式保持不變。

需要注意的時候,加密後參數長度變大,考慮到瀏覽器 GET 請求參數總長度的限制,需要控制參數值的長度,參數總長度 1k 個字元為大部分瀏覽器支援。

解密

解密後的參數,將取代外層對應的參數值,若解密後沒有對應的參數或值為空不填充,則保持原值。外層參數可以用一些隨機值來佔位,例如 userid=test&nickname=test&param4=test&param5=test

例如

場景1: SM2(userid={userid}&nickname={nickname}) 解密後將替換外層的明文參數 userid、nickname

場景2: SM2(userid={userid}&nickname={nickname}&param4={param4}) 解密後將替換外層的明文參數 userid、nickname、param4

場景3: SM2(userid={userid}&nickname={nickname}&param5={param5}) 解密後將替換外層的明文參數 userid、nickname、param5

場景4: SM2(userid={userid}&nickname={nickname}&param4={param4}&param5={param5}) 解密後將替換外層的明文參數 userid、nickname、param4、param5

程式碼範例(Java)

    //TODO 设置为独立授权的SecretKey
    private static final String DIRECT_SECRET_KEY = "******";
    
    public static void main(String[] args) throws UnsupportedEncodingException, NoSuchAlgorithmException {
        // TODO 设置直播观看页地址
        //      如果使用定制域名,可在“查询频道信息”接口中获取到频道的观看地址 watchUrl
        //      https://help.polyv.net/index.html#/live/api/v4/channel/operate/get_channel_detail
        String url = "https://live.polyv.cn/watch/";
        
        //TODO 设置为独立授权的频道号
        String channelId = "2292421";
        
        //TODO 设置观众id,同一个观众id,后面进入的会把前面的观众挤出频道
        String userId = "sadboy";
        
        String ts = String.valueOf(System.currentTimeMillis());
        
        //url安全的base64编码
        String nickname = "保利威";
        nickname = new String(org.apache.commons.codec.binary.Base64.encodeBase64URLSafe(nickname.getBytes(StandardCharsets.UTF_8)), StandardCharsets.UTF_8);
        
        String avatar = "http://live.polyv.net/assets/images/avatars/9avatar.jpg";
        String sign = DIRECT_SECRET_KEY+userId+DIRECT_SECRET_KEY+ts;
        sign = LiveSignUtil.md5Hex(sign);
        url += channelId+"?userid="+userId+"&ts="+ts+"&sign="+sign+"&nickname="+nickname+"&avatar="+avatar;
        //浏览器直接访问url即可进入直播间
        System.out.println(url);
    }

程式碼範例(PHP)

<?php
$secretkey = "qwertyui"; //后台secretKey
$userid = "test" . rand(0, 5); //直播的用户ID
$ts = time() * 1000; //当前时间
$sign = md5($secretkey . $userid . $secretkey . $ts); //用于校验的sign
$nickname = urlencode(base64_encode("保利威")); //学员的昵称
$avatar = "http://live.polyv.net/assets/images/avatars/9avatar.jpg"; //学员的头像
$url = "https://live.polyv.cn/watch/108008";
$callbackUrl = $url . "?userid=" . $userid . "&nickname=" . $nickname . "&avatar=" . $avatar . "&ts=" . $ts . "&sign=" . $sign;
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>login</title>
</head>
<body>
<div id="btn">
<input type="button" onclick="openurl()" value="独立授权观看" class="btn" >
</div>
<script>
function openurl(){
location.href="<?php
echo $callbackUrl ?>";
};
</script>
</form>
</body>
</html>

展示效果

http://demo.ipolyv.cn/wfy/directAuth.php

注意事項

1、要保證提交的 userid 的唯一性,當多個觀眾使用同一個 userid 進入觀看頁時,較早登入的觀眾會被後面登入的觀眾踢出,觀看頁會提示 "帳號在另外的地方登入,您將被退出觀看。如下圖:

联系客服,在线咨询