当前位置: 首页 > 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.dtcms.com/a/232699.html

相关文章:

  • android 之 Tombstone
  • Win10停更,Win11不好用?现在Mac电脑比Win11电脑更便宜
  • RPA+AI:自动化办公机器人开发指南
  • Postman接口测试之postman设置接口关联,实现参数化
  • 第三章:栈与队列
  • Linux C学习路线全概及知识点笔记2(仅供个人参考)
  • OGG-01635 OGG-15149 centos服务器远程抽取AIX oracle11.2.0.4版本
  • 曼昆《经济学原理》(第9版)微观经济学第二章第一节作为科学家的经济学家
  • CVE-2020-17518源码分析与漏洞复现(Flink 路径遍历)
  • Mysql主从复制原理分析
  • c++ 基于openssl MD5用法
  • LeetCode 461.汉明距离
  • AWS 亚马逊 S3存储桶直传 前端demo 复制即可使用
  • 数据结构:泰勒展开式:霍纳法则(Horner‘s Rule)
  • ModuleNotFoundError No module named ‘torch_geometric‘未找到
  • 使用vue3+ts+input封装上传组件,上传文件显示文件图标
  • Spring 框架之IOC容器加载重要组件
  • k8s开发webhook使用certmanager生成证书
  • 将图形可视化工具的 Python 脚本打包为 Windows 应用程序
  • MyBatis之测试添加功能
  • Oracle 的 SEC_CASE_SENSITIVE_LOGON 参数
  • Ntfs!ReadIndexBuffer函数分析之nt!CcGetVirtualAddress函数之nt!CcGetVacbMiss
  • DBSyncer:开源数据库同步利器,MySQL/Oracle/ES/SqlServer/PG/
  • Selenium 和playwright 使用场景优缺点对比
  • 【Linux】可重入函数 volatile SIGHLD信号
  • 打卡Day45
  • 渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
  • 2025年渗透测试面试题总结-ali 春招内推电话1面(题目+回答)
  • RKNN3588上部署 RTDETRV2
  • 全球IP归属地查询接口如何用C#进行调用?