您现在的位置是:首页 >其他 >php 接入扣子(coze)获取 Oauth Access Token 网站首页其他
php 接入扣子(coze)获取 Oauth Access Token
简介php 接入扣子(coze)获取 Oauth Access Token
在扣子官网文档里没有提供php版sdk,以下代码实现获取Oauth Access Token。
<?php
class CozeLogic
{
public function get_access_token()
{
$apiUrl = "https://api.coze.cn/api/permission/oauth2/token";
$postData = [
'grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer', // 固定值
'duration_seconds' => 86399, // 申请的 AccessToken 有效期,单位为秒,默认 900 秒,即 15 分钟。最大可设置为 86399 秒,即 24 小时。
];
$headers = [
'Content-Type: application/json',
'Authorization: Bearer ' . $this->get_jwt()
];
$response = $this->httpRequest($apiUrl, 'POST', json_encode($postData, JSON_UNESCAPED_UNICODE), $headers, 300);
$result = json_decode($response, true);
if (!empty($result['access_token'])) {
return [
'code' => 1,
'access_token' => $result['access_token'],
];
}
return [
'code' => 0,
'msg' => empty($result['error_message']) ? "获取访问令牌失败" : "获取访问令牌失败,错误码: {$result['error_code']},错误信息: {$result['error_message']}",
];
}
public function get_jwt()
{
// OAuth 应用的公钥指纹
$public_key_id = 'OAuth 应用的公钥指纹';
// OAuth 应用的 ID,必须是字符串类型
$app_id = '应用的ID';
// Header 参数
$header = [
'alg' => 'RS256', // 固定为RS256
'typ' => 'JWT', // 固定为 JWT
'kid' => strval($public_key_id) // OAuth 应用的公钥指纹
];
/**
* 访问令牌的会话标识。目前仅限在会话隔离场景下使用,即将 session_name 指定为用户在业务侧的 UID,以此区分不同业务侧用户的对话历史。
* 若未指定 session_name,不同用户的对话历史可能会掺杂在一起。
*/
$session_name = empty($_COOKIE['coze_session_name']) ? '' : $_COOKIE['coze_session_name'];
if (empty($session_name)) {
$session_name = (int) session('users_id'); // 根据业务改成等于用户的uid
}
if (empty($session_name)) {
$session_name = session_id();
}
setcookie('coze_session_name', $session_name);
// Payload 参数
$payload = [
'iss' => strval($app_id), // OAuth 应用的 ID
'aud' => 'api.coze.cn', //扣子 API 的Endpoint
'iat' => time(), // JWT开始生效的时间,秒级时间戳
'exp' => time() + 86400, // JWT过期时间,秒级时间戳
'jti' => (string) $this->get_rand_str(48, 0, 0), // 随机字符串,防止重放攻击
'session_name' => strval($session_name), // 必须是字符串类型
];
$e
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。




QT多线程的5种用法,通过使用线程解决UI主界面的耗时操作代码,防止界面卡死。...
U8W/U8W-Mini使用与常见问题解决
stm32使用HAL库配置串口中断收发数据(保姆级教程)
分享几个国内免费的ChatGPT镜像网址(亲测有效)
Allegro16.6差分等长设置及走线总结