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

Laravel中Guzzle响应无法数组访问access_token的错误解决问询

问题解决:正确获取Guzzle响应中的access_token

错误原因

你遇到的Cannot use object of type GuzzleHttp\Psr7\Response as array错误,核心问题有两个:

  1. 你试图把Guzzle返回的Response对象当作数组直接访问,但$response是Guzzle的响应实例,并非解析后的数组;
  2. Guzzle请求参数格式错误:请求头$headers未放在'headers'键下,导致Guzzle无法正确识别请求头配置。

虽然你已经用json_decode($response->getBody(), true)把响应体解析成了关联数组$data,但后续错误地使用$response['access_token']取值,而非解析后的$data数组。

修正后的代码

public function getToken(Request $request)
{
    $url = Config('api.url');

    $client = new \GuzzleHttp\Client();
    $headers = [
        'Content-Type' => 'application/x-www-form-urlencoded',
    ];
    
    // 修正请求参数格式:headers放在指定键下
    $response = $client->request('POST', $url, [
        'headers' => $headers,
        'form_params' => [
            'client_id' => Config('api.client_id'),
            'client_secret' => Config('api.client_secret'),
            'username' => Config('api.username'),
            'password' => Config('api.password'),
            'grant_type' => 'password',
            'scope' => 'read write openid'
        ]  
    ]);
  
    // 解析响应体为关联数组
    $data = json_decode($response->getBody(), true);
    
    // 从解析后的数组中获取access_token
    $key_value = $data['access_token'];
    return $key_value;
}

额外优化建议

为避免接口返回异常导致的报错,可增加基础错误处理:

  • 校验接口响应状态码是否正常
  • 验证返回数据中是否存在access_token字段
    示例:
// 解析响应后添加检查逻辑
if ($response->getStatusCode() !== 200) {
    abort(500, '接口请求失败');
}

if (!isset($data['access_token'])) {
    abort(400, '未获取到有效access_token');
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 13:55:00