抖音开发 发布内容至抖音H5

开发流程可以查看官网文档

H5 发布 Schema

直接上代码

/**
     * 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 + "&timestamp=" + 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 扫一扫,即可。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值