💎
API Документация
ГлавнаяПоддержка
API V3
API V3
  • Общая информация
  • Спецификация
    • Аутентификация
    • Примеры по работе с API на разных языках
  • Методы API
    • Me — касса
      • Получение информации о кассе
    • Balance — балансы
      • Получение списка балансов
      • Получение баланса
    • Method — методы
      • Получение списка методов
      • Получение метода
      • Изменение настроек метода
    • Invoice — платежи
      • Создание инвойса
      • Получение информации об инвойсе
    • Payoff — выводы
      • Создание вывода
      • Подтверждение вывода
      • Отмена вывода
      • Получение информации о выводе
    • Swap — обмены
      • Обменные пары
        • Получение списка обменных пар
        • Получение обменной пары
      • Создание обмена
      • Подтверждение обмена
      • Отмена обмена
      • Получение информации об обмене
    • Transfer — переводы
      • Создание перевода
      • Подтверждение перевода
      • Отмена перевода
      • Получение информации о переводе
    • Ticker — курсы валют
      • Получение списка валют
      • Получение курса валют
    • Report — отчёты и статистика
      • Invoice — платежи
        • Получение истории
        • Получение статистики
      • Payoff — выводы
        • Получение истории
        • Получение статистики
      • Swap — обмены
        • Получение истории
      • Transfer — переводы
        • Получение истории
    • Callback — уведомления
      • Invoice — платежи
        • Получение списка уведомлений
      • Payoff — выводы
        • Получение списка уведомлений
  • Callback
    • Общая информация
    • Invoice — уведомления
    • Payoff — уведомления
  • Модули CMS
    • BillManager
    • WHMCS
  • SDK
    • Python
  • От сообщества
    • SDK
      • Python от k1p1k-code
Powered by GitBook
On this page
  • Лимиты
  • Условия
  • Безопасность
  • Пример валидации signature
  1. Callback

Общая информация

IP адреса используемые для отправки уведомлений
193.141.53.171
193.141.53.176
191.101.112.123
191.101.112.154
185.168.250.38
163.198.213.130

Лимиты

  • Повторные уведомления: Если сервер не подтвердит получение callback (например, если ваш сервер не вернёт HTTP-ответ с кодом 200 или 429), система будет повторно отправлять уведомление с задержкой в N минут, где N - количество уже совершённых попыток.

  • Общее количество попыток: Если после нескольких попыток уведомление не было успешно доставлено, оно будет помечено как не доставленное, и дальнейшие попытки прекращаются. Максимальное количество попыток составляет 10.

Условия

  1. Формат уведомлений: Все callback уведомления отправляются с использованием POST-запросов в формате JSON.

  2. Гарантированное получение уведомлений: Для успешной интеграции необходимо, чтобы ваш сервер всегда был готов принимать и корректно обрабатывать callback уведомления. Для подтверждения успешного приёма сервер должен возвращать HTTP-ответ с кодом 200 или 429.

  3. Таймаут обработки: Ваш сервер должен обработать запрос в течение 30 секунд. Если обработка займёт больше времени, система примет это за неуспех и повторит попытку отправки уведомления.

  4. Подтверждение подписи: Для каждой callback-операции мы генерируем и отправляем уникальную подпись в поле signature. Вы должны сгенерировать аналогичную подпись на своей стороне в соответствии с указанным форматом и сравнить её с подписью, полученной в уведомлении, чтобы убедиться в подлинности данных.

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

Безопасность

Все callback уведомления содержат поле signature, в котором передаётся сгенерированная нашей системой подпись. Для безопасности важно сгенерировать подпись на вашей стороне в соответствии с заданным форматом и сверить её с подписью, полученной в уведомлении.

Пример валидации signature

<?php
// Получение данных из запроса
$content = json_decode(file_get_contents('php://input'), true);

$id = $content["id"];
$signature = $content["signature"];

$salt = "Salt кассы"; // Секретный ключ salt

// Генерация хеша
$hash = sha1($id . ":" . $salt);

// Безопасное сравнение подписи callback
if (!hash_equals($hash, $signature)) {
    exit("Invalid signature!");
}

echo "Signature is valid!";
import hashlib
import hmac

# Пример данных из запроса
content = {
    "id": "123456789_abcdefghij",
    "signature": "signature_from_request"
}

id_value = content["id"]
signature = content["signature"]

salt = "Salt кассы"  # Секретный ключ salt

# Генерация хеша
hash_string = f"{id_value}:{salt}"
computed_hash = hashlib.sha1(hash_string.encode()).hexdigest()

# Безопасное сравнение подписи
if not hmac.compare_digest(computed_hash, signature):
    print("Invalid signature!")
else:
    print("Signature is valid!")
const crypto = require('crypto');

// Пример данных из запроса
const content = {
  id: '123456789_abcdefghij',
  signature: 'signature_from_request'
};

const id = content.id;
const signature = content.signature;

const salt = "Salt кассы"; // Секретный ключ salt

// Генерация хеша
const hashString = `${id}:${salt}`;
const computedHash = crypto.createHash('sha1').update(hashString).digest('hex');

// Безопасное сравнение подписи
if (!crypto.timingSafeEqual(Buffer.from(computedHash), Buffer.from(signature))) {
  console.log("Invalid signature!");
} else {
  console.log("Signature is valid!");
}

Обратите внимание!

Данные примеры валидации подписи signature актуальны только для формата: {id}:{salt}.

В случае, если указано иное, необходимо скорректировать код под другой формат.

PreviousПолучение списка уведомленийNextInvoice — уведомления

Last updated 3 months ago