shopee-v2-api
Version:
372 lines (338 loc) • 12.4 kB
JavaScript
/* -------------------------------------------------------------------------- */
/* Shopee API List */
/* -------------------------------------------------------------------------- */
const _ = require('lodash');
/* -------------------------------------------------------------------------- */
/* Constants */
/* -------------------------------------------------------------------------- */
const {
constants
} = require('./constants');
/* -------------------------------------------------------------------------- */
/* Common / Auth */
/* -------------------------------------------------------------------------- */
const {
buildSignKey,
buildUrl,
get,
post,
RefreshToken
} = require('./auth');
/* -------------------------------------------------------------------------- */
/* API */
/* -------------------------------------------------------------------------- */
exports.GetOrderList = async (userShop, order_status, time_from, time_to, cursor, page_size = 50) => {
try {
// access token 유효 확인
let {
shop_id,
accessToken
} = await RefreshToken(userShop);
// uri
const uri = '/api/v2/order/get_order_list';
// sign key
const {
signKey,
currentTimeStamp
} = buildSignKey(uri, accessToken, shop_id);
// url
const url = buildUrl(uri, {
partner_id: constants.partnerId,
timestamp: currentTimeStamp,
sign: signKey,
access_token: accessToken,
shop_id: shop_id,
time_range_field: 'create_time',
time_from: time_from,
time_to: time_to,
cursor: cursor,
order_status: order_status,
response_optional_fields: 'order_status',
page_size: page_size
});
// request && response data
const responseData = await get(url);
if (responseData.response) {
return {
more: responseData.response.more,
next_cursor: responseData.response.next_cursor,
orders: responseData.response.order_list.map((order) => ({
ordersn: order.order_sn
}))
};
} else {
return null;
}
} catch (err) {
throw err;
}
}
/**
* 주문 상세 정보
* @param {*} userShop
* @param {*} ordersnList
* @returns
*/
exports.GetOrderDetail = async (userShop, ordersnList) => {
try {
// access token 유효 확인
let {
shop_id,
accessToken
} = await RefreshToken(userShop);
// uri
const uri = '/api/v2/order/get_order_detail';
// sign key
const {
signKey,
currentTimeStamp
} = buildSignKey(uri, accessToken, shop_id);
// url
const url = buildUrl(uri, {
partner_id: constants.partnerId,
timestamp: currentTimeStamp,
sign: signKey,
access_token: accessToken,
shop_id: shop_id,
order_sn_list: ordersnList,
request_order_status_pending: true,
response_optional_fields: [
'buyer_user_id', 'buyer_username', 'estimated_shipping_fee', 'recipient_address', 'actual_shipping_fee',
'goods_to_declare', 'note', 'note_update_time', 'item_list', 'pay_time', 'dropshipper', 'dropshipper_phone', 'split_up',
'buyer_cancel_reason', 'cancel_by', 'cancel_reason', 'actual_shipping_fee_confirmed', 'buyer_cpf_id', 'fulfillment_flag',
'pickup_done_time', 'package_list', 'shipping_carrier', 'payment_method', 'total_amount', 'invoice_data',
'checkout_shipping_carrier', 'reverse_shipping_fee', 'order_chargeable_weight_gram', 'return_request_due_date', 'edt'
]
});
// request && response data
const responseData = await get(url);
if (responseData.response && responseData.response.order_list) {
return responseData.response.order_list.map((order) => ({
ordersn: order.order_sn,
order_status: order.order_status,
update_time: order.update_time,
country: order.region,
currency: order.currency,
cod: order.cod,
days_to_ship: order.days_to_ship,
recipient_address: {
name: order.recipient_address.name,
phone: order.recipient_address.phone,
town: order.recipient_address.town,
district: order.recipient_address.district,
city: order.recipient_address.city,
state: order.recipient_address.state,
country: order.recipient_address.region,
zipcode: order.recipient_address.zipcode,
full_address: order.recipient_address.full_address,
},
estimated_shipping_cost: order.estimated_shipping_fee,
actual_shipping_cost: order.actual_shipping_fee,
total_amount: order.total_amount,
shipping_carrier: order.shipping_carrier,
checkout_shipping_carrier: order.checkout_shipping_carrier,
payment_method: order.payment_method,
goods_to_declare: order.goods_to_declare,
message_to_seller: order.message_to_seller,
note: order.note,
note_update_time: order.note_update_time,
create_time: order.create_time,
pending_terms: order.pending_terms,
items: order.item_list.map((item) => ({
item_id: item.item_id,
item_name: item.item_name,
item_sku: item.item_sku,
variation_id: item.model_id,
variation_name: item.model_name,
variation_sku: item.model_sku,
variation_quantity_purchased: item.model_quantity_purchased,
variation_original_price: item.model_original_price,
variation_discounted_price: item.model_discounted_price,
is_wholesale: item.wholesale,
weight: item.weight,
is_add_on_deal: item.add_on_deal,
is_main_item: item.main_item,
add_on_deal_id: item.add_on_deal_id,
order_item_id: item.order_item_id,
group_id: item.promotion_group_id,
promotion_type: item.promotion_type,
promotion_id: item.promotion_id,
product_location_id: item.product_location_id,
images: [item.image_info.image_url]
})),
pay_time: order.pay_time,
dropshipper: order.dropshipper,
buyer_user_id: order.buyer_user_id,
buyer_username: order.buyer_username,
buyer_cpf_id: order.buyer_cpf_id,
dropshipper_phone: order.dropshipper_phone,
is_split_up: order.split_up,
ship_by_date: order.ship_by_date,
buyer_cancel_reason: order.buyer_cancel_reason,
is_actual_shipping_fee_confirmed: order.actual_shipping_fee_confirmed,
cancel_by: order.cancel_by,
cancel_reason: order.cancel_reason,
order_flag: order.fulfillment_flag,
reverse_shipping_fee: order.reverse_shipping_fee,
plp_number: order.buyer_cpf_id,
package_list: order.package_list,
invoice_data: order.invoice_data
}));
} else {
return [];
}
} catch (err) {
throw err;
}
}
/* --------------------------------- Payment -------------------------------- */
exports.MyIncome = async (userShop, ordersn) => {
try {
// access token 유효 확인
let {
shop_id,
accessToken
} = await RefreshToken(userShop);
// uri
const uri = '/api/v2/payment/get_escrow_detail';
// sign key
const {
signKey,
currentTimeStamp
} = buildSignKey(uri, accessToken, shop_id);
// url
const url = buildUrl(uri, {
partner_id: constants.partnerId,
timestamp: currentTimeStamp,
sign: signKey,
access_token: accessToken,
shop_id: shop_id,
order_sn: ordersn
});
// request && response data
const responseData = await get(url);
if (responseData.response && responseData.response.order_income) {
return responseData.response.order_income;
} else {
return null;
}
} catch (err) {
throw err;
}
}
/**
* Split order
* @param {*} userShop
* @param {*} ordersn
* @param {*} packageList
* @returns
*/
exports.SplitOrder = async (userShop, ordersn, packageList) => {
try {
// access token 유효 확인
let {
shop_id,
accessToken
} = await RefreshToken(userShop);
// uri
const uri = '/api/v2/order/split_order';
// sign key
const {
signKey,
currentTimeStamp
} = buildSignKey(uri, accessToken, shop_id);
// url
const url = buildUrl(uri, {
partner_id: constants.partnerId,
timestamp: currentTimeStamp,
sign: signKey,
access_token: accessToken,
shop_id: shop_id
});
// request
const body = {
order_sn: ordersn,
package_list: packageList,
};
// response data
const responseData = await post(url, JSON.stringify(body));
return responseData;
} catch (err) {
throw err;
}
}
/**
* un split order
* @param {*} userShop
* @param {*} ordersn
* @param {*} packageList
* @returns
*/
exports.UnSplitOrder = async (userShop, ordersn) => {
try {
// access token 유효 확인
let {
shop_id,
accessToken
} = await RefreshToken(userShop);
// uri
const uri = '/api/v2/order/unsplit_order';
// sign key
const {
signKey,
currentTimeStamp
} = buildSignKey(uri, accessToken, shop_id);
// url
const url = buildUrl(uri, {
partner_id: constants.partnerId,
timestamp: currentTimeStamp,
sign: signKey,
access_token: accessToken,
shop_id: shop_id
});
// request
const body = {
order_sn: ordersn
};
// response data
const responseData = await post(url, JSON.stringify(body));
return responseData;
} catch (err) {
throw err;
}
}
exports.GetBuyerInvoice = async (userShop, ordersn) => {
try {
// access token 유효 확인
let {
shop_id,
accessToken
} = await RefreshToken(userShop);
// uri
const uri = '/api/v2/order/get_buyer_invoice_info';
// sign key
const {
signKey,
currentTimeStamp
} = buildSignKey(uri, accessToken, shop_id);
// url
const url = buildUrl(uri, {
partner_id: constants.partnerId,
timestamp: currentTimeStamp,
sign: signKey,
access_token: accessToken,
shop_id: shop_id
});
// request
const body = {
queries: [
{ order_sn: ordersn }
]
};
// response data
const responseData = await post(url, JSON.stringify(body));
return responseData;
} catch (err) {
throw err;
}
}