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

Discord API错误#40001未授权:机器人发送消息失败求助

解决Discord API发送消息返回40001未授权的问题

我来帮你排查这个未授权的问题,从几个关键维度逐一检查:

1. 确保Bot Token格式正确

首先要确认你使用的$this->token是正确的Bot专属令牌,不是OAuth2的客户端密钥、用户令牌或者其他凭证。Bot令牌可以在Discord开发者门户的机器人页面找到,格式是一串无空格的长字符。
另外,Authorization头的格式必须严格是Bot 你的令牌,中间有且仅有一个空格,不能多也不能少,令牌前后不要加任何引号或多余字符。

2. 恢复Content-Type请求头

你注释掉了Content-Type: application/json,但Discord API要求发送JSON格式的POST数据时必须携带这个头——没有它,服务器无法正确解析你发送的消息内容,这大概率是导致授权失败的直接原因之一。把这行注释去掉,确保请求头包含该字段。

3. 验证Bot的权限配置

虽然你完成了OAuth2授权,但要确认两个权限点:

  • 授权时的permissions=59392数值是否包含SEND_MESSAGES权限(发送消息),可以用Discord开发者门户的权限计算器核对数值是否正确;
  • 目标服务器的目标频道,是否给Bot开放了发送消息的权限(频道设置→权限→找到你的Bot角色,确认“发送消息”权限是允许状态)。

4. 确认Channel ID有效

确保$channel_id是目标频道的正确ID,不是服务器ID或其他类型的ID。你可以在Discord中开启开发者模式(用户设置→高级→开发者模式),右键目标频道选择“复制ID”来获取准确值。

修正后的PHP代码示例

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'https://discordapp.com/api/channels/'.$channel_id.'/messages');
curl_setopt($curl, CURLOPT_HTTPHEADER, [
    'Content-Type: application/json', // 必须保留的请求头
    'Authorization: Bot '.$this->token
]);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode([
    'content' => 'test'
]));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
// 建议开启SSL验证,避免环境安全问题
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
$server_output = curl_exec($curl);
curl_close ($curl);
var_dump(json_decode($server_output, true));

额外排查技巧

如果还是报错,可以先用命令行curl测试,排除PHP代码的问题:

curl -X POST -H "Content-Type: application/json" -H "Authorization: Bot 你的Bot令牌" -d '{"content":"test"}' https://discordapp.com/api/channels/你的频道ID/messages

如果命令行能成功,说明问题出在PHP代码的细节上;如果命令行也失败,那大概率是令牌或权限的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:07:41