【发布时间】:2019-01-31 21:28:15
【问题描述】:
我目前正在尝试使用 cURL POST 类型在我的 Discord 频道上发布消息。我在运行代码时遇到的问题是它给了我一个 401 错误,说我未经授权。我正在使用 xampp localhost 在网络服务器上运行我的 PHP 代码。我还尝试通过 URL 链接 (https://discordapp.com/oauth2/authorize?client_id=MYAPPLICATIONID&scope=bot&permissions=8) 授权我的应用程序机器人,并成功地将机器人添加到我的频道中。看看我的代码
$data = array("Authorization: Bot" => $clientSecret, 'content' => 'Test Message');
$data_string = json_encode($data);
$ch = curl_init('https://discordapp.com/api/v6/channels/'.$myChannel.'/messages');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($data_string))
);
$answer = curl_exec($ch);
echo $answer;
if (curl_error($ch)) {
echo curl_error($ch);
}
我从应用程序页面获取 $clientSecret 以显示我的客户端秘密令牌,而 $myChannel 是我的不和谐频道/服务器 ID。
注意:我已经根据此处给出的另一个 stackoverflow 答案建模了我的代码 discord php curl login Fail 。所以我不确定我是否为应用程序机器人使用了正确的语法
【问题讨论】:
-
这里有一些看起来不对劲的地方,但由于我从未使用过 Discord,所以我不会在没有进一步验证的情况下进入它。不过,通过快速的 Google 搜索(和常见的 API 使用 exp),我发现您需要将授权作为标头而不是在正文有效负载中传递。因此,请尝试将
'Authorization: Bot '.$token,添加到您的CURLOPT_HTTPHEADER数组中。 (见gist.github.com/ianklatzco/c033b33757915feaf48fd0caf14b42cb) -
这个授权,需要使用TOKEN(不是clientSecret)。