最近疫情严重,公司准备出一个在线视频会议功能,需要调用腾讯会议的API,经过查看腾讯的api文档和与腾讯技术人员交流,终于能成功调用Api接口了!

腾讯会议官方API:https://cloud.tencent.com/document/product/1095/42407

首先第一步需要申请腾讯 API 接入

申请好了以后,会邮件发给你APPID,SecretId,SecretKey三个参数。

我们以创建会议为例,步骤如下:

一、生成body参数

        //body参数String req_body="{\n" +"\t\"userid\": \"tester\",\n" +"\t\"instanceid\": 1,\n" +"\t\"subject\": \"tester's meeting\",\n" +"\t\"type\": 0,\n" +"\t\"hosts\": [{\n" +"\t\t\"userid\": \"tester\"\n" +"\t}],\n" +"\t\"start_time\": \""+createTime+"\",\n" +"\t\"end_time\": \""+createtomorrow+" \",\n" +"\t\"settings \": {\n" +"\t\t\"mute_enable_join \": true,\n" +"\t\t\"allow_unmute_self \": false,\n" +"\t\t\"mute_all \": false,\n" +"\t\t\"host_video \": true,\n" +"\t\t\"participant_video \": false,\n" +"\t\t\"enable_record \": false,\n" +"\t\t\"play_ivr_on_leave\": false,\n" +"\t\t\"play_ivr_on_join\": false,\n" +"\t\t\"live_url\": false\n" +"\t}\n" +"}";

二、生成签名

String num="";//随机数
String signature = sign(SecretId, SecretKey, "POST", num, createTime, uri, req_body);

三、请求

 String code=doPost(url,Content_Type,SecretId,createTime,num,appId,signature,datas);

完整代码如下:

package com.jbox.common.utils;import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;
import java.util.Calendar;
import java.util.Date;/*** @author huangting* @version 1.0* @date 17:43 2020/4/8*/
public class TencentUtil {public static String createMeetings() throws IOException, InvalidKeyException, NoSuchAlgorithmException {String uri="/v1/meetings";String SecretId="这里请输入你们公司的SecretId";String SecretKey="这里请输入你们公司的SecretKey";String appId="这里请输入你们公司的appId";String url="https://api.meeting.qq.com/v1/meetings";int num=617877739;Date today=  new  Date();Calendar c = Calendar.getInstance();c.setTime(new  Date());//今天c.add(Calendar.DAY_OF_MONTH,1);Date tomorrow=c.getTime();//这是明天int createTime = getSecondTimestamp(today);int createtomorrow = getSecondTimestamp(tomorrow);//body参数String req_body="{\n" +"\t\"userid\": \"tester\",\n" +"\t\"instanceid\": 1,\n" +"\t\"subject\": \"tester's meeting\",\n" +"\t\"type\": 0,\n" +"\t\"hosts\": [{\n" +"\t\t\"userid\": \"tester\"\n" +"\t}],\n" +"\t\"start_time\": \""+createTime+"\",\n" +"\t\"end_time\": \""+createtomorrow+" \",\n" +"\t\"settings \": {\n" +"\t\t\"mute_enable_join \": true,\n" +"\t\t\"allow_unmute_self \": false,\n" +"\t\t\"mute_all \": false,\n" +"\t\t\"host_video \": true,\n" +"\t\t\"participant_video \": false,\n" +"\t\t\"enable_record \": false,\n" +"\t\t\"play_ivr_on_leave\": false,\n" +"\t\t\"play_ivr_on_join\": false,\n" +"\t\t\"live_url\": false\n" +"\t}\n" +"}";//生成签名String signature = sign(SecretId, SecretKey, "POST", "617877739", String.valueOf(createTime), uri, req_body);System.out.println("我是签名:"+signature);String Content_Type="application/json";String datas = req_body;String code=doPost(url,Content_Type,SecretId,createTime,num,appId,signature,datas);System.out.println(code);return code;}public static void main(String[] args) throws NoSuchAlgorithmException, InvalidKeyException, IOException {String code=createMeetings();}private static String doPost(String urlPath,String Content_Type,String SecretId,int createTime,int num,String appId,String signature,String datas) throws IOException {StringBuilder sub = new StringBuilder();// 建立连接try {URL url = new URL(urlPath);HttpURLConnection conn = (HttpURLConnection) url.openConnection();// 设置连接请求属性postconn.setDoOutput(true);conn.setDoInput(true);// 忽略缓存//conn.setUseCaches(false);conn.setRequestMethod("POST");conn.setRequestProperty("Content-Type", "application/json");conn.setRequestProperty("X-TC-Key", SecretId);conn.setRequestProperty("X-TC-Timestamp", String.valueOf(createTime));conn.setRequestProperty("X-TC-Nonce", String.valueOf(num));conn.setRequestProperty("AppId", appId);conn.setRequestProperty("X-TC-Signature", signature);System.out.println(signature);DataOutputStream out =new DataOutputStream(conn.getOutputStream());out.write(datas.getBytes());out.flush();out.close();// 定义BufferedReader输入流来读取URL的响应int code = conn.getResponseCode();System.out.print("====="+conn.getResponseMessage());if (HttpURLConnection.HTTP_OK == code) {BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));String line;while ((line = in.readLine()) != null) {sub.append(line);}in.close();}return sub.toString();} catch (IOException e) {sub = new StringBuilder();System.out.println("调用kettle服务失败:"+";urlPath="+urlPath+";data:"+urlPath+"Message:"+e.getMessage());}return sub.toString();}public static int getSecondTimestamp(Date date){if (null == date) {return 0;}String timestamp = String.valueOf(date.getTime());int length = timestamp.length();if (length > 3) {return Integer.valueOf(timestamp.substring(0,length-3));} else {return 0;}}private static String HMAC_ALGORITHM = "HmacSHA256";private static char[] HEX_CHAR = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};static String bytesToHex(byte[] bytes) {char[] buf = new char[bytes.length * 2];int index = 0;for (byte b : bytes) {buf[index++] = HEX_CHAR[b >>> 4 & 0xf];buf[index++] = HEX_CHAR[b & 0xf];}return new String(buf);}/*** 生成签名,开发版本oracle jdk 1.8.0_221** @param secretId        邮件下发的secret_id* @param secretKey       邮件下发的secret_key* @param httpMethod      http请求方法 GET/POST/PUT等* @param headerNonce     X-TC-Nonce请求头,随机数* @param headerTimestamp X-TC-Timestamp请求头,当前时间的秒级时间戳* @param requestUri      请求uri,eg:/v1/meetings* @param requestBody     请求体,没有的设为空串* @return 签名,需要设置在请求头X-TC-Signature中* @throws NoSuchAlgorithmException e* @throws InvalidKeyException      e*/static String sign(String secretId, String secretKey, String httpMethod, String headerNonce, String headerTimestamp, String requestUri, String requestBody)throws NoSuchAlgorithmException, InvalidKeyException {String tobeSig =httpMethod + "\nX-TC-Key=" + secretId + "&X-TC-Nonce=" + headerNonce + "&X-TC-Timestamp=" + headerTimestamp + "\n" + requestUri + "\n" + requestBody;Mac mac = Mac.getInstance(HMAC_ALGORITHM);SecretKeySpec secretKeySpec = new SecretKeySpec(secretKey.getBytes(StandardCharsets.UTF_8), mac.getAlgorithm());mac.init(secretKeySpec);byte[] hash = mac.doFinal(tobeSig.getBytes(StandardCharsets.UTF_8));String hexHash = bytesToHex(hash);return new String(Base64.getEncoder().encode(hexHash.getBytes(StandardCharsets.UTF_8)));}
}

Java调用腾讯会议Api示例相关推荐

  1. java调用腾讯会议api,开会录制问题

    最近公司项目要求,需要调用腾讯会议api进行开会,并且要查看录制文件,会议记录等功能.研究了好一番,总算是搞定了,期间由于网上的实例太少,并且讲的不清楚,还特地询问了腾讯客服!不得不说,大公司的客服就 ...

  2. 调用腾讯会议API创建会议

    测了好久, 主要就是生成签名参数注意一些, 下面是我测试成功的案例, 如果还不成功, 可以找腾讯客服, 他们会很耐心的解决你的问题 import java.io.BufferedReader; imp ...

  3. Java腾讯会议api接口,创建会议、查询会议,取消会议调用实例,以及踩过的坑

    最近公司需要做一个腾讯会议API的对接,经过查看官方文档和腾讯相关技术人员周旋~~以及不断踩坑,终于在我的不懈努力下,成功将API接口调通了 腾讯会议API接口文档:https://cloud.ten ...

  4. Java调用有道翻译API包括APPID/密钥地址注册

    Java调用有道翻译API 因为上次发的资源用的我的APPID 导致我的服务已经停用了-- 现在把地址也一并奉上 希望都可以自己注册. APPID/密钥 注册地址:http://ai.youdao.c ...

  5. html调用腾讯地图定位当前位置,vue web项目中调用腾讯地图API获取当前位置的经纬度...

    vue web项目中调用腾讯地图API获取当前位置的经纬度 vue web项目中调用腾讯地图API获取当前位置的经纬度 在main.js 中添加一下代码 import axios from 'axio ...

  6. 微信小程序调用腾讯地图API进行驾车路线规划

    微信小程序调用腾讯地图API进行驾车路线规划 申请key 下载sdk 实现代码 遇到的问题 申请key 微信小程序的地图api是非常有限的,所以部分功能实现需要调用地图api.使用腾讯地图api过程如 ...

  7. 调用腾讯地图API、高德地图API 获取当前地理位置、经纬度

    调用腾讯地图API.高德地图API 获取当前地理位置.经纬度 web开发中,很多情况下都会需要获取当前位置的经纬度,在网上找了几个不同的地图,最终找到兼容比较好的腾讯地图API 1.调用腾讯地图API ...

  8. java调用kettle例子_Kettle API - Java调用示例

    Kettle API - Java调用示例 对向前兼容性的推荐:如果想要动态地创造Transformation (例如:从元数据),使用XML文件方法(KTR)而不是使用API.XML文件兼容Kett ...

  9. 大聪明教你学Java | 调用腾讯云短信接口,实现短信通知

    前言 提到短信接口,相信每一位程序猿都不会陌生,它可以来帮助我们实现短信验证码.短信通知等等功能,刚好最近在帮朋友开发一套会员管理系统,里面也集成了短信功能(短信接口平台选择的是腾讯云平台),借此机会 ...

最新文章

  1. Xamarin SimplerCursorAdapter 适配器(三)
  2. 定义一个计算字符串有效长度的_一个正方形的小抽屉柜,根据设计草图计算出所需四片木板的长度...
  3. 干货 | Elasticsearch开发人员最佳实战指南
  4. linux网线连接树莓派,3、树莓派使用网线连接路由器获取网络的讲解
  5. 大规模数据生成 (500万条数据)
  6. 第二章 生成、打包、部署和管理应用程序及类型
  7. 编程基本功:知识、经历可以获得,能力不可能提升
  8. controller调用controller的方法_【笔记】Simulink C语言代码生成与使用方法
  9. php后缀加swp,注意发现交换文件 filename.swp
  10. linux 下的无线网络配置,详解在LINUX环境下怎样设置无线网络配置
  11. html隐藏不占位置,css中隐藏不占空间怎么设置?
  12. 职业规划(一)怎么写简历
  13. Mock测试-优缺点分析
  14. iOS 答题功能实现
  15. [py练习] 返回朋友名字的list
  16. 四川一度智信:还不会网店运营?
  17. 物联网技能竞赛DAY1
  18. CSS3之边框图片border-image
  19. mac下启动/停止/重启mysql服务
  20. Xilinx Vitis 2020.2 Ubuntu 设置串口连接ZCU102开发板

热门文章

  1. 中国联通:2018年7月沃指数之移动应用APP排行榜
  2. 基于MATLAB的opti Toolbox的工具包详细安装教程
  3. 包包各部位名称图解_包包的结构
  4. 【元器件学习笔记—电阻】(5)——电阻串联电路
  5. 25个国外优秀的餐饮网站设计作品欣赏
  6. 好用的数据备份与恢复软件推荐
  7. webStorm2020 下载安装
  8. 什么是“奥卡姆剃刀”,如何用“奥卡姆剃刀”解决复杂问题?复杂问题简单化
  9. win7+64位笔记本安装TensorFlow CPU版
  10. chkdsk 命令对Raid盘检测和查错、修复