官方文档
签名文档
弹幕上报
构造待签名串
$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);
}
私钥加密
$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);
$encrypted = "";
openssl_sign($str,$encrypted,$pi_key, OPENSSL_ALGO_SHA256);
$encrypted = base64_encode($encrypted);
请求接口
$url = env("APP.dyapi_url")."/api/live_data/game/info";
$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");
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);
try {
$ch = curl_init();
curl_setopt($ch, CURLOPT_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);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
}
if ($method != "GET") {
if ($method == 'POST') {
curl_setopt($ch, CURLOPT_POST, true);
}
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);
$result = curl_exec($ch);
if (false == $result){
throw new Exception(curl_error($ch), curl_errno($ch));
}
curl_close($ch);
return json_decode($result, true);
} catch(Exception $e) {
$Res = [$code => config('errorCode.errcode.Curl_failed') ,$errmsg => $e->getMessage(), 'data' => ''];
return $Res;
}
}