开发流程可以查看官网文档
直接上代码
/**
* H5发布Schema-生成url
*/
public String getSchemaUrl() {
try {
String nonceStr = IdUtils.simpleUUID();
Long timeStamp = System.currentTimeMillis() / 1000;
log.info("【H5发布Schema-随机字符串:】" + nonceStr + "【时间戳:】" + timeStamp);
URIBuilder uri = new URIBuilder("snssdk1128://openplatform/share");
uri.addParameter("share_type", "h5");
uri.addParameter("client_key", douYinConfig.getClientKey());
uri.addParameter("nonce_str", nonceStr);
uri.addParameter("timestamp", timeStamp.toString());
uri.addParameter("video_path", "视频的url地址");
uri.addParameter("share_to_publish", "1");
uri.addParameter("title", "测试视频标题");
String ticket = tokenService.getDouYinTicket();
String str = "nonce_str=" + nonceStr + "&ticket=" + ticket + "×tamp=" + timeStamp.toString();
log.info("【H5发布Schema-str:】" + JSON.toJSONString(str));
String signature = Md5Utils.hash(str);
log.info("【H5发布Schema-生成签名signature:】" + signature);
uri.addParameter("signature", signature);
String awemeShare = getAwemeShare();
log.info("【H5发布Schema-获取shareId:】" + awemeShare);
uri.addParameter("state", awemeShare);
// JSONArray hashTags = new JSONArray();
// hashTags.put("hashtag1");
// hashTags.put("hashtag2");
// hashTags.put("hashtag3");
// hashTags.put("天气不错JAVA");
// uri.addParameter("hashtag_list", hashTags.toString());
// JSONObject microAppInfo = new JSONObject();
// microAppInfo.put("appId", "小程序appId");
// microAppInfo.put("appTitle", "小程序title");
// microAppInfo.put("description", "小程序描述语");
// microAppInfo.put("appUrl", "pages/movie/index");
// uri.addParameter("micro_app_info", microAppInfo.toString());
String url = uri.build().toString();
log.info("【H5发布Schema-生成url:】" + url);
return url;
}catch (Exception e){
e.printStackTrace();
log.info("【H5发布Schema-生成url异常:】" + e.getMessage());
}
return "";
}
/**
* 查询视频分享结果及数据
*/
private String getAwemeShare() {
String shareId = "";
try {
String clientAccessToken = tokenService.getClientAccessToken();
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("need_callback", true);
paramMap.put("default_hashtag", "hashtag");
log.info("【查询视频分享结果及数据入参:】" + JSON.toJSONString(paramMap));
String response = HttpRequest.get(douYinConfig.getDyOauthApi()+DouYinApiConstants.SHARE_ID)
.header("Content-Type", "application/json")
.header("access-token", clientAccessToken)
.form(paramMap)
.setMaxRedirectCount(1)
.timeout(30000)
.execute().body();
log.info("【查询视频分享结果及数据结果:】" + JSON.toJSONString(response));
com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSONObject.parseObject(response);
JSONObject object = jsonObject.getJSONObject(Constants.REQUEST_DATA);
String errorCode = object.getString(Constants.REQUEST_CODE);
String description = object.getString(Constants.REQUEST_MSG);
if(errorCode.equals(Constants.SUCCESS)) {
shareId = object.getString("share_id");
log.info("【获取open_ticket接口调用成功shareId:】" + shareId);
}else {
log.info("【查询视频分享结果及数据失败原因:】" + description);
}
}catch (Exception e){
log.info("【查询视频分享结果及数据异常:】" + e.getMessage());
}
return shareId;
}
TokenService类中的方法
/**
* 获取抖音ticket
*/
public String getDouYinTicket() {
String openTicket = redisCache.getCacheObject(Constants.OPEN_TICKET);
log.info("【获取抖音ticket:】" + openTicket);
if(StringUtils.isBlank(openTicket)) {
douYinAuthService.createClientToken();
douYinAuthService.getOpenTicket();
openTicket = redisCache.getCacheObject(Constants.OPEN_TICKET);
log.info("【获取抖音ticket-失效重新获取:】" + openTicket);
}
return openTicket;
}
/**
* 获取抖音clientAccessToken
*/
public String getClientAccessToken() {
String clientAccessToken = redisCache.getCacheObject(Constants.CLIENT_ACCESS_TOKEN);
log.info("【获取抖音clientAccessToken:】" + clientAccessToken);
if(StringUtils.isBlank(clientAccessToken)) {
douYinAuthService.createClientToken();
douYinAuthService.getOpenTicket();
clientAccessToken = redisCache.getCacheObject(Constants.CLIENT_ACCESS_TOKEN);
log.info("【获取抖音clientAccessToken-失效重新获取:】" + clientAccessToken);
}
return clientAccessToken;
}
DouYinAuthService类中的方法
/**
* 生成client_token
*/
public void createClientToken(){
try {
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("client_key", douYinConfig.getClientKey());
paramMap.put("client_secret", douYinConfig.getClientSecret());
paramMap.put("grant_type", "client_credential");
log.info("【生成client_token入参:】" + JSON.toJSONString(paramMap));
String response = HttpRequest.post(douYinConfig.getDyOauthApi()+DouYinApiConstants.OAUTH_CLIENT_TOKEN)
.header("Content-Type", "multipart/form-data")
.form(paramMap)
.setMaxRedirectCount(1)
.timeout(30000)
.execute().body();
log.info("【生成client_token结果:】" + JSON.toJSONString(response));
JSONObject jsonObject = JSONObject.parseObject(response);
JSONObject object = jsonObject.getJSONObject(Constants.REQUEST_DATA);
String errorCode = object.getString(Constants.REQUEST_CODE);
String description = object.getString(Constants.REQUEST_MSG);
if(errorCode.equals(Constants.SUCCESS)) {
String accessToken = object.getString("access_token");
Long expiresIn = object.getLong("expires_in");
log.info("【生成client_token接口调用成功accessToken:】" + accessToken);
redisCache.setCacheObject(Constants.CLIENT_ACCESS_TOKEN, accessToken, expiresIn.intValue(), TimeUnit.SECONDS);
log.info("【生成client_token-redis缓存信息:】" + accessToken);
}else {
log.info("【生成client_token失败原因:】" + description);
}
}catch (Exception e){
e.printStackTrace();
log.info("【生成client_token异常:】" + e.getMessage());
}
}
/**
* 获取open_ticket
*/
public void getOpenTicket(){
try {
String clientAccessToken = redisCache.getCacheObject(Constants.CLIENT_ACCESS_TOKEN);
log.info("【获取open_ticket-clientAccessToken:】" + clientAccessToken);
String response = HttpRequest.get(douYinConfig.getDyOauthApi()+DouYinApiConstants.OPEN_GETTICKET)
.header("Content-Type", "application/json")
.header("access-token", clientAccessToken)
.setMaxRedirectCount(1)
.timeout(30000)
.execute().body();
log.info("【获取open_ticket结果:】" + JSON.toJSONString(response));
JSONObject jsonObject = JSONObject.parseObject(response);
JSONObject object = jsonObject.getJSONObject(Constants.REQUEST_DATA);
String errorCode = object.getString(Constants.REQUEST_CODE);
String description = object.getString(Constants.REQUEST_MSG);
if(errorCode.equals(Constants.SUCCESS)) {
String ticket = object.getString("ticket");
Long expiresIn = object.getLong("expires_in");
log.info("【获取open_ticket接口调用成功ticket:】" + ticket);
redisCache.setCacheObject(Constants.OPEN_TICKET, ticket, expiresIn.intValue(), TimeUnit.SECONDS);
log.info("【获取open_ticket-redis缓存信息:】" + ticket);
}else {
log.info("【获取open_ticket失败原因:】" + description);
}
}catch (Exception e){
e.printStackTrace();
log.info("【获取open_ticket异常:】" + e.getMessage());
}
}
生成二维码
生成的url可以通过 草料二维码 去生成一个二维码,然后用打开抖音app 扫一扫,即可。