Important
API của bên SPX có thể thay đổi bất kỳ lúc nào, this code is provided AS-IS and is for educational purposes.
Tham số bạn cần thay vào là TRACKING_ID (mã vận đơn).
Mã này có thể có tiền tố SPXVN (đơn nội địa) hoặc VN (đơn quốc tế - SPX International)
curl 'https://spx.vn/shipment/order/open/order/get_order_info?spx_tn=TRACKING_ID&language_code=vi' \
-X GET \
-H 'accept: application/json, text/plain, */*' \
-H 'accept-language: en-US,en;q=0.9' \
-H 'cookie: spx_token=0; spx_sid=0; login_status=true; nss_sys_type=true; nss_cid=VN' \
-H 'dnt: 1' \
-H 'priority: u=1, i' \
-H 'referer: https://spx.vn/track' \
-H 'sec-ch-ua: "Not?A_Brand";v="99", "Chromium";v="XX"' \
-H 'sec-ch-ua-mobile: ?0' \
-H 'sec-ch-ua-platform: "Windows"' \
-H 'sec-fetch-dest: empty' \
-H 'sec-fetch-mode: cors' \
-H 'sec-fetch-site: same-origin' \
-H 'sec-gpc: 1' \
-H 'user-agent: Mozilla/5.0 (Platform) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36'
const url = `https://spx.vn/shipment/order/open/order/get_order_info?spx_tn=${tracking_id}&language_code=vi`;
const options = {
method: 'GET',
headers: {
accept: 'application/json, text/plain, */*',
'accept-language': 'en-US,en;q=0.9',
cookie: 'spx_token=0; spx_sid=0; login_status=true; nss_sys_type=true; nss_cid=VN',
dnt: '1',
priority: 'u=1, i',
referer: 'https://spx.vn/track',
'sec-ch-ua': '"Not?A_Brand";v="99", "Chromium";v="XX"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-origin',
'sec-gpc': '1',
'user-agent': 'Mozilla/5.0 (Platform) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36'
}
}
try {
const response = await fetch(url, options)
const data = await response.json()
// ^^ this is what we are looking for !!
} catch (error) {
console.error('upstream API error?')
console.error(error)
}{
"retcode": 0,
"data": {
"fulfillment_info": {
"deliver_type": 1
},
"sls_tracking_info": {
"sls_tn": "XXXX",
"client_order_id": "XXXX",
"receiver_name": "",
"receiver_type_name": "",
"records": [
{
"tracking_code": "F541",
"tracking_name": "Loaded to Truck in Sorting Centre",
"description": "Đơn hàng đã lên xe trung chuyển",
"display_flag": 0,
"actual_time": 1757515327,
"reason_code": "R00",
"reason_desc": "R00",
"epod": "",
"pin_code": "",
"current_location": {
"location_name": "",
"location_type_name": "",
"lng": "",
"lat": "",
"full_address": ""
},
"next_location": {
"location_name": "",
"location_type_name": "",
"lng": "",
"lat": "",
"full_address": ""
},
"display_flag_v2": 1,
"buyer_description": "Đơn hàng đã lên xe trung chuyển",
"seller_description": "Đơn hàng đã lên xe trung chuyển",
"milestone_code": 5,
"milestone_name": "In transit"
},
{
"tracking_code": "F515",
"tracking_name": "Packed in Domestic Sorting Centre",
"description": "Đơn hàng đã được phân loại và sẵn sàng trung chuyển đến điểm kế tiếp",
"display_flag": 0,
"actual_time": 1757484225,
"reason_code": "R00",
"reason_desc": "R00",
"epod": "",
"pin_code": "",
"current_location": {
"location_name": "",
"location_type_name": "",
"lng": "",
"lat": "",
"full_address": ""
},
"next_location": {
"location_name": "",
"location_type_name": "",
"lng": "",
"lat": "",
"full_address": ""
},
"display_flag_v2": 1,
"buyer_description": "Đơn hàng đã được phân loại và sẵn sàng trung chuyển đến điểm kế tiếp",
"seller_description": "Đơn hàng đã được phân loại và sẵn sàng trung chuyển đến điểm kế tiếp",
"milestone_code": 5,
"milestone_name": "In transit"
},
{
"tracking_code": "F510",
"tracking_name": "Enter Domestic Sorting Center",
"description": "Đơn hàng đã đến kho BN A Mega SOC",
"display_flag": 1,
"actual_time": 1757479429,
"reason_code": "R00",
"reason_desc": "R00",
"epod": "",
"pin_code": "",
"current_location": {
"location_name": "BN A Mega SOC",
"location_type_name": "",
"lng": "105.972926",
"lat": "21.085560",
"full_address": "VN Bắc Ninh Thị Xã Từ Sơn Xã Phù Chẩn Lô số 051/052/053/058/059/060, S ố 6, Đường 5, KCN, Đô thị và Dịch vụ VSIP Bắc Ninh, Xã Phù Chẩn, Thành phố Từ Sơn, Tỉnh Bắc Ninh, Việt Nam"
},
"next_location": {
"location_name": "XXXX",
"location_type_name": "",
"lng": "XXXX",
"lat": "XXXX",
"full_address": ""
},
"display_flag_v2": 13,
"buyer_description": "Đơn hàng đã đến kho Phường Phù Chẩn, Bắc Ninh",
"seller_description": "Đơn hàng đã đến kho phân loại BN A Mega SOC",
"milestone_code": 5,
"milestone_name": "In transit"
},
{
"tracking_code": "F440",
"tracking_name": "Enter Domestic First Mile Hub",
"description": "Đơn hàng đã đến kho ",
"display_flag": 1,
"actual_time": 1757478882,
"reason_code": "R00",
"reason_desc": "R00",
"epod": "",
"pin_code": "",
"current_location": {
"location_name": "",
"location_type_name": "",
"lng": "",
"lat": "",
"full_address": ""
},
"next_location": {
"location_name": "",
"location_type_name": "",
"lng": "",
"lat": "",
"full_address": ""
},
"display_flag_v2": 13,
"buyer_description": "Đơn hàng đã đến bưu cục ",
"seller_description": "Đơn hàng đã đến bưu cục ",
"milestone_code": 5,
"milestone_name": "In transit"
},
{
"tracking_code": "F450",
"tracking_name": "Left Domestic First Mile Hub",
"description": "Đơn hàng đã xuất khỏi kho ",
"display_flag": 0,
"actual_time": 1757470574,
"reason_code": "R00",
"reason_desc": "R00",
"epod": "",
"pin_code": "",
"current_location": {
"location_name": "",
"location_type_name": "",
"lng": "",
"lat": "",
"full_address": ""
},
"next_location": {
"location_name": "BN A Mega SOC",
"location_type_name": "",
"lng": "105.976847",
"lat": "21.074560",
"full_address": "VN Bắc Ninh Thị Xã Từ Sơn Xã Phù Chẩn Lô số 051/052/053/058/059/060, S ố 6, Đường 5, KCN, Đô thị và Dịch vụ VSIP Bắc Ninh, Xã Phù Chẩn, Thành phố Từ Sơn, Tỉnh Bắc Ninh, Việt Nam"
},
"display_flag_v2": 5,
"buyer_description": "Đơn hàng đã rời bưu cục",
"seller_description": "Đơn hàng đã rời bưu cục ",
"milestone_code": 5,
"milestone_name": "In transit"
},
{
"tracking_code": "F441",
"tracking_name": "Loaded to Truck in First Mile Hub",
"description": "Đơn hàng đã lên xe trung chuyển",
"display_flag": 0,
"actual_time": 1757470553,
"reason_code": "R00",
"reason_desc": "R00",
"epod": "",
"pin_code": "",
"current_location": {
"location_name": "",
"location_type_name": "",
"lng": "",
"lat": "",
"full_address": ""
},
"next_location": {
"location_name": "",
"location_type_name": "",
"lng": "",
"lat": "",
"full_address": ""
},
"display_flag_v2": 1,
"buyer_description": "Đơn hàng đã lên xe trung chuyển",
"seller_description": "Đơn hàng đã lên xe trung chuyển",
"milestone_code": 5,
"milestone_name": "In transit"
},
{
"tracking_code": "F445",
"tracking_name": "Packed in First Mile Hub",
"description": "Đơn hàng đã được phân loại và sẵn sàng trung chuyển đến điểm kế tiếp",
"display_flag": 0,
"actual_time": 1757434645,
"reason_code": "R00",
"reason_desc": "R00",
"epod": "",
"pin_code": "",
"current_location": {
"location_name": "",
"location_type_name": "",
"lng": "",
"lat": "",
"full_address": ""
},
"next_location": {
"location_name": "",
"location_type_name": "",
"lng": "",
"lat": "",
"full_address": ""
},
"display_flag_v2": 1,
"buyer_description": "Đơn hàng đã được phân loại và sẵn sàng trung chuyển đến điểm kế tiếp",
"seller_description": "Đơn hàng đã được phân loại và sẵn sàng trung chuyển đến điểm kế tiếp",
"milestone_code": 5,
"milestone_name": "In transit"
},
{
"tracking_code": "F440",
"tracking_name": "Enter Domestic First Mile Hub",
"description": "Đơn hàng đã đến kho 20-HNI Hoang Mai 3 Hub",
"display_flag": 1,
"actual_time": 1757434518,
"reason_code": "R00",
"reason_desc": "R00",
"epod": "",
"pin_code": "",
"current_location": {
"location_name": "20-HNI Hoang Mai 3 Hub",
"location_type_name": "",
"lng": "105.821691",
"lat": "20.973969",
"full_address": "VN Hà Nội Quận Hoàng Mai Phường Đại Kim Số 32 Đại Từ, Phường Đại Kim, Quận Hoàng Mai, Hà Nội"
},
"next_location": {
"location_name": "BN A Mega SOC",
"location_type_name": "",
"lng": "105.976847",
"lat": "21.074560",
"full_address": "VN Bắc Ninh Thị Xã Từ Sơn Xã Phù Chẩn Lô số 051/052/053/058/059/060, S ố 6, Đường 5, KCN, Đô thị và Dịch vụ VSIP Bắc Ninh, Xã Phù Chẩn, Thành phố Từ Sơn, Tỉnh Bắc Ninh, Việt Nam"
},
"display_flag_v2": 13,
"buyer_description": "Đơn hàng đã đến bưu cục Phường Đại Kim, Hà Nội",
"seller_description": "Đơn hàng đã đến bưu cục 20-HNI Hoang Mai 3 Hub",
"milestone_code": 5,
"milestone_name": "In transit"
},
{
"tracking_code": "F100",
"tracking_name": "Pickup From Domestic Seller",
"description": "Đơn vị vận chuyển lấy hàng thành công",
"display_flag": 1,
"actual_time": 1757417845,
"reason_code": "R00",
"reason_desc": "R00",
"epod": "",
"pin_code": "",
"current_location": {
"location_name": "",
"location_type_name": "",
"lng": "",
"lat": "",
"full_address": ""
},
"next_location": {
"location_name": "",
"location_type_name": "",
"lng": "",
"lat": "",
"full_address": ""
},
"display_flag_v2": 13,
"buyer_description": "Đơn vị vận chuyển lấy hàng thành công",
"seller_description": "Đơn vị vận chuyển lấy hàng thành công",
"milestone_code": 5,
"milestone_name": "In transit"
},
{
"tracking_code": "F000",
"tracking_name": "Manifested",
"description": " Người gửi đang chuẩn bị hàng",
"display_flag": 1,
"actual_time": 1757412280,
"reason_code": "",
"reason_desc": "",
"epod": "",
"pin_code": "",
"current_location": {
"location_name": "",
"location_type_name": "",
"lng": "",
"lat": "",
"full_address": ""
},
"next_location": {
"location_name": "",
"location_type_name": "",
"lng": "",
"lat": "",
"full_address": ""
},
"display_flag_v2": 13,
"buyer_description": "Người gửi đang chuẩn bị hàng",
"seller_description": " Người gửi đang chuẩn bị hàng",
"milestone_code": 1,
"milestone_name": "Preparing to ship"
},
{
"tracking_code": "A000",
"tracking_name": "SLSTN Created",
"description": "SLSTN đã được tạo, đang gửi yêu cầu đến đối tác vận chuyển",
"display_flag": 0,
"actual_time": 1757412279,
"reason_code": "",
"reason_desc": "",
"epod": "",
"pin_code": "",
"current_location": {
"location_name": "",
"location_type_name": "",
"lng": "",
"lat": "",
"full_address": ""
},
"next_location": {
"location_name": "",
"location_type_name": "",
"lng": "",
"lat": "",
"full_address": ""
},
"display_flag_v2": 0,
"buyer_description": "SLSTN đã được tạo, đang gửi yêu cầu đến đối tác vận chuyển",
"seller_description": "SLSTN đã được tạo, đang gửi yêu cầu đến đối tác vận chuyển",
"milestone_code": 1,
"milestone_name": "Preparing to ship"
}
]
},
"is_instant_order": false,
"is_shopee_market_order": true
},
"message": "success",
"detail": "",
"debug": ""
}Mình thấy API trả về khá nhiều thứ thừa thãi. Thực tế nếu bạn chỉ cần làm tracking đơn giản thì những event ở dưới là đủ cho bạn filter (tracking_name trong entry của records). Bạn cũng có thể dùng tracking_code, nhìn đỡ bẩn mắt hơn cách mình làm khá nhiều 🙂
SLSTN Created/A000: Đơn hàng được tạo và ghi nhận trên hệ thống.Dropoff Done By Domestic Seller/F100: Đơn vị vận chuyển lấy hàng từ người bán.Transit Warehouse Inbound/F200: Như trên, nhưng dành cho đơn hàng quốc tế
Enter Domestic Sorting Center/F510: Đơn hàng đang ở kho phân loại (ví dụ như ở miền Bắc làBN B Mega SOC)Enter Last Mile Hub/F599: Đơn hàng tới bưu cục gần người nhận nhất.Delivered/F980: Đơn hàng đã được giao thành công.