UNPKG

shopee-v2-api

Version:

324 lines (287 loc) 9.03 kB
/* -------------------------------------------------------------------------- */ /* Imports */ /* -------------------------------------------------------------------------- */ const _ = require('lodash'); /* -------------------------------------------------------------------------- */ /* Constants */ /* -------------------------------------------------------------------------- */ const { constants } = require('./constants'); /* -------------------------------------------------------------------------- */ /* Common / Auth */ /* -------------------------------------------------------------------------- */ const { buildSignKey, buildUrl, get, post, RefreshToken } = require('./auth'); /* -------------------------------------------------------------------------- */ /* API */ /* -------------------------------------------------------------------------- */ /** * 배송 채널 목록 * @param {*} userShop * @returns */ exports.GetLogistics = async (userShop) => { try { // access token 유효 확인 let { shop_id, accessToken } = await RefreshToken(userShop); // uri const uri = '/api/v2/logistics/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 }); // request && response data const responseData = await get(url); // 데이터 형식 변경 if (responseData.response && responseData.response.logistics_channel_list) { let result = responseData.response.logistics_channel_list .filter((logistic) => logistic.enabled) .map((logistic) => ({ logistic_id: logistic.logistics_channel_id, logistic_name: logistic.logistics_channel_name, has_cod: logistic.cod_enabled, fee_type: logistic.fee_type, sizes: logistic.size_list, enabled: logistic.enabled, weight_limits: logistic.weight_limit, volume_limits: logistic.item_max_dimension, item_max_dimension: logistic.item_max_dimension, preferred: logistic.preferred, logistics_description: logistic.logistics_description, force_enabled: logistic.force_enabled, mask_channel_id: logistic.mask_channel_id })); return result; } else { return []; } } catch (err) { throw err; } } /** * 주문의 배송 수단 조회 * @param {*} userShop * @param {*} ordersn * @returns */ exports.GetLogisticInfo = async (userShop, ordersn) => { try { // access token 유효 확인 let { shop_id, accessToken } = await RefreshToken(userShop); // uri const uri = '/api/v2/logistics/get_shipping_parameter'; // 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) { return responseData.response; } else { return null; } } catch (err) { throw err; } } /** * 발주(송장번호) 요청 * @param {*} userShop * @param {*} ordersn * @param {*} packageNo * @param {*} method * @returns */ exports.Init = async (userShop, ordersn, method, packageNo = null) => { try { // access token 유효 확인 let { shop_id, accessToken } = await RefreshToken(userShop); // uri const uri = '/api/v2/logistics/ship_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 = _.assign({ order_sn: ordersn, package_number: packageNo, }, method); // response data const responseData = await post(url, JSON.stringify(body)); if (responseData.request_id) { return true; } else { return false; } } catch (err) { throw err; } } /** * 송장 번호 조회 * @param {*} userShop * @param {*} ordersn * @param {*} packageNo * @returns */ exports.GetTrackingNo = async (userShop, ordersn, packageNo = null) => { try { // access token 유효 확인 let { shop_id, accessToken } = await RefreshToken(userShop); // uri const uri = '/api/v2/logistics/get_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, order_sn: ordersn, package_number: packageNo }); // request && response data const responseData = await get(url); if (responseData.response && responseData.response.tracking_number && responseData.response.tracking_number.length > 0) { return responseData.response.tracking_number; } else { return null; } } catch (err) { throw err; } } /** * 배송 조회 * @param {*} userShop * @param {*} ordersn * @param {*} packageNo * @returns */ exports.GetTrackingMessage = async (userShop, ordersn, packageNo = null) => { try { // access token 유효 확인 let { shop_id, accessToken } = await RefreshToken(userShop); // uri const uri = '/api/v2/logistics/get_tracking_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, order_sn: ordersn, package_number: packageNo }); // request && response data const responseData = await get(url); if (responseData.response && responseData.response.order_sn) { return responseData.response.tracking_info; } else { return []; } } catch (err) { throw err; } } exports.GetOrderLogistics = async (userShop, ordersn, packageNo = null) => { try { // access token 유효 확인 let { shop_id, accessToken } = await RefreshToken(userShop); // uri const uri = '/api/v2/logistics/get_shipping_document_data_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, }); const body = { order_sn: ordersn, package_number: packageNo, }; // request && response data const responseData = await post(url, JSON.stringify(body)); if (responseData.response && responseData.response.shipping_document_info) { return responseData.response.shipping_document_info; } else { return null; } } catch (err) { throw err; } }