当前位置: 首页 > news >正文

thinkphp8.1 调用巨量广告API接口,刷新token

1、在mysql中建立表sys_token;

CREATE TABLE `sys_token` (`id` int UNSIGNED NOT NULL,`access_token` varchar(50) COLLATE utf8mb4_general_ci NOT NULL,`expires_in` timestamp NOT NULL,`refresh_token` varchar(50) COLLATE utf8mb4_general_ci NOT NULL,`refresh_token_expires_in` timestamp NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='API token';

备注:expires_in\refresh_token_expires_in 巨量引擎返回的是纯数字,单位:秒,需要你在tp里转换成年月日时分秒;

2、第一次获取令牌时,官方会给你auth_code,你根据你的app_id,secret,auth_code获取令牌,并存入database中;

3、由于令牌的有效期是1天,刷新令牌有效期是30天;令牌过期了需要刷新令牌;

use think\response\Json;
use think\facade\Db;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;
use GuzzleHttp\Psr7\Request;
use DateTime;class Index
{protected string $accessToken;public function __construct(){$data = Db::name('sys_token')->find(1);$expired_time = $data['expires_in']; // accessToken的过期时间$result = (new DateTime() > new DateTime($expired_time) ? 1 : 0);if ($result===1) {$this->getRefreshToken($data['refresh_token']); // 过期了刷新令牌} else {$this->accessToken = $data['access_token'];}}public function index(){// 在调用任意接口时,需要有访问令牌;return $this->accessToken;}public function getRefreshToken(string $refreshToken): Json{$client = new Client();$headers = ['Content-Type' => 'application/json',];// 请求体数据$body = ['app_id' => '你的app_id','secret' => '您的secret','refresh_token' => $refreshToken,];try {// 异步请求$response = $client->request('POST', 'https://api.oceanengine.com/open_api/oauth2/refresh_token/', ['headers' => $headers,'json' => $body,  // 使用 'json' 自动编码为 JSON]);// 获取响应体并输出$responseBody = $response->getBody()->getContents();$result = json_decode($responseBody, true);$data = ['id'=>1,'access_token' => $result['data']['access_token'],'expires_in' => $result['data']['expires_in'],'refresh_token' => $result['data']['refresh_token'],'refresh_token_expires_in' => $result['data']['refresh_token_expires_in']];Db::name('sys_token')->update($data);return json(['code'=>0, 'msg'=>'刷新token成功']);} catch (RequestException $e) {// 错误处理return json(['code'=>1, 'msg'=>$e->getMessage()]);}}
}

测试环境:centOS stream 9、php8.3、thinkphp8.1; 欢迎大家指正........

http://www.lqws.cn/news/153055.html

相关文章:

  • 二叉树-104.二叉树的最大深度-力扣(LeetCode)
  • 深入解析与解决方案:处理Elasticsearch中all found copies are either stale or corrupt未分配分片问题
  • RunnablePassthrough介绍和透传参数实战
  • Python训练营---Day45
  • 泊松融合的介绍和OpenCV教程
  • Android7 Input(十)View 处理Input事件pipeline
  • 视频汇聚平台EasyCVR“明厨亮灶”方案筑牢旅游景区餐饮安全品质防线
  • ubuntu屏幕复制
  • 人工智能--大型语言模型的存储
  • Spring框架学习day7--SpringWeb学习(概念与搭建配置)
  • 从零到一:Maven 快速入门教程
  • 虚实共生时代的情感重构:AI 恋爱陪伴的崛起、困局与明日图景
  • 回文数 - 力扣
  • 【Qt】之【Get√】【Bug】通过值捕获(或 const 引用捕获)传进 lambda,会默认复制成 const
  • 4G 模块工作原理及应用场景
  • scDown:单细胞RNA测序下游分析管道-文献精读140
  • 129、QT搭建FFmpeg环境
  • NC | 基于语言模型的药物设计新方法
  • nginx怎么使用nginx-rtmp-module模块实现直播间功能
  • uboot移植之GPIO上电初始状态的调整
  • 【Web应用】若依框架:基础篇21二次开发-页面调整
  • 论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving
  • 【inode使用 100%,导致项目异常】
  • PHP 8.5 即将发布:管道操作符、强力调试
  • SpringCloud-基于SpringAMQP实现消息队列
  • 我的创作纪念日——聊聊我想成为一个创作者的动机
  • 【科研绘图系列】R语言绘制和弦图(Chord diagram plot)
  • 用 ESP8266 RTOS SDK写一个详细的示例,要求只输出beacon包,其它包不处理
  • 【Go语言基础【5】】运算符基础
  • USB-C/HDMI 2.0 2:1 SW,支持4K60HZ