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

news2025/1/12 12:26:08

目录

前言

一、获取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的生成和刷新的过程记录。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/19640.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AIOT在数字化转型中的机遇和挑战

目录 引言 为什么 IOT 要结合 AI 数字化转型机遇 什么是企业数字化转型 AIOT 在数字化转型中的作用 面临的挑战 架构挑战 安全风险 安全挑战分析 常见安全问题 如何应对 产业赋能 问题分析 如何应对 算力建设 总结 引言 传统的安防市场已经逐渐接近业务成长天花…

一棵完全二叉树的第7层(根节点为第0层)有12个叶子节点,求整棵树最多有多少个节点和最少有多少个节点

答案 一棵完全二叉树的第7层&#xff08;根节点为第0层)有12个叶子节点&#xff0c;求整棵树最多有487487487个节点和最少有139139139个节点。 完全二叉树 定义&#xff1a;一棵深度为kkk的有nnn个节点的二叉树&#xff0c;对树中的节点按从上至下、从左到右的顺序进行编号&am…

Python 对象保存优化机制

Python 为了减少开销与内存的使用而设置一些规则: * 1. 但凡是不可变对象, 在同一个代码块中的对象, 只要是值相同的对象, 就不会重复创建, 而是直接引用已经存在的对象.交互环境下: 不写在一行, 字符类型数据指向一个内存地址, 整型超出小整数则执指向不同的地址. 代码块缩进相…

Hexo搭建Github博客教程

CONTENTS1. 环境配置2. 本地博客搭建3. 部署至Github4. 博客主题设置1. 环境配置 &#xff08;1&#xff09;安装Git Bash&#xff1a;Windows安装配置Git教程&#xff08;2022.11.18 Git2.38.1&#xff09;。 &#xff08;2&#xff09;安装NodeJS&#xff1a;NodeJS的安装及…

基于51单片机的花样流水灯设计

资料编号&#xff1a;113 下面是相关功能视频演示&#xff1a; 113-基于51单片机的花样流水灯设计&#xff08;源码仿真设计报告&#xff09;功能讲解&#xff1a; 采用51单片机的IO控制多个LED灯&#xff0c;实现多种模式的流水灯&#xff0c;全套资料齐全&#xff1a;流水灯…

Aspose.OCR for Java Crack by Xacker

Aspose.OCR for Java 允许您从图像、屏幕截图、图像的特定区域中提取文本&#xff0c;并在任何支持 Java 的平台上从扫描文件创建可搜索的 PDF。凭借其强大且易于使用的 API&#xff0c;即使是复杂的 OCR 任务也只需不到 10 行代码。您无需使用公式和机器学习 - 该库将处理所有…

<C++>深度学习继承

目录 一、继承概念 二、继承的语法 2.1继承关系和访问限定符 2.2派生类继承基类后的成员权限 三、基类和派生类的对象赋值转换 四、继承中的作用域 五、派生类的默认成员函数 六、继承与友元 七、继承与静态成员 八、复杂的菱形继承及菱形虚拟继承 单继承&am…

CS下载、安装以及简单使用

Cobalt Strike4.0中文版下载 渗透利器CobaltStrike 4.0 免费汉化版(含原版补丁) 下载-脚本之家 (jb51.net)下载解压&#xff0c;有中文版本和原版 server&#xff1a;kali&#xff08;自带Java环境&#xff09; clinet&#xff1a;win10 这里直接把原版拖进kali运行不了&#x…

买卖股票的最好时机(一、二)

目录 买卖股票的最好时机(一) 动态规划解决 贪心思想解决 买卖股票的最好时机(二) 贪心思想解决 动态规划解决 买卖股票是经典的动态规划问题&#xff0c;在动态规划的学习与练习中&#xff0c;最令我煎熬的就是状态方程递推&#xff0c;经常出现状态定义好后&#xff0c…

【毕业设计】10-基于单片机的车站安检门/磁性霍尔传感器系统设计(原理图+源码+仿真工程+论文)

【毕业设计】10-基于单片机的车站安检门/磁性霍尔传感器系统设计&#xff08;原理图源码仿真工程论文&#xff09; 文章目录【毕业设计】10-基于单片机的车站安检门/磁性霍尔传感器系统设计&#xff08;原理图源码仿真工程论文&#xff09;资料下载链接任务书设计说明书摘要设计…

css的三种引入方式

目录 三种引入方式 1.行内样式 2.内部样式(内嵌式) 3.外部样式 3.1外链式 3.2导入式 引入方式的优先级 三种引入方式 1.行内样式 行内样式就是直接把css样式添加在HTML标签中,作为style样式的属性值 <!-- 行内/内嵌/嵌入式/内联样式 --><!-- 背景颜色 backgr…

动力节点索引优化解决方案学习笔记——查询优化

3.查询优化 创建一张测试表并插入数据&#xff1a; drop table if exists students; CREATE TABLE students (id INT PRIMARY KEY AUTO_INCREMENT COMMENT "主键id",sname VARCHAR (24) COMMENT 学生姓名,age INT COMMENT 年龄,score INT COMMENT 分数,time TIMEST…

微服务与中间件系列——GateWay整合Swagger3增强Knife4j

微服务与中间件系列——GateWay整合Swagger3增强Knife4jGateWay整合Swagger3增强Knife4j&#xff08;easy模式&#xff09;目的服务端1.导入依赖2.编写配置类3.yaml配置GateWay网关1.文档枚举2.SwaggerProvider3.yaml配置结果增强版服务端1.增加配置参数类2.修改配置类3.修改ya…

Spring框架一文带你吃透IOC技术

本文目录 文章目录本文目录✨loC的技术实现✨实现步骤✨创建接口和实现类✨创建Spring的配置文件和声明bean✨创建spring容器对象✨spring容器创建对象的特点✨创建非自定义类的对象✨创建没有接口的类的对象✨获取容器中对象的信息loC&#xff0c;Inversion ofControl:控制反转…

肿瘤NGS测序行业背景介绍

肿瘤NGS测序行业背景介绍1、行业基本情况1.1 行业分类1.2 主管部门1.3 行业监管1.4 行业法规1.5 医保报销流程2、肿瘤基本介绍2.1 肿瘤基础概念2.2 癌症分期2.3 致癌风险2.4 肿瘤早期检测3、分子诊断在肿瘤早检的场景3.1 传统肿瘤早期检测方式3.2 分子诊断3.3 技术性能评价指标…

SpringBoot SpringBoot 开发实用篇 4 数据层解决方案 4.9 MongoDB 下载与安装

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇4 数据层解决方案4.9 MongoDB 下载与安装4.9.1 MongoDB 下载4.9.2 安…

PLATFORMIO学习文档之esp8266 驱动SSD1306 128x64OLED显示屏示例

写文章也是为了记录自己的学习过程&#xff0c;顺便给后来人指指路&#xff0c;迷路了可别怪我~~~~~~ 开发环境&#xff1a;PLATFORMIO 1、首先上一张我用的ESP8266开发板ESP-12E 首先新建一个工程&#xff0c;输入项目名称&#xff0c;选择自己所用的开发板&#xff0c; …

灵界的科学丨二、耳朵及手指识字的实验启示

摘自李嗣涔教授《灵界的科学》 如果有一天&#xff0c; 能教会盲人用手指或耳朵来「看」&#xff0c; 用触觉来取代眼睛&#xff0c; 人类社会中&#xff0c;将不再存在「盲」这种残疾。 发现人体潜能――耳朵与手指识字 眼睛可以观赏五彩缤纷的世界&#xff0c;耳朵可以听…

Joe 主题 Halo 移植版搭建部署教程

搭建成功之后的效果图如下 Halo安装部署 Docker 安装 Halo docker pull halohub/halo:1.5.4 # docker 从远程仓库下载镜像 docker run -it -d --name fl1906 -p 666:8090 -v ~/fl1906:/root/.halo halohub/halo:1.5.4 --restartalwaysdocker run -it -d --name walktop -p 7…

【算法系列】非线性最小二乘-列文伯格马夸尔和狗腿算法

系列文章目录 【算法系列】卡尔曼滤波算法 【算法系列】非线性最小二乘求解-直接求解法 【算法系列】非线性最小二乘求解-梯度下降法 【算法系列】非线性最小二乘-高斯牛顿法 【算法系列】非线性最小二乘-列文伯格马夸尔和狗腿算法 文章目录 系列文章 文章目录 前言 …