You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求Bearer Token时出现Uncaught TypeError:无法访问字符串类型偏移量

解决Bearer Token请求代码中的致命错误

原代码的核心问题

  1. 注释掉了$data = curl_exec($ch);,导致$data未被赋值,直接对其执行数组操作会触发未定义变量/无法对非数组类型进行数组操作的致命错误
  2. 接口返回的是JSON字符串,不能直接当作数组修改,必须先解码为关联数组
  3. 直接将数组写入文件会导致文件内容为Array,需要先编码为JSON格式
  4. 逻辑顺序混乱,修改字段、保存文件、解码的步骤完全颠倒

修正后的完整代码

function requestBearerToken()
{
    global $username, $password;
    $base_url = 'https://example-url.com/endpoint';

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $base_url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST, 1);

    $headers = array(
        'Content-Type: application/json',
        'Authorization: Basic ' . base64_encode("$username:$password"),
    );
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

    // 获取接口的JSON响应
    $response = curl_exec($ch);
    // 检查curl请求是否失败
    if(curl_errno($ch)) {
        echo 'Curl错误: ' . curl_error($ch);
        curl_close($ch);
        return;
    }
    curl_close($ch);

    // 将JSON字符串解码为关联数组
    $data = json_decode($response, true);
    // 检查JSON解码是否成功
    if(json_last_error() !== JSON_ERROR_NONE) {
        echo 'JSON解码错误: ' . json_last_error_msg();
        return;
    }

    // 添加自定义的过期时间字段(若需数组形式则改为$data['expires_on'][0])
    $data['expires_on'] = date("d-m-Y H:i:s", time() + 580);

    // 将修改后的数组编码为美观的JSON格式并保存
    file_put_contents("bearer.json", json_encode($data, JSON_PRETTY_PRINT));

    // 获取并输出token相关数据
    $token = $data['access_token'];
    print_r($data);
}

关键修改说明

  • 恢复了curl_exec的调用,确保拿到接口返回的JSON数据
  • 增加了curl请求和JSON解码的错误检查,方便排查问题
  • 严格遵循「请求数据→解码为数组→修改字段→编码为JSON→保存文件」的逻辑顺序
  • 写入文件时用json_encode处理数组,保证文件内容是合法的JSON格式
  • 若业务确实需要expires_on为数组形式,可将赋值语句改为$data['expires_on'][0] = date("d-m-Y H:i:s", time() + 580);

内容的提问来源于stack exchange,提问作者Luuc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 21:01:05