Url конечной точки взаимодействия дискорд

Как проверить конечную точку discord с помощью php?

  • Post author: admin
  • Запись опубликована: 13 января, 2022
  • Post category: Вопросы по программированию

#php #discord

Вопрос:

У меня возникли некоторые проблемы с созданием бота Discord. Я хочу, чтобы он мог реагировать на команды косой черты, но для этого мне нужно проверить конечную точку. Я использую PHP 7.4 и не могу использовать какие-либо внешние библиотеки (хостинг на сервере, который их не разрешает). Я нашел документы для PHP, но для их работы требуются библиотеки. Я попытался забрать документы у Узла.JS и «преобразование» их в PHP. Вот мой код:

$return_array = [ ‘type’ => 1, ]; echo json_encode($return_array); ?>

Когда я указываю адрес, на который загружается файл, и пытаюсь сохранить изменения, Discord говорит следующее:

Ошибки проверки: interactions_endpoint_url: Не удалось проверить указанный URL конечной точки взаимодействия.

Ответ №1:

Согласно документации Discord, конечная точка взаимодействия должна выполнять две вещи:

How to get a Webhook URL on Discord

  • Ваша конечная точка должна быть готова к отправке сообщения PING
  • Ваша конечная точка должна быть настроена для правильной обработки заголовков подписей-подробнее об этом в разделе Безопасность и авторизация

Первая часть очень проста:

Итак, чтобы правильно проверить полезную нагрузку, верните ответ 200 с полезной нагрузкой типа: 1:

Таким образом, вам нужно возвращать объект JSON, а не массив (возможно, это одна из проблем с вашим кодом).

Кроме того, конечная точка должна иметь возможность отвечать на недопустимые запросы следующим образом:

Мы также проведем автоматические, обычные проверки безопасности вашей конечной точки, включая целенаправленную отправку вам недействительных подписей. Если вы не пройдете проверку, мы удалим ваш URL-адрес для взаимодействия в будущем и предупредим вас по электронной почте и системному DM.

Одна вещь, которую я заметил, это то, что Discord отправляет свои заголовки в нижнем регистре! Другая проблема заключается в том, что вы используете:

$raw_body = file_get_contents(‘php://input’); это выглядит неправильно.

Источник: programbox.ru

Как проверить конечную точку раздора с помощью php?

У меня возникли проблемы с созданием бота Discord. Я хочу, чтобы он мог отвечать на команды косой черты, но для этого мне нужно проверить конечную точку. Я использую PHP 7.4 и не могу использовать внешние библиотеки (хостинг на сервере, который их не разрешает). Я нашел документы для PHP, но для их работы требуются библиотеки. Я попытался взять документы из Node.JS и «преобразовать» их в PHP. Вот мой код:

Еще по теме:  Лучшие дискорд боты для сервера

How to make OAuth2 for your discord bot (WORKING)


$return_array = [ ‘type’ => 1, ]; echo json_encode($return_array); ?>

Когда я ввожу адрес, на который загружен файл, и пытаюсь сохранить изменения, Discord говорит следующее:

Ошибки проверки: Interactions_endpoint_url: указанный URL-адрес конечной точки взаимодействия не может быть проверен.

Jonathan Tadeo Leiva 7 Авг 2021 в 15:22
Вы когда-нибудь решали это?
25 Фев 2022 в 02:04

Нет, к сожалению нет. Но, если честно, я уже отказался от этого. Я сосредоточился на другом проекте, который имел в виду

Jonathan Tadeo Leiva
26 Фев 2022 в 15:29

3 ответа

Лучший ответ

Этот метод работает для меня на PHP 8.1.

Передайте заголовки и необработанное тело JSON, и он вернет массив с кодом ответа и полезной нагрузкой для отправки обратно через все, что вы используете для обработки ответа. Обратите внимание, что ответ должен быть закодирован в формате JSON.

$discord_public — это открытый ключ из приложения Discord.

public function authorize(array $headers, string $body, string $discord_public): array < $res = [ ‘code’ =>200, ‘payload’ => [] ]; if (!isset($headers[‘x-signature-ed25519’]) || !isset($headers[‘x-signature-timestamp’])) < $res[‘code’] = 401; return $res; >$signature = $headers[‘x-signature-ed25519’]; $timestamp = $headers[‘x-signature-timestamp’]; if (!trim($signature, ‘0..9A..Fa..f’) == ») < $res[‘code’] = 401; return $res; >$message = $timestamp . $body; $binary_signature = sodium_hex2bin($signature); $binary_key = sodium_hex2bin($discord_public); if (!sodium_crypto_sign_verify_detached($binary_signature, $message, $binary_key)) < $res[‘code’] = 401; return $res; >$payload = json_decode($body, true); switch ($payload[‘type’]) < case 1: $res[‘payload’][‘type’] = 1; break; case 2: $res[‘payload’][‘type’] = 2; break; default: $res[‘code’] = 400; return $res; >return $res; >
Coder1 27 Фев 2022 в 07:57

Функция работает, но для ясности вам нужно использовать вывод следующим образом: $auth = authorize($_SERVER, file_get_contents(‘php://input’), ‘your app pub key’); http_response_code($auth[‘code’]); echo json_encode($auth[‘payload’]);

20 Мар 2022 в 09:16
20 Мар 2022 в 21:17

Согласно документации Discord, конечная точка взаимодействия должна сделать две вещи:

  • Ваша конечная точка должна быть готова подтвердить сообщение PING.
  • Ваша конечная точка должна быть настроена для правильной обработки заголовков подписи — подробнее об этом в разделе «Безопасность и авторизация».

Первая часть очень проста:

Итак, чтобы правильно подтвердить полезную нагрузку, верните ответ 200 с полезной нагрузкой типа: 1:

Таким образом, вам нужно вернуть объект JSON, а не массив (возможно, это одна из проблем вашего кода).

Еще по теме:  Дискорд что означает восклицательный знак

Кроме того, конечная точка должна иметь возможность отвечать на недействительные запросы как:

Мы также будем проводить автоматические регулярные проверки безопасности вашей конечной точки, включая преднамеренную отправку вам недействительных подписей. Если вы не пройдете проверку, мы удалим URL-адрес вашего взаимодействия в будущем и предупредим вас по электронной почте и через системный DM.

Одна вещь, которую я заметил, это то, что Discord отправляет свои заголовки в нижнем регистре! Другая проблема заключается в том, что вы используете:

$raw_body = file_get_contents(‘php://input’); выглядит неправильно.

Наконец, если вы знакомы с node.JS, взгляните на мой рабочий пример: https://github.com/ iaforek/discord-взаимодействия

iaforek 31 Дек 2021 в 15:39

401, ‘payload’ => null]; $signature = $headers[‘HTTP_X_SIGNATURE_ED25519’]; $timestamp = $headers[‘HTTP_X_SIGNATURE_TIMESTAMP’]; if (!trim($signature, ‘0..9A..Fa..f’) == ») return [‘code’ => 401, ‘payload’ => null]; $message = $timestamp . $payload; $binarySignature = sodium_hex2bin($signature); $binaryKey = sodium_hex2bin($publicKey); if (!sodium_crypto_sign_verify_detached($binarySignature, $message, $binaryKey)) return [‘code’ => 401, ‘payload’ => null]; $payload = json_decode($payload, true); switch ($payload[‘type’]) < case 1: return [‘code’ =>200, ‘payload’ => [‘type’ => 1]]; case 2: return [‘code’ => 200, ‘payload’ => [‘type’ => 2]]; default: return [‘code’ => 400, ‘payload’ => null]; > >

Источник: question-it.com

Как проверить конечную точку Discord с помощью php?

У меня возникли проблемы при создании бота Discord. Я хочу, чтобы он мог отвечать на команды с косой чертой, но для этого мне нужно проверить конечную точку. Я использую PHP 7.4 и не могу использовать какие-либо внешние библиотеки (хостинг на сервере, который их не позволяет). Я нашел документы для PHP, но для их работы требуются библиотеки. Я пробовал брать документы из Node.JS и «конвертировать» их в PHP. Вот мой код:

$return_array = [ ‘type’ => 1, ]; echo json_encode($return_array); ?>

Когда я указываю адрес, на который загружен файл, и пытаюсь сохранить изменения, Discord сообщает следующее:

Ошибки валидации: Interactions_endpoint_url: указанный URL-адрес конечной точки взаимодействий не может быть проверен.

user8396463 07 авг ’21 в 15:22 2021-08-07 15:22
2021-08-07 15:22

3 ответа

Этот метод работает для меня на PHP 8.1.

Передайте заголовки и необработанное тело JSON, и он вернет массив с кодом ответа и полезной нагрузкой для отправки обратно через все, что вы используете для обработки ответа. Обратите внимание, что ответ должен быть закодирован в формате JSON.

Еще по теме:  Как разговаривать по дискорду в Майнкрафте

это открытый ключ из приложения Discord.

public function authorize(array $headers, string $body, string $discord_public): array < $res = [ ‘code’ =>200, ‘payload’ => [] ]; if (!isset($headers[‘x-signature-ed25519’]) || !isset($headers[‘x-signature-timestamp’])) < $res[‘code’] = 401; return $res; >$signature = $headers[‘x-signature-ed25519’]; $timestamp = $headers[‘x-signature-timestamp’]; if (!trim($signature, ‘0..9A..Fa..f’) == ») < $res[‘code’] = 401; return $res; >$message = $timestamp . $body; $binary_signature = sodium_hex2bin($signature); $binary_key = sodium_hex2bin($discord_public); if (!sodium_crypto_sign_verify_detached($binary_signature, $message, $binary_key)) < $res[‘code’] = 401; return $res; >$payload = json_decode($body, true); switch ($payload[‘type’]) < case 1: $res[‘payload’][‘type’] = 1; break; case 2: $res[‘payload’][‘type’] = 2; break; default: $res[‘code’] = 400; return $res; >return $res; >
user711852 27 фев ’22 в 04:57 2022-02-27 04:57
2022-02-27 04:57
401, ‘payload’ => null]; $signature = $headers[‘HTTP_X_SIGNATURE_ED25519’]; $timestamp = $headers[‘HTTP_X_SIGNATURE_TIMESTAMP’]; if (!trim($signature, ‘0..9A..Fa..f’) == ») return [‘code’ => 401, ‘payload’ => null]; $message = $timestamp . $payload; $binarySignature = sodium_hex2bin($signature); $binaryKey = sodium_hex2bin($publicKey); if (!sodium_crypto_sign_verify_detached($binarySignature, $message, $binaryKey)) return [‘code’ => 401, ‘payload’ => null]; $payload = json_decode($payload, true); switch ($payload[‘type’]) < case 1: return [‘code’ =>200, ‘payload’ => [‘type’ => 1]]; case 2: return [‘code’ => 200, ‘payload’ => [‘type’ => 2]]; default: return [‘code’ => 400, ‘payload’ => null]; > >
user2793555 20 мар ’22 в 06:41 2022-03-20 06:41
2022-03-20 06:41

Согласно документации Discord , конечная точка взаимодействия должна делать две вещи:

  • Ваша конечная точка должна быть готова подтвердить сообщение PING.
  • Ваша конечная точка должна быть настроена для правильной обработки заголовков подписи — подробнее об этом в разделе «Безопасность и авторизация».

Первая часть очень проста:

Итак, чтобы правильно подтвердить полезную нагрузку, верните ответ 200 с полезной нагрузкой типа: 1:

Таким образом, вам нужно вернуть объект JSON, а не массив (возможно, это одна из проблем вашего кода).

Кроме того, конечная точка должна иметь возможность отвечать на недопустимые запросы следующим образом:

Мы также будем проводить автоматические регулярные проверки безопасности вашей конечной точки, включая преднамеренную отправку вам недействительных подписей. Если вы не пройдете проверку, мы удалим URL-адрес вашего взаимодействия в будущем и предупредим вас по электронной почте и через системный DM.

Одна вещь, которую я заметил, это то, что Discord отправляет свои заголовки в нижнем регистре! Другая проблема заключается в том, что вы используете:

$raw_body = file_get_contents(‘php://input’); это не выглядит правильно.

Источник: stackru.com

Рейтинг
( Пока оценок нет )
Загрузка ...