目录
本文主要是总结一下抖店token的生成和刷新的过程记录。
首先,我们对接抖店开放平台的所有接口,都需要token,那么这个token的获取就显得很重要了,我们应该怎么获取token呢,如何保证token一直都是有效的,不会过期,影响我们的接口调用呢,这是我们值得思考的地方,
首先,在获取token前,我们需要先准备token的相关准备东西。
我们首先,填完相关信息资料后,然后创建应用,这样才可以拥有app_key
然后,我们先点进你注册的店铺的应用详情,就来到了图中的这个页面,然后,在点入应用概览,我们就会看到应用信息和证书信息,我们点入证书信息,就可以看到APP_Key了,这个就是你当前店铺的app_key了;
这个的获取就很简单了,直接看这个接口的文档即可,如图所示
同样,这个也需要看文档,如图所示
以上这些参数都是必备的,有2种获取token的方式,第1种是自己组装请求url的,另1种是采用官方提供的sdk的方式,这种比较简单,推荐使用这种。
首先,我们先写控制器层,提供对外访问的入口
- /**
- *
- * 新的生成token的方法
- * @param
- * @return
- * @throws
- */
-
- @ApiOperation(tags = "TikTok", value = "createToken", httpMethod = "POST",
- notes = "抖店_获取accessToken")
- @PostMapping("/createToken")
- public DataResult
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的方式来实现啦,怎么实现呢,看文档
由官方提供的文档中,我们可以知道,使用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 失效;
这个的获取,它是要在前面的token的生成中产生的,也就是前面的token的生成时,已经产生这个参数了,我们只需使用前面产生的即可了。
这个参数的获取,主要是看文档的提供,如下所示,
这里,我们就要对前面生成的token,进行刷新使用了,这样做的好处就是,保证了token一直是有效的,接口调用使用token,一直都是稳定的。
首先,我们先写控制层,提供对外访问的接口
- /**
- * 抖店:
- * 刷新token
- * @return
- * @throws
- */
- @ApiOperation(tags = "JOB", value = "tiktokRefreshToken", httpMethod = "POST",
- notes = "抖店_刷新token")
- @PostMapping("/tiktokRefreshToken")
- @AllowAnonymous
- public DataResult
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的生成和刷新的过程记录。