目录
前言
一、获取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的相关准备东西。
我们首先,填完相关信息资料后,然后创建应用,这样才可以拥有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的生成和刷新的过程记录。