UNPKG

shopee-v2-api

Version:

372 lines (338 loc) 12.4 kB
/* -------------------------------------------------------------------------- */ /* 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; } }