UNPKG

shopee-v2-api

Version:

296 lines (262 loc) 6.72 kB
/* -------------------------------------------------------------------------- */ /* Imports */ /* -------------------------------------------------------------------------- */ const FormData = require('form-data'); const _ = require('lodash'); /* -------------------------------------------------------------------------- */ /* Constants */ /* -------------------------------------------------------------------------- */ const { constants } = require('./constants'); /* -------------------------------------------------------------------------- */ /* Common / Auth */ /* -------------------------------------------------------------------------- */ const { buildSignKey, buildUrl, get, post, postFile, RefreshToken } = require('./auth'); /* -------------------------------------------------------------------------- */ /* API */ /* -------------------------------------------------------------------------- */ /* ------------------------------- Chat ------------------------------ */ /** * 대화 목록 * @param {*} userShop * @param {*} direction * @param {*} type * @param {*} pageSize * @param {*} nextTimestamp * @returns */ exports.GetConversationList = async (userShop, direction = 'latest', type = 'all', pageSize = 60, nextTimestamp = null) => { try { // access token 유효 확인 let { shop_id, accessToken } = await RefreshToken(userShop); // uri const uri = '/api/v2/sellerchat/get_conversation_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, direction: direction, type: type, page_size: pageSize, nextTimestamp: nextTimestamp }); // request && response data const responseData = await get(url); return responseData; } catch (err) { throw err; } } /** * 대화 정보 * @param {*} userShop * @param {*} conversationId * @returns */ exports.GetConversationOne = async (userShop, conversationId) => { try { // access token 유효 확인 let { shop_id, accessToken } = await RefreshToken(userShop); // uri const uri = '/api/v2/sellerchat/get_one_conversation'; // 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, conversation_id: conversationId }); // request && response data const responseData = await get(url); return responseData; } catch (err) { throw err; } } /** * 메세지 목록 * @param {*} userShop * @param {*} conversationId * @param {*} offset * @param {*} pageSize * @returns */ exports.GetMessage = async (userShop, conversationId, offset, pageSize = 60) => { try { // access token 유효 확인 let { shop_id, accessToken } = await RefreshToken(userShop); // uri const uri = '/api/v2/sellerchat/get_message'; // 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, conversation_id: conversationId, offset: offset, pageSize: pageSize }); // request && response data const responseData = await get(url); return responseData; } catch (err) { throw err; } } /** * 메세지 등록 * @param {*} userShop * @param {*} toId * @param {*} messageType: text, image, sticker, item, order * @param {any} content: {text: 'text', image_url: 'image_url', sticker_id: 'sticker_id', sticker_package_id: 'sticker_package_id', item_id: 'item_id', order_sn: 'order_sn'} * @returns */ exports.SendMessage = async (userShop, toId, messageType = 'text', content) => { try { // access token 유효 확인 let { shop_id, accessToken } = await RefreshToken(userShop); // uri const uri = '/api/v2/sellerchat/send_message'; // 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({ to_id: toId, message_type: messageType, content: content })); return responseData; } catch (err) { throw err; } } /** * 채팅 이미지 업로드 * @param {*} userShop * @param {*} imageFile * @returns */ exports.uploadChatImage = async (userShop, imageFile) => { try { // access token 유효 확인 let { shop_id, accessToken } = await RefreshToken(userShop); // uri const uri = '/api/v2/sellerchat/upload_image'; // 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, }); // form data const formData = new FormData(); formData.append('file', imageFile, currentTimeStamp.toString()); // request && response data const responseData = await postFile(url, formData); return responseData; } catch (err) { throw err; } } /** * 자동 응답 메세지 등록 * @param {*} userShop * @param {*} toId * @param {*} content : {text: 'text'} * @returns */ exports.SendAutoReplyMessage = async (userShop, toId, content) => { try { // access token 유효 확인 let { shop_id, accessToken } = await RefreshToken(userShop); // uri const uri = '/api/v2/sellerchat/send_autoreply_message'; // 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({ to_id: toId, content: content })); return responseData; } catch (err) { throw err; } }