抖店token的生成和刷新的实际开发笔记

目录

前言

一、获取token准备事宜

第1点,app_key的获取

第2点,获取method

 第3点,获取grant_type

二、token的生成使用步骤

1.token的生成的代码逻辑

三、刷新token的准备事宜

1.refresh_token的获取

2.grant_type的获取

 四、token的刷新使用步骤

1.token的刷新的代码逻辑

总结


前言

本文主要是总结一下抖店token的生成和刷新的过程记录。

一、获取token准备事宜

首先,我们对接抖店开放平台的所有接口,都需要token,那么这个token的获取就显得很重要了,我们应该怎么获取token呢,如何保证token一直都是有效的,不会过期,影响我们的接口调用呢,这是我们值得思考的地方,

首先,在获取token前,我们需要先准备token的相关准备东西。

第1点,app_key的获取

我们首先,填完相关信息资料后,然后创建应用,这样才可以拥有app_key

 然后,我们先点进你注册的店铺的应用详情,就来到了图中的这个页面,然后,在点入应用概览,我们就会看到应用信息和证书信息,我们点入证书信息,就可以看到APP_Key了,这个就是你当前店铺的app_key了;

第2点,获取method

这个的获取就很简单了,直接看这个接口的文档即可,如图所示

 第3点,获取grant_type

同样,这个也需要看文档,如图所示

 以上这些参数都是必备的,有2种获取token的方式,第1种是自己组装请求url的,另1种是采用官方提供的sdk的方式,这种比较简单,推荐使用这种。

二、token的生成使用步骤

1.token的生成的代码逻辑

首先,我们先写控制器层,提供对外访问的入口

    /**
     * 
     * 新的生成token的方法
     * @param
     * @return
     * @throws 
     */

    @ApiOperation(tags = "TikTok", value = "createToken", httpMethod = "POST",
            notes = "抖店_获取accessToken")
    @PostMapping("/createToken")
    public DataResult<AccessToken> createToken() throws Exception {
        return DataResults.ok(tiktokBaseBiz.createToken());
    }

第2步,我们在业务层做处理,思路是这样的,我们先通过sdk方法中的,这个build方法来获取到新的accessToken,然后呢,我们把这个新的token ,存到我们的redis中,这样的好处是,我们在对接它的其他接口时,要使用到这个token时,我们直接从redis中取即可。

    /**
     * 抖店_获取accessToken
     * 该方法会调取抖店接口,使旧token失效并覆盖缓存
     * @return
     * @throws 
     */
    public AccessToken createToken() throws Exception {
       
        Long shopId = Long.valueOf(projectConfig.getTiktokECommerceDefaultStoreId());    // 抖店店铺id
        GlobalConfig.initAppKey(projectConfig.getTiktokECommerceAppId());  // 配置 
        GlobalConfig.initAppSecret(projectConfig.getTiktokECommerceAppSecret());  
        AccessToken accessToken = AccessTokenBuilder.build(shopId);  // set店铺ID 
        logger.info("抖店生成的token======"+ JSON.toJSONString(accessToken));
        try {
            redisCacheService.putTikTokAccessToken(projectConfig.getTikTokProductDefaultStoreCode(), accessToken.getAccessToken(), accessToken.getExpireIn(), accessToken.getRefreshToken(), accessToken.getScope(), Long.valueOf(accessToken.getShopId()), accessToken.getShopName(), accessToken.getLogId());
        }catch (Exception e){
            logger.info("更新的token到存储redis异常"+e);
            logger.error("更新的token到存储redis异常"+e);
        }
        return accessToken;
    }

三、刷新token的准备事宜

前面我们讲了token的生成了,那么接下来,我们如何保证和续约token就很关键了,当然是通过刷新token的方式来实现啦,怎么实现呢,看文档

由官方提供的文档中,我们可以知道,使用refresh_token刷新access_token,所以这个接口方法是/token/refresh;我们知道这个外,还需要知道它的使用的各个场景,

它的使用场景如下所示:

使用场景: 1、在 access_token过期时,使用 refresh_token可以获取新的acces_token 和 refresh_token;可以保证一直是有效的access_token。

2、access_token有效期7天,refresh_token用于刷新access_token的刷新令牌,有效期:14 天; 注意点: 1.、在 access_token 过期前1h之前,ISV使用 refresh_token 刷新时,会返回原来的 access_token 和 refresh_token,但是二者有效期不会变; 2、在 access_token 过期前1h之内,ISV使用 refresh_token 刷新时,会返回新的 access_token 和 refresh_token,但是原来的 access_token 和 refresh_token 继续有效一个小时;

3、在 access_token 过期后,ISV使用 refresh_token 刷新时,将获得新的 acces_token 和 refresh_token,同时原来的 acces_token 和 refresh_token 失效;

1.refresh_token的获取

 这个的获取,它是要在前面的token的生成中产生的,也就是前面的token的生成时,已经产生这个参数了,我们只需使用前面产生的即可了。

2.grant_type的获取

这个参数的获取,主要是看文档的提供,如下所示,


 四、token的刷新使用步骤

1.token的刷新的代码逻辑

这里,我们就要对前面生成的token,进行刷新使用了,这样做的好处就是,保证了token一直是有效的,接口调用使用token,一直都是稳定的。

首先,我们先写控制层,提供对外访问的接口

    /**
     * 抖店:
     *      刷新token
     * @return
     * @throws 
     */
    @ApiOperation(tags = "JOB", value = "tiktokRefreshToken", httpMethod = "POST",
            notes = "抖店_刷新token")
    @PostMapping("/tiktokRefreshToken")
    @AllowAnonymous
    public DataResult<AccessToken> tiktokRefreshToken() throws Exception {
        return DataResults.ok(tiktokBaseBiz.refreshToken());
    }

然后,我们在在业务层做处理,这里思路是怎么样的,首先是,先从缓存中获取出来refreshToken,因为这个不知道是不是有效的,存在redis中,所以呢,我们要先判断一下,如果它已经不存在了,我们直接重新生成新的token即可了。

如果它是有效的话,那么我们只需要刷新即可了,怎么刷新呢,

我们采用sdk的方式,就像图中的那样即可了。

然后,把刷新的东西,都存到redis中去。

   /**
     * 抖店_刷新accessToken
     * @return
     * @throws 
     */
    public AccessToken refreshToken() throws Exception {
        AccessToken accessToken = null;
        //从缓存里获取refreshToken,缓存存的一直有效token
        TiktokAccessTokenRedisBean redisTokenBean = redisCacheService.getTiktokToken(projectConfig.getTikTokDefaultStoreCode());
        if(redisTokenBean==null){
            //缓存不存在的情况直接createToken
             accessToken = this.createToken();  // 直接调用这个生成token的方法生成
        }else{
                logger.info("抖店的token有效时长===="+redisTokenBean.getExpiresIn());
                logger.info("进来到这,说明这个token在redis中已经存在了,只需要重新刷新即可!!!");
                String refreshToken = redisTokenBean.getRefreshToken();
               
                // TODO 采用sdk
                GlobalConfig.initAppKey(projectConfig.getTiktokECommerceAppId());
                GlobalConfig.initAppSecret(projectConfig.getTiktokECommerceAppSecret());
                accessToken = AccessTokenBuilder.refresh(refreshToken);     //刷新token
                logger.info("抖店刷新的token======"+ JSON.toJSONString(accessToken));
                try {
                    redisCacheService.putTikTokAccessToken(projectConfig.getTikTokDefaultStoreCode(), accessToken.getAccessToken(), accessToken.getExpireIn(), accessToken.getRefreshToken(), accessToken.getScope(), Long.valueOf(accessToken.getShopId()), accessToken.getShopName(), accessToken.getLogId());
                } catch (Exception e) {
                    logger.info("更新的token到存储redis异常" + e);
                    logger.error("更新的token到存储redis异常" + e);
                }
        }
        return accessToken;
    }

总结

本文主要是总结一下抖店token的生成和刷新的过程记录。

猜你喜欢

转载自blog.csdn.net/weixin_46442877/article/details/127924734