Вебхуки
Получайте уведомления в реальном времени при изменении статуса заказа. Подписанные JSON, простая верификация.
Вебхук — это HTTP-коллбэк: когда статус заказа меняется, мы отправляем POST-запрос на ваш URL с данными события. Не нужен поллинг — вы получаете мгновенные уведомления.
Настройка
Через панель реселлера
Перейдите в Профиль → Webhook-уведомления, введите URL вебхука (https:// или http://), нажмите «Сохранить вебхук», скопируйте секрет из модального окна — он показывается только один раз.
Через API
Установите URL вебхука (секрет возвращается один раз):
curl -X POST "https://api.fazercards.com/api/v1/me/webhook" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"webhook_url": "https://your-server.com/webhook"}'События
Вебхук получает только события изменения статуса заказа. Настройка не требуется.
| Статус | Когда срабатывает |
|---|---|
| completed | Заказ выполнен — коды доставлены |
| refunded | Заказ возвращён |
| failed | Заказ не выполнен или ошибка |
Формат данных
Тело POST-запроса в формате JSON:
Поля: event — всегда order.status_changed; timestamp — ISO 8601; data.order_id — ID заказа; data.status — новый статус; data.codes — массив кодов (для completed).
{
"event": "order.status_changed",
"timestamp": "2026-03-14T12:34:56.789Z",
"data": {
"order_id": "ord_xxx",
"status": "completed",
"type": "gift_card",
"amount_charged": 5.00,
"currency": "USDT",
"product_id": "prod_xxx",
"product_name": "Steam $10",
"codes": ["XXXX-YYYY-ZZZZ"],
"created_at": "2026-03-14T12:00:00Z",
"updated_at": "2026-03-14T12:34:56Z"
}
}Для выполненных заказов codes содержит доставленные коды активации. Для возвратов/ошибок — пустой массив.
Пример неудачного заказа
{
"event": "order.status_changed",
"timestamp": "2026-03-14T12:34:56.789Z",
"data": {
"order_id": "ord_xxx",
"status": "failed",
"type": "gift_card",
"amount_charged": 5.00,
"currency": "USDT",
"product_name": "Steam $10",
"codes": [],
"created_at": "2026-03-14T12:00:00Z",
"updated_at": "2026-03-14T12:34:56Z"
}
}Проверка подписи
Каждый вебхук подписан HMAC SHA-256 секретом. Проверяйте подпись для безопасности.
Подпись доказывает, что запрос пришёл от FazerCards. Без проверки злоумышленник может подделать вебхук.
Пример Node.js
const crypto = require('crypto');
function verifyWebhookSignature(rawBody, signature, secret) {
const expected = 'sha256=' + crypto
.createHmac('sha256', secret)
.update(rawBody)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(signature, 'utf8'),
Buffer.from(expected, 'utf8')
);
}
// Usage (Express)
app.post('/webhook', express.raw({ type: 'application/json' }), (req, res) => {
const sig = req.headers['x-webhook-signature'];
if (!verifyWebhookSignature(req.body.toString(), sig, process.env.WEBHOOK_SECRET)) {
return res.status(401).send('Invalid signature');
}
const payload = JSON.parse(req.body.toString());
// Process payload...
res.status(200).send('OK');
});Пример Python
import hmac
import hashlib
def verify_webhook_signature(raw_body: bytes, signature: str, secret: str) -> bool:
expected = 'sha256=' + hmac.new(
secret.encode(),
raw_body,
hashlib.sha256
).hexdigest()
return hmac.compare_digest(signature, expected)
# Usage (Flask)
@app.route('/webhook', methods=['POST'])
def webhook():
raw_body = request.get_data()
sig = request.headers.get('X-Webhook-Signature', '')
if not verify_webhook_signature(raw_body, sig, os.environ['WEBHOOK_SECRET']):
return 'Invalid signature', 401
payload = request.get_json()
# Process payload...
return 'OK', 200Перегенерация секрета
Новый секрет инвалидирует старые подписи. Обновите проверку на сервере.
curl -X POST "https://api.fazercards.com/api/v1/me/webhook/regenerate" \
-H "X-API-Key: YOUR_API_KEY"Политика повторов
При ошибке (не-2xx) FazerCards повторяет отправку с экспоненциальной задержкой.
Безопасность
- Всегда проверяйте подпись
- Используйте HTTPS в продакшене
- Храните секрет безопасно
- Отвечайте быстро (200 за секунды); тяжёлую работу выполняйте асинхронно
API-эндпоинты
/me/webhookGet current webhook config
/me/webhookSet webhook URL (returns secret once)
/me/webhook/settingsUpdate webhook URL
/me/webhook/regenerateRegenerate secret (returns new secret once)
/me/webhookRemove webhook
/me/webhook/testSend a test event