【问题标题】:Quickblox API errors when using Guzzle 6使用 Guzzle 6 时出现 Quickblox API 错误
【发布时间】:2023-09-09 05:18:01
【问题描述】:

我正在使用“guzzlehttp/guzzle”:“^6.1”和 Laravel 4.2 我正在尝试对 quickblox 进行后期调用,但返回 422 错误。这是我在控制器中的代码:

    $client = new GuzzleHttp\Client();
    $sessionGuzzle = $client->request('POST', 'https://api.quickblox.com/session.json',['headers' => ['Content-Type' => 'application/json' , 'QuickBlox-REST-API-Version'=>'0.1.0'],'json' => $jsonBody]);
    $response = $client->send($sessionGuzzle);
    dd($response->json());

GuzzleHttp\Exception\ClientException (422)

客户端错误:422

【问题讨论】:

    标签: php guzzle guzzle6


    【解决方案1】:

    422 是 HTTP 状态代码 - 无法处理的实体。

    看起来 quickblox API 正在拒绝您的呼叫,因为您发送了错误的标头或正文。

    尝试将 'json' => $jsonBody 更改为 'body' => $jsonBody 并确保 $jsonBody 是 JSON 编码的字符串。

    【讨论】:

    • nothing append changed 'json' in 'body' 这就是我在 $jsonBody 中的内容:{"application_id":"22337","auth_key":"UcUiGsRmOZ-Fq-J","timestamp ":"1446051576","nonce":"380128471","签名":"7707eeb02b00bgsd5g7f57sgc225de2358611"}
    • 目前我正在使用另一个库 anlutro\cURL,但我无法提出任何请求......有什么建议吗?
    【解决方案2】:

    根据errors 上的 Quickblox 文档,您的 422 错误发生在

    已登录的用户

    根据authentication 上的 Quickblox 文档,提供的时间戳必须是 NTP 的 +/- 10 分钟。

    【讨论】:

    • 这个问题与 Guzzle 有关,目前我正在为 laravel 使用另一个 curl 库并且它正在工作,所以我认为与用于请求的数据无关。
    • 如果启用调试选项,是您发送的请求、您认为您发送的内容还是使用 v2 时发送的内容?