UNPKG

shopee-v2-api

Version:

334 lines (300 loc) 9.7 kB
/* -------------------------------------------------------------------------- */ /* 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; } }