Crystal Pay

Авторизация

Базовый URL: https://api.crystal-pay.net. Все запросы требуют заголовок:

Crypto-Pay-API-Token: 

Токен выдаётся в боте после создания мерчанта («Merchant API → Регистрация»).

Создание счета

Эндпоинт

POST /api/v1/createInvoice

Параметры

Параметр Тип Описание
amount число Сумма (крипта)
asset строка USDT, TON, TRX, APT
payload строка ID заказа магазина (опционально)

Пример ответа

{
  "ok": true,
  "result": {
    "invoice_id": 123,
    "pay_url": "https://t.me/Bot?start=inv_hash"
  }
}

Python (requests)

import requests

r = requests.post("https://api.crystal-pay.net/api/v1/createInvoice",
    headers={"Crypto-Pay-API-Token": "TOKEN"},
    json={"asset": "USDT",
          "amount": 10.5,
          "payload": "order_1"})
print(r.json())

PHP (cURL)

$ch = curl_init("https://api.crystal-pay.net/api/v1/createInvoice");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Crypto-Pay-API-Token: TOKEN",
    "Content-Type: application/json",
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
    "asset" => "USDT",
    "amount" => 10.5,
]));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
echo curl_exec($ch);

Webhooks (уведомления об оплате)

При успешной оплате сервер отправляет POST на webhook-url магазина:

{
  "invoice_id": 123,
  "status": "paid",
  "amount": 10.5,
  "asset": "USDT",
  "payload": "order_1"
}

Безопасность: проверка подписи

Критично. Всегда проверяйте подпись заголовка X-Signature: HMAC-SHA256 от тела запроса с вашим API-токеном. Это гарантирует, что запрос пришёл именно от Crystal Pay.

import hashlib, hmac, json

# raw_body — сырое тело запроса (bytes)
# signature — значение заголовка X-Signature
expected = hmac.new(
    TOKEN.encode(), raw_body, hashlib.sha256
).hexdigest()

if not hmac.compare_digest(expected, signature):
    raise PermissionError("Invalid signature")

data = json.loads(raw_body)
# -> обрабатываем оплату