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

调用Discord API时提示请求体含无效JSON的问题求助

解决Discord API PUT请求「请求体包含无效JSON」错误

你遇到的问题是因为调用Discord的PUT /guilds/{guild.id}/members/{user.id}接口时,未提供符合要求的JSON请求体。该接口要求必须携带包含用户授权信息的请求体,仅设置请求头会导致JSON格式校验失败。

解决步骤:

  • 确认接口必填参数:该接口必须传入access_token(用户的Discord OAuth2访问令牌),该令牌需要拥有guilds.join权限。
  • 在请求中添加JSON格式的请求体,使用HTTP客户端的json参数(以Guzzle Client为例,该参数会自动将数组编码为JSON并设置正确的Content-Type请求头)。

修正后的代码示例:

try {
    $join = new Client();
    // 构造请求体,access_token为必填项
    $requestBody = [
        'access_token' => $socialUser->discord_access_token, // 替换为用户的Discord OAuth2访问令牌
        // 可选参数(按需添加)
        // 'nick' => '用户自定义昵称',
        // 'roles' => ['目标角色ID1', '目标角色ID2']
    ];

    $joinData = $join->put(
        $this->baseURL . "guilds/" . $this->tokenData['serverId'] . "/members/" . $socialUser->id,
        [
            'headers' => ['Authorization' => 'Bot ' . Discord::$botToken],
            'json' => $requestBody // 自动处理JSON编码与Content-Type
        ]
    );

    // 验证响应状态码
    if ($joinData->getStatusCode() === 200) {
        // 成员添加成功逻辑
    }
} catch (Exception $th) {
    dd("join Error :" . $th->getMessage());
}

额外注意事项:

  • 确保机器人账号拥有MANAGE_ROLES或CREATE_INSTANT_INVITE权限,否则会触发权限不足错误。
  • 如果手动构造请求体,需使用json_encode()编码数组,并在请求头中保持Content-Type: application/json,示例:
    'body' => json_encode($requestBody),
    'headers' => [
        'content-type' => 'application/json',
        'Authorization' => 'Bot ' . Discord::$botToken
    ]
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 08:15:32