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)
API Mini App Documentation
Tài liệu hướng dẫn tích hợp API cho ứng dụng Mini App của Sóc Đỏ. Cung cấp các endpoint để phát triển ứng dụng di động với đầy đủ tính năng.
Base URL: https://api.socdo.vn/mini-app/v1/
Ví dụ tích hợp cơ bản
// Khởi tạo Mini App
const miniApp = new SocdoMiniApp({
    appId: 'your-app-id',
    secretKey: 'your-secret-key',
    environment: 'production' // hoặc 'sandbox'
});

// Xác thực người dùng
const authResult = await miniApp.auth.login({
    phone: '0123456789',
    password: 'password123'
});

// Lấy danh sách sản phẩm
const products = await miniApp.products.list({
    page: 1,
    limit: 20,
    category: 'electronics'
});
                        
Response mẫu
{
    "success": true,
    "data": {
        "products": [
            {
                "id": 1,
                "name": "iPhone 15 Pro",
                "price": 29990000,
                "image": "https://example.com/image.jpg",
                "category": "electronics"
            }
        ],
        "pagination": {
            "page": 1,
            "limit": 20,
            "total": 100
        }
    },
    "message": "Lấy danh sách sản phẩm thành công"
}