抖音弹幕数据上报

4 篇文章 0 订阅
2 篇文章 0 订阅

官方文档

签名文档
弹幕上报

构造待签名串

//body体json防止转义格式(json_encode($param,JSON_UNESCAPED_UNICODE)) 此处需要注意每个参数类型严格按照官方示例来,否者返回40001错误
$param='{"app_id":"ttdce2aa5f43de489910","round_id":"1234564332","anchor_open_id":"_000tyrmt1SD9i0cCrnxgl9Pke60ZEaaRgkk","room_id":"1111122222","start_time":10,"end_time":10,"end_status":2,"rank_lists":[{"rank_result":2,"rank_result_comment":"成功排行榜","rank_users":[{"open_id":"_0002XQ1T9j5_SUTeBy1zlSXkX7zPr1tz5ct","rank":10,"scores":110}]}]}';
$time = time();//时间戳秒级
$char = generateRandomString();//随机字符串
//构造待签名串
$str = "POST\n"
."/api/live_data/game/info\n"
.$time."\n"
.$char."\n"
.$param."\n";   

//随机字符串
function generateRandomString($length = 32) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $string = '';
    for ($i = 0; $i < $length; $i++) {
        $string .= $characters[rand(0, strlen($characters) - 1)];
    }
    return substr(sha1($string), 0, $length);
}

私钥加密

//私钥,注意一定要使用拼接并加'\n',否则验证私钥返回错误
$private_key = "-----BEGIN PRIVATE KEY-----\n".
            "MIIEvAIBADANBgkqhkiFAASCBKYwggSiAgEAAoIBAQCQgboHcw1nWG7F
            M9LItLSmNbkCJhYNEb87B/b4/FRV9W2FYge6Eevc80ktbDUuHnw6PuXNi
            FZG/GvaxZcJa1lcv2GvZKQGrlbVdEwfDNc0wEuR4CevYNzmc
            V5uBXmbB1uyi7jNV6V81UY71Mg8XQpnlx3JaxZ8hhH4ybvjIALuFpXG9kHS8+Ziy
            PAF3GN4o9e8H/RiMTtGjSnCbAwWv9NEu3q9D+Kccgaug63pupiKibvXi/taHP/RL
            E/QLLnJ0lYmsSzZOrUleaYFM6vsUXRnPpFwhCuY+zT05SpB2Zv5c2EYRsmWGQ/ry
            bHQkyxFHAgMBAAECggEAO2tcVxvT8x7FzYjVr3m+nmmQvXVzs8QMTpZB/fCdix8P
            T1kYEQe2K3Kh5Q+7AeNm4PXCjO22Sxryeu5rk60+qwsws36al/0k7HLiPqgwQcx1
            S/llv1HBQhC5FqBwnLBOwunB0CokNC/hHIxZgQSUNDhv7T8NFNJ1N7NlmSUQV3uJ
            GV/aH9/WpG/cfTbn0LGRVvmWzpKMcFZvHW9iN6EqAFj5RYJNbEx2XTajN95PHAlx
            yyfievZqRoNDvbYvuVECliPzAsFRXIXg9cBCk+v+4pl6FG8U4pBxpSDIIykYzWfT
            DmlAJPRNh9xgns45EsC/4wy+bacEQhakHuoQLlCmoQKBgQDFfZBLhmmCacstlQe3
            TJmbEF5L3twSZ6a+ftMlYD4LN53fAVXnlJT2dZrOc7GFuuhPpeeGYECH6MXZ1jKM
            1XMbQbXLyNtMXGjJro6c6Erb4kJgMdrYxlr5JtQWWAJ0Yc3vcX9iY+6NKjIEbH2G
            8DtfvMhn57V6z52Is1F43+blJQKBgQC7UaxFCpqYyDrOnBRBhhr+ySbyHRYW1vMG
            F031rAuPtT04SA25GAHgjvRLMBTmpYLujHvC1bofw2THtn0Q3cffS/1cpzn1RPP+
            YkttNkg4nPYOyOVj3NtfyCWwOsbltaGXNsZB6oPyq9zXffa5L0l/9jzrtPmXwDyF
            ksI5ZODu+wKBgGvz5xxhrOsMyXNxM3aO+Kg6mlD+0W1+GzemO+UCZufazwFHyZ19
            KrBOOQEBXNitArAHEDf0BVJFe2FIJPm28+TCVo2+jaGAIgec03gRwlnPpFjQ57/3
            LWNkRiqwkSbtD5UDhY5S8eNYXV7trvBEATCkESg7EIjBVGuVGcPpIF3BAoGAY/6o
            cL7FYnPY+LxXD9dwB70Hvk2Koiyi1QiRxGjQTynYAXhtYvaO4fpOLOkA71NBfuid
            lJeVYSlkXjxrrRpHfUtKeDCI/waNHaoJS8ajbR1VOPVDhzi6HvpwLBBkZvG7zkYe
            NcfkIiJepOaIU7kLinS/drBIYRrs8/0xE4RnkwsCgYBEAOJEQZQgm1jKznxh0m2a
            qO1dUCdVhJh99Pk1aHW9vB0YUZaI0DweWfprPna4hnRPIaI68msM34ps9aWXbilO
            LjBkS3+oiWqok8yFVc379Y4T7s2cXYnMNcM6cjEnDT4hKomdGLJVGfwxzvvKEVaI
            uREtOgkm2ZVRHNJAvB+nTA==\n".
            "-----END PRIVATE KEY-----";
$pi_key = openssl_pkey_get_private($private_key);//这个函数可用来判断私钥是否是可用的,可用返回资源id Resource id
$encrypted = ""; 
openssl_sign($str,$encrypted,$pi_key, OPENSSL_ALGO_SHA256);//私钥加密
$encrypted = base64_encode($encrypted);//加密后的内容通常含有特殊字符,需要编码转换下,在网络间通过url传输时要注意base64编码是否是url安全的

请求接口

$url = env("APP.dyapi_url")."/api/live_data/game/info";//抖音api地址
$header = array(//生成的请求头
        'Byte-Authorization: SHA256-RSA2048 appid="ttdce2aa5f43de489910",nonce_str="'.$char.'",timestamp="'.$time.'",key_version="1",signature="'.$encrypted.'"',
        'Content-Type:application/json'
);
$res = curl_request($url,$param,'post',$header,true,"errcode","errmsg");

/**
 * @Description: curl请求
 * @Author:
 * @param $url
 * @param null $data
 * @param string $method
 * @param array $header
 * @param bool $https
 * @param int $timeout
 * @return mixed
 */
function curl_request($url, $datas = null, $method = 'post', $header = array("content-type: application/json"), $https = true, $code="err_no",$errmsg="err_msg",$timeout = 50)
{
    $method = strtoupper($method);
    // file_put_contents("result.txt",date('Y-m-d H:i:s')."  :".$datas.PHP_EOL, FILE_APPEND);
    try {
        $ch = curl_init(); //初始化
        curl_setopt($ch, CURLOPT_URL, $url); //访问的URL
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //只获取页面内容,但不输出
        if(substr($url,0,5)=="https"){
            $https = true;
        }else{
            $https = false;
        }
        
        if ($https) {
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //https请求 不验证证书
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); //https请求 不验证HOST
        }
        
        if ($method != "GET") {
            if ($method == 'POST') {
                curl_setopt($ch, CURLOPT_POST, true); //请求方式为post请求
            }
            if ($method == 'PUT' || strtoupper($method) == 'DELETE') {
                curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method); //设置请求方式
            }
            curl_setopt($ch, CURLOPT_POSTFIELDS, $datas); //请求数据
        }
        curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
        curl_setopt($ch, CURLOPT_HEADER, false); //设置不需要头信息
        curl_setopt($ch, CURLOPT_HTTPHEADER, $header); //模拟的header头
        
        $result = curl_exec($ch); //执行请求
        // file_put_contents("result.txt",date('Y-m-d H:i:s')."  :".$result.PHP_EOL, FILE_APPEND);
        if (false == $result){
            throw new Exception(curl_error($ch), curl_errno($ch));
        }
        curl_close($ch); //关闭curl,释放资源
        return json_decode($result, true);
    } catch(Exception $e) {
        $Res = [$code => config('errorCode.errcode.Curl_failed') ,$errmsg => $e->getMessage(), 'data' => ''];
        return $Res;
    }
   
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值