Как настроить вебхуки

Вебхуки позволяют вам получать HTTPS-уведомления о событиях на платформе Paxful в режиме реального времени. Например, мы можем отправлять вам уведомления о новых сообщениях от торгового партнера или новых сделках. Таким образом, вам не придется постоянно отправлять API-запросы, чтобы узнать об изменениях или обновлениях. В этом руководстве мы расскажем вам, как настроить вебхуки на платформе Paxful.

Paxful поддерживает вебхуки для следующих событий:

  • Новая сделка на Paxful
  • Новое сообщение в чате сделки
  • Новое вложение в чате сделки
  • Кто-то просмотрел ваш профиль на Paxful
  • Кто-то просмотрел ваше предложение
  • Торговый партнер оплатил покупку биткоинов
  • Сделка отменена или срок действия сделки истек
  • Биткоины проданы
  • Биткоины куплены
  • Зачисление биткоинов подтверждено
  • Ожидается зачисление биткоинов
  • Отзыв от торгового партнера
  • Получен новый ответ на отзыв

Как настроить вебхуки

Примечание: Убедитесь, что ваш сервис принимает вебхуки. При сохранении URL ваш сервис должен взять заголовок запроса "X-Paxful-Request-Challenge" и указать его в ответе в таком же виде.

. Вот как должен выглядеть наш заголовок запроса (это пример вебхуков в Node.js):

RequestHeader.png

1. Войдите в аккаунт Paxful, наведите курсор на свое имя пользователя (в правом верхнем углу страницы) и выберите Настройки в появившемся контекстном меню.
ClickSettings.png

Вы перейдете на страницу настроек.

2. В меню в левой части страницы нажмите Для разработчиков.
Click_Developer.png

Вы перейдете на страницу для разработчиков.

3. Если у вас нет API-ключа, введите двухфакторный код в поле ниже и нажмите Добавить новый API-ключ. Если у вас есть API-ключ, вы можете пропустить этот шаг.
AddAPIKey.png

Ваш новый API-ключ появится на странице для разработчиков вместе с дополнительными разделами.

4. Скопируйте URL из своего приложения.
Перейдите в раздел Вебхуки на странице Для разработчиков. Вставьте ссылку в поле URL запроса и нажмите Сохранить.

Внимание! Наши вебхуки поддерживаются только адресами формата HTTPS. Вы не сможете использовать для этой цели адреса HTTP.


ClickSave.png

Заголовок запроса отправлен на ваше приложение.

Примечание: Таймаут при отправке — 10 секунд. Если мы за это время не получим ответ от вашего приложения, URL-ссылка не будет сохранена и вебхук не будет создан.

5. Если все сделано правильно, вы увидите список доступных для подписки событий. Пометьте галочкой события, на которые вы хотите подписаться.
Events.png

Примечание:

  • После выбора события будут сохранены автоматически.
  • После трех неудачных попыток отправки информации на ваше приложение вебхук деактивируется. 
  • Чтобы вставить новую ссылку, замените текущую URL-ссылку новой и нажмите Изменить.
  • Чтобы деактивировать вебхуки, нажмите Удалить.
  • Чтобы заново активировать отключенную URL-ссылку, нажмите Повторить попытку.
    ClickRetry.png
     

Если URL запроса успешно сохранена, в вашем приложении события будут отображаться следующим образом:

WebhookexampleEvent.png

Проверка запросов от Paxful

Paxful создает уникальную строку для вашего приложения и передает ее вам. Вы можете проверять запросы от Paxful при помощи проверки подписей.

Мы добавляем HTTPS-заголовок "X-Paxful-Signature" к каждому отправленному HTTPS-запросу. Подпись создается путем соединения ключа подписи с телом отправляемого запроса, для чего используется стандартный хеш HMAC-SHA256.

Примечание: В результате получается уникальная подпись для каждого запроса, которая не содержит какой-либо конфиденциальной информации. Это обеспечивает защиту вашего приложения от злоумышленников.

Примеры в JavaScript


const crypto = require('crypto');
const express = require('express');
const app = express();
const port = 3000;
const bodyParser = require('body-parser');

Ваш приватный ключ API со страницы https://paxful.com/account/developer:


const apiSecret = 'maE5KV16FV0nDyh7XPm2F8f8FZTdtb5p';

app.use(bodyParser.json());

Когда вы получите запрос на подтверждение адреса, вам нужно скопировать заголовок "X-Paxful-Request-Challenge" из запроса и вставить его в ответ.


app.use((req, res, next) => {

Запрос на подтверждение информации не содержит содержимого запроса и подписи запроса.


  if (!Object.keys(req.body).length && !req.get('X-Paxful-Signature')) {
        console.log('Address verification request received.');
        const challengeHeader = 'X-Paxful-Request-Challenge';
        res.set(challengeHeader, req.get(challengeHeader));
        res.end();
    } else {
        next();
    }
});

При получении уведомления о событии вы должны проверить заголовок "X-Paxful-Signature". Если запрос содержит неверную подпись, не обрабатывайте его.


  app.use((req, res, next) => {
    const providedSignature = req.get('X-Paxful-Signature');
    const calculatedSignature = crypto.createHmac('sha256', apiSecret).update(JSON.stringify(req.body)).digest('hex');
    if (providedSignature !== calculatedSignature) {
        console.log('Request signature verification failed.');
        res.status(403).end();
    } else {
        next();
    }
});

Теперь вы можете обработать событие.


  app.post('*', async (req, res) => {
    console.log('New event received:');
    console.log(req.body);
    res.end();
});

app.listen(port, () => console.log(`Example app listening at http://localhost:${port}`));

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

Статьи в этом разделе