API Перевірки Скіпасів
API для перевірки скіпасів через зовнішню систему Bukovel.
Огляд
Цей API дозволяє перевіряти валідність скіпасів перед створенням уроків або бронювань. Система автоматично звертається до зовнішнього API Bukovel для отримання актуальної інформації про скіпас.
Кінцеві точки
Перевірити один скіпас
Запит:
POST /api/v1/skipasses/check/
Authorization: Token YOUR_ACCESS_TOKEN
Content-Type: application/json
{
"skipass_number": "30-2167-26-72093"
}
Відповідь (Успіх):
{
"status": "success",
"skipass_number": "30-2167-26-72093",
"valid": true,
"error": null,
"data": {
"ticket_num": "30-2167-26-72093",
"card_number": "16147115513376519261",
"date_issue": "2013-12-22T09:31:20",
"type_name": "5 днів СЕЗОН",
"date_begin": "2013-12-22 09:31:00",
"date_end": "2050-05-15 00:00:00"
}
}
Відповідь (Невалідний):
{
"status": "error",
"skipass_number": "1-1-2-99999",
"valid": false,
"error": "Скіпас не знайдено в системі Bukovel",
"data": null
}
Приклад cURL:
curl -X POST http://localhost:8000/api/v1/skipasses/check/ \
-H "Authorization: Token YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"skipass_number": "30-2167-26-72093"}'
Перевірити декілька скіпасів
Запит:
POST /api/v1/skipasses/check-multiple/
Authorization: Token YOUR_ACCESS_TOKEN
Content-Type: application/json
{
"skipass_numbers": [
"30-2167-26-72093",
"1-1-2-20907",
"12-345-67-89012"
]
}
Відповідь:
{
"status": "success",
"results": {
"30-2167-26-72093": {
"valid": true,
"error": null,
"data": {
"ticket_num": "30-2167-26-72093",
"card_number": "16147115513376519261",
"date_issue": "2013-12-22T09:31:20",
"type_name": "5 днів СЕЗОН",
"date_begin": "2013-12-22 09:31:00",
"date_end": "2050-05-15 00:00:00"
}
},
"1-1-2-20907": {
"valid": false,
"error": "Скіпас не знайдено в системі Bukovel",
"data": null
},
"12-345-67-89012": {
"valid": true,
"error": null,
"data": {
"ticket_num": "12-345-67-89012",
"card_number": "98765432109876543210",
"date_issue": "2025-11-01T10:00:00",
"type_name": "День",
"date_begin": "2025-11-01 10:00:00",
"date_end": "2025-11-01 23:59:59"
}
}
},
"summary": {
"total": 3,
"valid": 2,
"invalid": 1
}
}
Приклад cURL:
curl -X POST http://localhost:8000/api/v1/skipasses/check-multiple/ \
-H "Authorization: Token YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"skipass_numbers": [
"30-2167-26-72093",
"1-1-2-20907",
"12-345-67-89012"
]
}'
Інтеграція з Bukovel API
Система використовує зовнішнє API Bukovel для перевірки скіпасів:
Кінцева точка зовнішнього API:
POST https://skipass-api.bukovel.dev/check-ticket
Аутентифікація:
Authorization: Bearer gkPTzYSRUB1Wj5GUoUuzALdqE4j8VP70zzrjqe1BWdywGHqub6kS6va8Q1BTPwIW
Формат зовнішнього запиту:
{
"ticketNum": "30-2167-26-72093"
}
Формат зовнішньої відповіді:
{
"results": [
{
"error_id": 0,
"error_msg": "",
"TicketNum": "30-2167-26-72093",
"CardNumberFull": "16147115513376519261",
"DateIssue": "2013-12-22T09:31:20",
"TypeName": "5 днів СЕЗОН",
"DateBegin": "2013-12-22T09:31:00",
"DateEnd": "2050-05-15T00:00:00"
}
]
}
Використання в лижній школі
Процес створення уроку з перевіркою скіпасів:
- Крок 1: Система продажу лижної школи викликає
/api/v1/skipasses/check-multiple/з масивом скіпасів - Крок 2: API перевіряє кожен скіпас через Bukovel API
- Крок 3: Повертається результат перевірки для кожного скіпасу
- Крок 4: Якщо всі скіпаси валідні, система створює урок через
/api/v1/lessons/ - Крок 5: Дані про скіпаси (type_name, date_begin, date_end) автоматично зберігаються
Приклад послідовності запитів:
// 1. Перевірити скіпаси
const checkResponse = await fetch('/api/v1/skipasses/check-multiple/', {
method: 'POST',
headers: {
'Authorization': 'Token YOUR_TOKEN',
'Content-Type': 'application/json'
},
body: JSON.stringify({
skipass_numbers: ['30-2167-26-72093', '1-1-2-20907']
})
});
const checkResult = await checkResponse.json();
// 2. Якщо всі скіпаси валідні - створити урок
if (checkResult.summary.invalid === 0) {
const lessonResponse = await fetch('/api/v1/lessons/', {
method: 'POST',
headers: {
'Authorization': 'Token YOUR_TOKEN',
'Content-Type': 'application/json'
},
body: JSON.stringify({
booking_number: 'LESSON-123',
start_datetime: '2025-11-10T10:00:00Z',
end_datetime: '2025-11-10T12:00:00Z',
instructor_name: 'Іван Петренко',
location: 'Буковель-1',
status: 'active',
participants: [
{
customer: {
name: 'Олексій',
surname: 'Коваленко',
phone_number: '+380501234567'
},
skipasses: [
{
skipass_number: '30-2167-26-72093',
// Дані з checkResult автоматично заповнюються
valid_from: checkResult.results['30-2167-26-72093'].data.date_begin,
valid_until: checkResult.results['30-2167-26-72093'].data.date_end,
skipass_type: checkResult.results['30-2167-26-72093'].data.type_name
}
]
}
]
})
});
}
Обробка помилок
Можливі помилки:
| Помилка | HTTP Status | Опис |
|---|---|---|
Поле 'skipass_number' обов'язкове |
400 | Не передано номер скіпасу |
Поле 'skipass_numbers' має бути масивом |
400 | Невірний формат даних |
Скіпас не знайдено в системі Bukovel |
400 | Скіпас не існує |
Timeout: API Bukovel не відповідає |
400 | Зовнішнє API недоступне |
Помилка зв'язку з API |
400 | Проблеми з мережею |
Примітки
- ✅ Вимагає аутентифікації (Token)
- ⚡ Кожен скіпас перевіряється окремим запитом до Bukovel API
- 🕒 Таймаут для зовнішніх запитів: 10 секунд
- 📝 Всі перевірки логуються в журналі аудиту
- 🔄 Рекомендується перевіряти скіпаси перед створенням уроків/бронювань