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腾讯云直播内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!