esnekpos
Version:
Node.js entegrasyon paketi - EsnekPOS ödeme sistemi için resmi olmayan istemci
195 lines (172 loc) • 5.65 kB
JavaScript
/**
* Sorgulama servisi
*/
const { validateProcessQueryRequest } = require('../validators');
const { makeRequest } = require('../helpers/request');
const { ENDPOINTS } = require('../constants');
class QueryService {
/**
* Sorgulama servisini başlatır
* @param {EsnekPOSClient} client - EsnekPOS istemcisi
*/
constructor(client) {
this.client = client;
}
/**
* İşlem durumu sorgular
* @param {string} orderRefNumber - Sipariş referans numarası
* @returns {Promise<Object>} - Sorgu sonucu
*/
async queryTransaction(orderRefNumber) {
const request = {
MERCHANT: this.client.config.merchant,
MERCHANT_KEY: this.client.config.merchantKey,
ORDER_REF_NUMBER: orderRefNumber
};
validateProcessQueryRequest(request);
return makeRequest({
baseUrl: this.client.baseUrl,
endpoint: ENDPOINTS.PROCESS_QUERY,
data: request
});
}
/**
* İşlem durumu detaylı sorgular
* @param {string} orderRefNumber - Sipariş referans numarası
* @returns {Promise<Object>} - Sorgu sonucu
*/
async queryTransactionDetail(orderRefNumber) {
const request = {
MERCHANT: this.client.config.merchant,
MERCHANT_KEY: this.client.config.merchantKey,
ORDER_REF_NUMBER: orderRefNumber
};
return makeRequest({
baseUrl: this.client.baseUrl,
endpoint: ENDPOINTS.PROCESS_QUERY_DETAIL,
data: request
});
}
/**
* İşlemleri listeler
* @param {Object} options - Filtreleme seçenekleri
* @param {string} options.startDate - Başlangıç tarihi (GG-AA-YYYY)
* @param {string} options.endDate - Bitiş tarihi (GG-AA-YYYY)
* @returns {Promise<Object>} - İşlem listesi
*/
async listTransactions(options) {
const request = {
MERCHANT: this.client.config.merchant,
MERCHANT_KEY: this.client.config.merchantKey,
START_DATE: options.startDate,
END_DATE: options.endDate
};
return makeRequest({
baseUrl: this.client.baseUrl,
endpoint: ENDPOINTS.PAYMENT_LIST,
data: request
});
}
/**
* Taksit seçeneklerini sorgular
* @param {Object} options - Sorgulama seçenekleri
* @param {string} options.amount - Tutar
* @param {string} [options.bin] - Kart BIN numarası (ilk 6 hane)
* @param {number} [options.commissionForCustomer] - Komisyon müşteriye mi yansıtılacak (0: hayır, 1: evet)
* @returns {Promise<Object>} - Taksit seçenekleri
*/
async getInstallmentOptions(options) {
const request = {
MERCHANT: this.client.config.merchant,
MERCHANT_KEY: this.client.config.merchantKey,
AMOUNT: options.amount
};
if (options.bin) {
request.BIN = options.bin;
}
if (options.commissionForCustomer !== undefined) {
request.COMMISSION_FOR_CUSTOMER = options.commissionForCustomer;
}
return makeRequest({
baseUrl: this.client.baseUrl,
endpoint: ENDPOINTS.INSTALLMENTS,
data: request
});
}
/**
* Üye işyeri bakiyesini sorgular
* @param {Object} options - Sorgulama seçenekleri
* @param {string} options.currency - Para birimi (TRY, USD, EUR, GBP)
* @param {string} [options.subMerchantExternalId] - Pazaryeri alt üye işyeri ID'si
* @returns {Promise<Object>} - Bakiye bilgisi
*/
async getDealerBalance(options) {
const request = {
MERCHANT: this.client.config.merchant,
MERCHANT_KEY: this.client.config.merchantKey,
CURRENCY: options.currency,
DEALER_SUB_EXTERNAL_ID: options.subMerchantExternalId || null
};
return makeRequest({
baseUrl: this.client.baseUrl,
endpoint: ENDPOINTS.DEALER_BALANCE,
data: request
});
}
/**
* Kart BIN bilgisini sorgular
* @param {string} cardBin - Kart BIN numarası (ilk 6 hane)
* @returns {Promise<Object>} - BIN bilgisi
*/
async getBinInfo(cardBin) {
const request = {
CardNumber: cardBin
};
return makeRequest({
baseUrl: this.client.baseUrl,
endpoint: ENDPOINTS.BIN_SERVICE,
data: request
});
}
/**
* Dekont listesini sorgular
* @param {Object} options - Sorgulama seçenekleri
* @param {string} options.startDate - Başlangıç tarihi (YYYY-AA-GG)
* @param {string} options.endDate - Bitiş tarihi (YYYY-AA-GG)
* @returns {Promise<Object>} - Dekont listesi
*/
async getReceiptList(options) {
const request = {
MERCHANT: this.client.config.merchant,
MERCHANT_KEY: this.client.config.merchantKey,
START_DATE: options.startDate,
END_DATE: options.endDate
};
return makeRequest({
baseUrl: this.client.baseUrl,
endpoint: ENDPOINTS.RECEIPT_LIST,
data: request
});
}
/**
* Transfer listesini sorgular
* @param {Object} options - Sorgulama seçenekleri
* @param {string} options.startDate - Başlangıç tarihi (GG-AA-YYYY)
* @param {string} options.endDate - Bitiş tarihi (GG-AA-YYYY)
* @returns {Promise<Object>} - Transfer listesi
*/
async getTransferList(options) {
const request = {
MERCHANT: this.client.config.merchant,
MERCHANT_KEY: this.client.config.merchantKey,
START_DATE: options.startDate,
END_DATE: options.endDate
};
return makeRequest({
baseUrl: this.client.baseUrl,
endpoint: ENDPOINTS.EXTRACT_LIST,
data: request
});
}
}
module.exports = QueryService;