JAVA 对接腾讯云直播的实现
签名授权
publicstaticTTecentDoPostJsonV3(Stringurl,Stringkey,StringsecretId,TecentPublicParamsheader,Stringjson,OkHttpClienthttpClient,Classclazz)throwsException{
//*************步骤1:拼接规范请求串*************
Stringdate=DateUtils.format(newDate(Long.valueOf(header.getX_TC_Timestamp()+"000")),DateUtils.FORMAT_SHORT);
Stringservice=url.substring(0,url.indexOf("."));//截取服务类型云直播是live
System.out.println(json);
StringcanonicalRequest="POST\n"+
"/\n"+
"\n"+
"content-type:application/json;charset=utf-8\n"+
"host:"+url+"\n"+
"\n"+
"content-type;host\n"+
sha256Hex(json);
System.out.println(canonicalRequest);
//*************步骤2:拼接待签名字符串*************
StringcredentialScope=date+"/"+service+"/"+"tc3_request";
StringhashedCanonicalRequest=sha256Hex(canonicalRequest);
Stringalgorithm="TC3-HMAC-SHA256";
StringstringToSign=algorithm+"\n"+header.getX_TC_Timestamp()+"\n"+credentialScope+"\n"+hashedCanonicalRequest;
System.out.println(stringToSign);
//*************步骤3:计算签名*************
byte[]secretDate=hmac256(("TC3"+key).getBytes(CHARSET),date);
byte[]secretService=hmac256(secretDate,service);
byte[]secretSigning=hmac256(secretService,"tc3_request");
Stringsignature=DatatypeConverter.printHexBinary(hmac256(secretSigning,stringToSign)).toLowerCase();
System.out.println(signature);
//*************步骤4:拼接Authorization*************
Stringauthorization=algorithm+""+"Credential="+secretId+"/"+credentialScope+","
+"SignedHeaders="+"content-type;host"+","+"Signature="+signature;
System.out.println(authorization);
header.setAuthorization(authorization);
JSONObjectjsonObject=(JSONObject)JSON.toJSON(header);
RequestBodyrequestBody=RequestBody.create(CONTENT_TYPE,json);
Request.Builderbuilder=newRequest.Builder();
for(Map.Entryentry:jsonObject.entrySet()){
if(entry.getValue()==null){
continue;
}
builder.addHeader(String.valueOf(entry.getKey()).replaceAll("_","-"),String.valueOf(entry.getValue()));
}
//用okhttp3拼接发送请求
try{
Responseresponse=httpClient.newCall((builder).url("https://"+url).post(requestBody).build()).execute();
Stringrequest=response.body().string();
Tt=JSON.parseObject(request,clazz);
returnt;
}catch(IOExceptionvar8){
thrownewApiProcessException(ErrorCode.HTTP_REQUEST_ERROR,var8.getMessage());
}
}
publicstaticbyte[]hmac256(byte[]key,Stringmsg)throwsException{
Macmac=Mac.getInstance("HmacSHA256");
SecretKeySpecsecretKeySpec=newSecretKeySpec(key,mac.getAlgorithm());
mac.init(secretKeySpec);
returnmac.doFinal(msg.getBytes(CHARSET));
}
公共参数实体类
publicclassTecentPublicParams{
privateStringX_TC_Action;
privateStringX_TC_Region;
privateStringX_TC_Timestamp=Long.toString(System.currentTimeMillis()/1000);
privateStringX_TC_Version;
privateStringAuthorization;
privateStringX_TC_Language="zh-CN";
privateStringX_TC_Token;
publicStringgetX_TC_Action(){
returnX_TC_Action;
}
publicvoidsetX_TC_Action(Stringx_TC_Action){
X_TC_Action=x_TC_Action;
}
publicStringgetX_TC_Region(){
returnX_TC_Region;
}
publicvoidsetX_TC_Region(Stringx_TC_Region){
X_TC_Region=x_TC_Region;
}
publicStringgetX_TC_Timestamp(){
returnX_TC_Timestamp;
}
publicvoidsetX_TC_Timestamp(Stringx_TC_Timestamp){
X_TC_Timestamp=x_TC_Timestamp;
}
publicStringgetX_TC_Version(){
returnX_TC_Version;
}
publicvoidsetX_TC_Version(Stringx_TC_Version){
X_TC_Version=x_TC_Version;
}
publicStringgetAuthorization(){
returnAuthorization;
}
publicvoidsetAuthorization(Stringauthorization){
Authorization=authorization;
}
publicStringgetX_TC_Language(){
returnX_TC_Language;
}
publicvoidsetX_TC_Language(Stringx_TC_Language){
X_TC_Language=x_TC_Language;
}
publicStringgetX_TC_Token(){
returnX_TC_Token;
}
publicvoidsetX_TC_Token(Stringx_TC_Token){
X_TC_Token=x_TC_Token;
}
}
调用方法
StringtencentLiveApi="live.tencentcloudapi.com";
StringSECRET_KEY="***";//此处填写自己腾讯云key
StringSECRET_ID="***";//此处填写自己腾讯云密匙
TecentPublicParamstecentPublicParams=newTecentPublicParams();
tecentPublicParams.setX_TC_Action("DescribeLiveStreamPublishedList");//对应方法名
tecentPublicParams.setX_TC_Version("2018-08-01");
TreeMapkeyValues=newTreeMap();//参数
keyValues.put("DomainName","***");
keyValues.put("EndTime",DateUtils.format(newDate(),"yyyy-MM-dd'T'HH:mm:ss'Z'"));
keyValues.put("StartTime",DateUtils.format(DateUtils.addDay(newDate(),-30),"yyyy-MM-dd'T'HH:mm:ss'Z'"));
Stringback="";
try{
back=LiveUtils.TecentDoPostJsonV3(tencentLiveApi,SECRET_KEY,SECRET_ID,tecentPublicParams,JSON.toJSONString(keyValues),httpClient,String.class);
}catch(Exceptione){
e.printStackTrace();
}
到此这篇关于JAVA对接腾讯云直播的实现的文章就介绍到这了,更多相关JAVA腾讯云直播内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!