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ờ
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)