Google Sheets Kết Nối Shopee API: Cập Nhật Đơn Hàng Tự Động
Tại Sao Cần Kết Nối Shopee API?
Quản lý shop Shopee thủ công mất rất nhiều thời gian: copy đơn hàng từ Shopee vào bảng tính, cập nhật tồn kho, theo dõi doanh thu từng ngày. Shopee Open API cho phép lấy dữ liệu này tự động, kết hợp với Google Apps Script để đổ vào Google Sheets.
Điều Kiện Cần Có
- Shop Shopee có đăng ký Shopee Open Platform (miễn phí)
- App ID và App Secret từ Shopee Partner Portal
- Access Token của shop (lấy qua OAuth flow)
Lấy Access Token Shopee
// Bước 1: Tạo URL authorization
function getShopeeAuthUrl() {
const APP_ID = PropertiesService.getScriptProperties().getProperty('SHOPEE_APP_ID');
const redirectUri = encodeURIComponent('https://your-redirect-url.com/callback');
const timestamp = Math.floor(Date.now() / 1000);
return `https://partner.shopeemobile.com/api/v2/shop/auth_partner`
+ `?id=${APP_ID}×tamp=${timestamp}&redirect_url=${redirectUri}`;
}
// Bước 2: Sau khi user authorize, lấy access token
function getAccessToken(code, shopId) {
const APP_ID = PropertiesService.getScriptProperties().getProperty('SHOPEE_APP_ID');
const APP_SECRET = PropertiesService.getScriptProperties().getProperty('SHOPEE_APP_SECRET');
const timestamp = Math.floor(Date.now() / 1000);
const path = '/api/v2/auth/token/get';
const sign = generateSign(APP_ID, APP_SECRET, path, timestamp);
const payload = { code, shop_id: parseInt(shopId), partner_id: parseInt(APP_ID) };
const response = UrlFetchApp.fetch(
`https://partner.shopeemobile.com${path}?id=${APP_ID}×tamp=${timestamp}&sign=${sign}`,
{
method: 'POST',
contentType: 'application/json',
payload: JSON.stringify(payload)
}
);
return JSON.parse(response.getContentText());
}
Fetch Đơn Hàng Từ Shopee
function fetchShopeeOrders() {
const APP_ID = PropertiesService.getScriptProperties().getProperty('SHOPEE_APP_ID');
const APP_SECRET = PropertiesService.getScriptProperties().getProperty('SHOPEE_APP_SECRET');
const ACCESS_TOKEN = PropertiesService.getScriptProperties().getProperty('SHOPEE_ACCESS_TOKEN');
const SHOP_ID = PropertiesService.getScriptProperties().getProperty('SHOPEE_SHOP_ID');
const timestamp = Math.floor(Date.now() / 1000);
const path = '/api/v2/order/get_order_list';
const sign = generateSign(APP_ID, APP_SECRET, path, timestamp, ACCESS_TOKEN, SHOP_ID);
// Lấy đơn hàng 7 ngày gần nhất
const timeFrom = timestamp - 7 * 24 * 60 * 60;
const url = `https://partner.shopeemobile.com${path}`
+ `?access_token=${ACCESS_TOKEN}`
+ `&partner_id=${APP_ID}`
+ `&shop_id=${SHOP_ID}`
+ `×tamp=${timestamp}`
+ `&sign=${sign}`
+ `&time_range_field=create_time`
+ `&time_from=${timeFrom}`
+ `&time_to=${timestamp}`
+ `&page_size=100`;
const response = JSON.parse(UrlFetchApp.fetch(url).getContentText());
if (response.error) {
throw new Error(`Shopee API error: ${response.message}`);
}
return response.response.order_list;
}
function syncOrdersToSheets() {
const orders = fetchShopeeOrders();
const sheet = SpreadsheetApp.getActiveSpreadsheet()
.getSheetByName('DonHangShopee');
orders.forEach(order => {
// Kiểm tra đơn hàng đã tồn tại chưa (upsert by order_sn)
const existingRow = findRowByOrderSn(sheet, order.order_sn);
const rowData = [
order.order_sn,
new Date(order.create_time * 1000),
order.order_status,
order.total_amount / 100000, // Shopee trả về đơn vị xu
order.buyer_username,
order.shipping_carrier,
order.item_list?.map(i => i.item_name).join(', ') || ''
];
if (existingRow > 0) {
sheet.getRange(existingRow, 1, 1, rowData.length).setValues([rowData]);
} else {
sheet.appendRow(rowData);
}
});
console.log(`Synced ${orders.length} orders from Shopee`);
}
Dashboard Doanh Thu Shopee
Sau khi sync dữ liệu, tạo báo cáo tự động:
// Doanh thu theo ngày
=SUMIFS(DonHangShopee!D:D, TEXT(DonHangShopee!B:B,"DD/MM/YYYY"), TEXT(TODAY(),"DD/MM/YYYY"), DonHangShopee!C:C, "COMPLETED")
// Số đơn theo trạng thái
=COUNTIF(DonHangShopee!C:C, "READY_TO_SHIP")
Câu Hỏi Thường Gặp (FAQ)
Shopee API có miễn phí không?
Shopee Open Platform và API call cơ bản miễn phí cho seller. Chỉ cần đăng ký tài khoản Partner và tạo ứng dụng trên Shopee Partner Portal.
Access token hết hạn sau bao lâu?
Access token Shopee hết hạn sau 4 giờ. Cần dùng Refresh Token (hạn 30 ngày) để lấy token mới. Script nên tự động refresh token trước khi gọi API.
Có thể cập nhật tồn kho ngược lại từ Google Sheets lên Shopee không?
Có. Dùng Shopee API endpoint product.update_stock để cập nhật số lượng tồn kho. Tuy nhiên cần cẩn thận vì sai sót có thể gây oversell.
Chia sẻ bài viết:
Tuân Hoang
Đội ngũ SheetStore
Bạn thấy bài viết hữu ích?
Đăng ký nhận thông báo khi có bài viết mới.