shopee-v2-api
Version:
334 lines (300 loc) • 9.7 kB
JavaScript
/* -------------------------------------------------------------------------- */
/* Imports */
/* -------------------------------------------------------------------------- */
/* -------------------------------------------------------------------------- */
/* Constants */
/* -------------------------------------------------------------------------- */
const {
constants
} = require('./constants');
/* -------------------------------------------------------------------------- */
/* Common / Auth */
/* -------------------------------------------------------------------------- */
const {
buildSignKey,
buildUrl,
get,
post,
RefreshToken
} = require('./auth');
/* -------------------------------------------------------------------------- */
/* API */
/* -------------------------------------------------------------------------- */
/**
* 국내 배송 채널
* @param {*} userShop
* @returns
*/
exports.GetShopFirstMileChannel = async (userShop) => {
try {
// access token 유효 확인
let {
shop_id,
accessToken
} = await RefreshToken(userShop);
// uri
const uri = '/api/v2/first_mile/get_channel_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,
region: 'KR'
});
// request && response data
const responseData = await get(url);
if (responseData.response && responseData.response.logistics_channel_list) {
return responseData.response.logistics_channel_list.map((logistic) => ({
logistic_id: logistic.logistics_channel_id,
logistic_name: logistic.logistics_channel_name,
shipment_method: logistic.shipment_method
}))
} else {
return [];
}
} catch (err) {
throw err;
}
}
/**
* 샵 주소
* @param {*} userShop
* @returns
*/
exports.GetAddress = async (userShop) => {
try {
// access token 유효 확인
let {
shop_id,
accessToken
} = await RefreshToken(userShop);
// uri
const uri = '/api/v2/logistics/get_address_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,
});
// request && response data
const responseData = await get(url);
if (responseData.response && responseData.response.address_list) {
return responseData.response.address_list.map((address) => ({
address_id: address.address_id,
country: address.region,
state: address.state,
city: address.city,
address: address.address,
zipcode: address.zipcode,
district: address.district,
town: address.town,
address_flag: address._type
}));
} else {
return [];
}
} catch (err) {
throw err;
}
}
/**
* FM TN 생성
* @param {*} userShop
* @param {*} declareDate
* @param {*} address
* @returns
*/
exports.GenerateFMTrackingNo = async (userShop, declareDate, address) => {
try {
// access token 유효 확인
let {
shop_id,
accessToken
} = await RefreshToken(userShop);
// uri
const uri = '/api/v2/first_mile/generate_first_mile_tracking_number';
// 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 && response data
const responseData = await post(url, JSON.stringify({
declare_date: declareDate,
quantity: 1,
seller_info: address
}));
if (responseData.response && responseData.response.first_mile_tracking_number_list) {
return responseData.response.first_mile_tracking_number_list;
} else {
return null;
}
return {};
} catch (err) {
throw err;
}
}
/**
* FM 추가
* @param {*} userShop
* @param {*} fmTN
* @param {*} method
* @param {*} logisticsId
* @param {*} orderList
* @returns
*/
exports.FirstMileCodeBindOrder = async (userShop, fmTN, method, logisticsId, orderList) => {
try {
// access token 유효 확인
let {
shop_id,
accessToken
} = await RefreshToken(userShop);
// uri
const uri = '/api/v2/first_mile/bind_first_mile_tracking_number';
// 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 && response data
const responseData = await post(url, JSON.stringify({
first_mile_tracking_number: fmTN,
shipment_method: method,
region: 'KR',
logistics_channel_id: logisticsId,
order_list: orderList
}));
return {
fm_tn: responseData.response ? responseData.response.first_mile_tracking_number : null,
success: responseData.response ? true : false,
fail_list: responseData.response ? responseData.response.order_list.filter((order) => order.fail_error) : []
};
} catch (err) {
throw err;
}
}
/**
* FM 제외
* @param {*} userShop
* @param {*} fmTN
* @param {*} orderList
* @returns
*/
exports.FirstMileUnbind = async (userShop, fmTN, orderList) => {
try {
// access token 유효 확인
let {
shop_id,
accessToken
} = await RefreshToken(userShop);
// uri
const uri = '/api/v2/first_mile/unbind_first_mile_tracking_number';
// 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 && response data
const responseData = await post(url, JSON.stringify({
first_mile_tracking_number: fmTN,
order_list: orderList
}));
return {
fm_tn: responseData.response ? responseData.response.first_mile_tracking_number : null,
success: responseData.response ? true : false,
fail_list: responseData.response ? responseData.response.order_list.filter((order) => order.fail_error) : []
};
} catch (err) {
throw err;
}
}
/**
* FM 상세 정보
* @param {*} userShop
* @param {*} fmTN
* @param {*} cursor
* @returns
*/
exports.GetFmTnDetail = async (userShop, fmTN, cursor = '') => {
try {
// access token 유효 확인
let {
shop_id,
accessToken
} = await RefreshToken(userShop);
// uri
const uri = '/api/v2/first_mile/get_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,
first_mile_tracking_number: fmTN,
cursor: cursor
});
// request && response data
const responseData = await get(url);
if (responseData.response && responseData.response.order_list) {
return {
logistic_id: responseData.response.logistics_channel_id,
fm_tn: responseData.response.first_mile_tracking_number,
shipment_method: responseData.response.shipment_method,
status: responseData.response.status,
orders: responseData.response.order_list,
declare_date: responseData.response.declare_date,
more: responseData.response.more,
next_cursor: responseData.response.next_cursor,
}
} else {
return responseData;
}
} catch (err) {
throw err;
}
}