API Flash Sale
API này cho phép lấy danh sách flash sale với logic timeline chính xác theo hệ thống thực tế. Flash sale được chia thành 3 khung giờ chính và có logic timeline phức tạp.
Ví dụ minh họa: Flash sale theo khung giờ
Ví dụ minh họa: Flash sale theo khung giờ
GET https://api.socdo.vn/v1/flash_sale
Các tham số:
- status: Trạng thái flash sale - 'all' (tất cả), 'active' (đang diễn ra), 'upcoming' (sắp diễn ra), 'expired' (đã hết hạn)
- page: Trang hiện tại (mặc định 1)
- limit: Số lượng flash sale mỗi trang (mặc định 20, tối đa 100)
- shop: ID shop (lọc flash sale theo shop cụ thể)
- timeline: Khung giờ cụ thể - '00:00', '09:00', '16:00' (mặc định timeline hiện tại)
Ví dụ lấy flash sale đang diễn ra bằng cURL:
curl -X GET "https://api.socdo.vn/v1/flash_sale?status=active&page=1&limit=20" -H "Authorization: Bearer <token>"
Ví dụ lấy flash sale theo khung giờ cụ thể bằng cURL:
curl -X GET "https://api.socdo.vn/v1/flash_sale?timeline=09:00&status=active&shop=30" -H "Authorization: Bearer <token>"
Ví dụ kết nối bằng PHP:
<?php
// Lấy flash sale đang diễn ra với timeline logic
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.socdo.vn/v1/flash_sale?" . http_build_query([
"status" => "active",
"page" => 1,
"limit" => 10,
"timeline" => "09:00" // Khung giờ 9h-16h
]));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer <token>"
]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
if ($data["success"]) {
$timeline_info = $data["data"]["timeline_info"];
echo "Timeline hiện tại: " . $timeline_info["current_timeline"] . "\n";
echo "Tổng flash sale: " . $data["data"]["pagination"]["total_deals"] . "\n\n";
foreach ($data["data"]["deals"] as $deal) {
echo "Flash sale: " . $deal["tieu_de"] . "\n";
echo "Trạng thái: " . $deal["deal_status"] . "\n";
echo "Timeline: " . $deal["timeline"] . "\n";
echo "Thời gian còn lại: " . $deal["time_remaining_formatted"] . "\n\n";
}
}
?>
Dữ liệu trả về mẫu:
{
"success": true,
"message": "Lấy danh sách flash sale thành công",
"data": {
"deals": [
{
"id": 15,
"shop": 30,
"tieu_de": "Flash Sale Điện Thoại - Khung giờ sáng",
"main_product": "12345,12346",
"sub_product": "{\"12345\":[{\"gia_cu\":\"20000000\",\"gia\":\"15000000\",\"so_luong\":\"50\"}],\"12346\":[{\"gia_cu\":\"15000000\",\"gia\":\"12000000\",\"so_luong\":\"30\"}]}",
"sub_id": "",
"date_start": "1703123456",
"date_end": "1703209856",
"loai": "flash_sale",
"date_post": "1703123456",
"status": 2,
"timeline": "09:00",
"main_products": [
{
"id": 12345,
"tieu_de": "iPhone 15 Pro Max 256GB",
"minh_hoa": "/uploads/minh-hoa/iphone15-pro-max.jpg",
"gia_cu": 20000000,
"gia_moi": 15000000,
"gia_cu_formatted": "20.000.000",
"gia_moi_formatted": "15.000.000",
"discount_percent": 25,
"image_url": "https://socdo.vn/uploads/minh-hoa/iphone15-pro-max.jpg",
"product_url": "https://socdo.vn/san-pham/12345/iphone-15-pro-max-256gb.html"
}
],
"sub_products": [],
"deal_status": "active",
"timeline": "09:00",
"is_timeline_active": true,
"time_remaining": 86400,
"time_remaining_formatted": "24:00:00",
"date_start_formatted": "21/12/2023 09:00:00",
"date_end_formatted": "22/12/2023 09:00:00",
"date_post_formatted": "21/12/2023 09:00:00",
"timeline_info": {
"current_timeline": "09:00",
"slot_status": {
"00:00": "expired",
"09:00": "active",
"16:00": "upcoming"
},
"timeline_ranges": {
"00:00": {"start": "00:00", "end": "09:00", "description": "Sáng sớm"},
"09:00": {"start": "09:00", "end": "16:00", "description": "Buổi sáng"},
"16:00": {"start": "16:00", "end": "23:59", "description": "Buổi chiều tối"}
}
}
}
],
"pagination": {
"current_page": 1,
"total_pages": 3,
"total_deals": 25,
"limit": 20,
"has_next": true,
"has_prev": false
},
"filters": {
"status": "active",
"shop": 0,
"timeline": "09:00",
"current_timeline": "09:00"
},
"timeline_info": {
"current_timeline": "09:00",
"slot_status": {
"00:00": "expired",
"09:00": "active",
"16:00": "upcoming"
},
"all_timelines": {
"00:00": {"start": "00:00", "end": "09:00", "description": "Sáng sớm"},
"09:00": {"start": "09:00", "end": "16:00", "description": "Buổi sáng"},
"16:00": {"start": "16:00", "end": "23:59", "description": "Buổi chiều tối"}
}
}
}
}
Tính năng chi tiết:
- Timeline logic chính xác: Theo đúng logic hệ thống thực tế với 3 khung giờ
- 3 khung giờ chính: 00:00-09:00, 09:00-16:00, 16:00-23:59
- Trạng thái thông minh: active, upcoming, expired, inactive_timeline
- Thông tin sản phẩm đầy đủ: Main products và sub products với giá flash sale
- Timeline info chi tiết: Trạng thái từng khung giờ và mô tả
- Lọc linh hoạt: Theo shop, timeline, status
- Thời gian còn lại: Tính toán chính xác thời gian còn lại của flash sale
- Phân trang: Hỗ trợ pagination với thông tin chi tiết
Logic Timeline Flash Sale:
- 00:00-09:00: Khung giờ sáng sớm (timeline = '00:00')
- 09:00-16:00: Khung giờ buổi sáng (timeline = '09:00')
- 16:00-23:59: Khung giờ buổi chiều tối (timeline = '16:00')
- timeline = '0' hoặc NULL: Flash sale tự động áp dụng (không theo khung giờ)
- Kiểm tra timeline: API tự động kiểm tra timeline có đang active không
Trạng thái Flash Sale:
- active: Đang diễn ra và timeline đang active
- upcoming: Sắp diễn ra (chưa đến thời gian bắt đầu)
- expired: Đã hết hạn
- inactive_timeline: Đang trong thời gian nhưng timeline không active
Các bảng database liên quan:
- deal: Bảng chính chứa thông tin flash sale
- sanpham: Thông tin sản phẩm trong flash sale
- phanloai_sanpham: Thông tin variant và giá flash sale
Cấu trúc bảng deal:
- id: ID flash sale
- shop: ID shop tạo flash sale
- tieu_de: Tiêu đề flash sale
- main_product: Danh sách ID sản phẩm chính (dạng: "12345,12346")
- sub_product: JSON chứa thông tin variant và giá flash sale
- date_start: Thời gian bắt đầu (timestamp)
- date_end: Thời gian kết thúc (timestamp)
- loai: Loại deal (phải là 'flash_sale')
- timeline: Khung giờ ('00:00', '09:00', '16:00', '0', hoặc NULL)
- status: Trạng thái (2 = đang hoạt động)
Thông tin timeline_info:
- current_timeline: Timeline hiện tại đang active
- slot_status: Trạng thái của từng khung giờ (active/upcoming/expired)
- all_timelines: Thông tin chi tiết tất cả khung giờ
- timeline_ranges: Khoảng thời gian và mô tả của từng khung giờ
Tham số lọc flash sale:
- status: Lọc theo trạng thái (all/active/upcoming/expired)
- timeline: Lọc theo khung giờ cụ thể (00:00/09:00/16:00)
- shop: Lọc theo shop tạo flash sale
- page/limit: Phân trang kết quả
Lưu ý quan trọng:
- Bạn cần lấy token xác thực trước khi gọi API này
- Timeline logic: API tự động xác định timeline hiện tại và kiểm tra trạng thái
- Thời gian: Tất cả thời gian đều tính theo timezone Asia/Ho_Chi_Minh
- Trạng thái: Chỉ flash sale có status=2 mới được hiển thị
- Sub_product: Lưu dạng JSON chứa thông tin variant và giá flash sale
- Main_product: Lưu dạng chuỗi ID sản phẩm cách nhau bởi dấu phẩy
- Timeline = '0' hoặc NULL: Flash sale tự động áp dụng không theo khung giờ
- Thời gian còn lại: Tính theo giây, format thành H:i:s
- Hỗ trợ POST: Tạo flash sale mới (cần validate timeline logic)