UNPKG

esnekpos

Version:

Node.js entegrasyon paketi - EsnekPOS ödeme sistemi için resmi olmayan istemci

193 lines (178 loc) 6.47 kB
/** * İstek doğrulama fonksiyonları */ const Joi = require('joi'); const { CURRENCY, LOCALE, SUBMERCHANT_TYPE } = require('./constants'); /** * İstemci yapılandırmasını doğrula * @param {Object} config - İstemci yapılandırma nesnesi */ function validateClientConfig(config) { const schema = Joi.object({ merchant: Joi.string().required(), merchantKey: Joi.string().required(), testMode: Joi.boolean().default(false) }); const { error } = schema.validate(config); if (error) { throw new Error(`Geçersiz yapılandırma: ${error.message}`); } } /** * 3D ödeme isteğini doğrula * @param {Object} paymentRequest - Ödeme isteği nesnesi */ function validate3DPaymentRequest(paymentRequest) { const schema = Joi.object({ Config: Joi.object({ MERCHANT: Joi.string().required(), MERCHANT_KEY: Joi.string().required(), BACK_URL: Joi.string().uri().required(), PRICES_CURRENCY: Joi.string().valid(...Object.values(CURRENCY)).required(), ORDER_REF_NUMBER: Joi.string().max(24).required(), ORDER_AMOUNT: Joi.string().required() }).required(), CreditCard: Joi.object({ CC_NUMBER: Joi.string().length(16).pattern(/^\d+$/).required(), EXP_MONTH: Joi.string().length(2).pattern(/^\d+$/).required(), EXP_YEAR: Joi.string().length(4).pattern(/^\d+$/).required(), CC_CVV: Joi.string().pattern(/^\d+$/).required(), CC_OWNER: Joi.string().required(), INSTALLMENT_NUMBER: Joi.string().pattern(/^\d+$/).required() }).required(), Customer: Joi.object({ FIRST_NAME: Joi.string().required(), LAST_NAME: Joi.string().required(), MAIL: Joi.string().email().required(), PHONE: Joi.string().required(), CITY: Joi.string().required(), STATE: Joi.string().required(), ADDRESS: Joi.string().required(), CLIENT_IP: Joi.string().ip().required() }).required(), Product: Joi.array().items( Joi.object({ PRODUCT_ID: Joi.string().required(), PRODUCT_NAME: Joi.string().required(), PRODUCT_CATEGORY: Joi.string().required(), PRODUCT_DESCRIPTION: Joi.string().required(), PRODUCT_AMOUNT: Joi.string().required() }) ).min(1).required() }); const { error } = schema.validate(paymentRequest); if (error) { throw new Error(`Geçersiz 3D ödeme isteği: ${error.message}`); } } /** * Ortak ödeme sayfası isteğini doğrula * @param {Object} paymentRequest - Ödeme isteği nesnesi */ function validateCommonPaymentRequest(paymentRequest) { const schema = Joi.object({ Config: Joi.object({ MERCHANT: Joi.string().required(), MERCHANT_KEY: Joi.string().required(), ORDER_REF_NUMBER: Joi.string().max(24).required(), ORDER_AMOUNT: Joi.string().required(), PRICES_CURRENCY: Joi.string().valid(...Object.values(CURRENCY)).required(), BACK_URL: Joi.string().uri().required(), LOCALE: Joi.string().valid(...Object.values(LOCALE)).required() }).required(), Customer: Joi.object({ FIRST_NAME: Joi.string().required(), LAST_NAME: Joi.string().required(), MAIL: Joi.string().email().required(), PHONE: Joi.string().required(), CITY: Joi.string().required(), STATE: Joi.string().required(), ADDRESS: Joi.string().required() }).required(), Product: Joi.array().items( Joi.object({ PRODUCT_ID: Joi.string().required(), PRODUCT_NAME: Joi.string().required(), PRODUCT_CATEGORY: Joi.string().required(), PRODUCT_DESCRIPTION: Joi.string().required(), PRODUCT_AMOUNT: Joi.string().required() }) ).min(1).required() }); const { error } = schema.validate(paymentRequest); if (error) { throw new Error(`Geçersiz ortak ödeme sayfası isteği: ${error.message}`); } } /** * İşlem sorgulama isteğini doğrula * @param {Object} queryRequest - Sorgulama isteği nesnesi */ function validateProcessQueryRequest(queryRequest) { const schema = Joi.object({ MERCHANT: Joi.string().required(), MERCHANT_KEY: Joi.string().required(), ORDER_REF_NUMBER: Joi.string().required() }); const { error } = schema.validate(queryRequest); if (error) { throw new Error(`Geçersiz işlem sorgulama isteği: ${error.message}`); } } /** * İade/İptal isteğini doğrula * @param {Object} refundRequest - İade isteği nesnesi */ function validateRefundRequest(refundRequest) { const schema = Joi.object({ MERCHANT: Joi.string().required(), MERCHANT_KEY: Joi.string().required(), ORDER_REF_NUMBER: Joi.string().required(), AMOUNT: Joi.number().required(), SYNC_WITH_POS: Joi.boolean().optional() }); const { error } = schema.validate(refundRequest); if (error) { throw new Error(`Geçersiz iade/iptal isteği: ${error.message}`); } } /** * Pazaryeri alt üye işyeri tanımlama isteğini doğrula * @param {Object} subMerchantRequest - Alt üye işyeri isteği */ function validateSubMerchantRequest(subMerchantRequest) { const schema = Joi.object({ MERCHANT: Joi.string().required(), MERCHANT_KEY: Joi.string().required(), NAME: Joi.string().required(), OWNER_NAME: Joi.string().required(), OWNER_SURNAME: Joi.string().required(), OWNER_IDENTITY_NUMBER: Joi.string().required(), EMAIL: Joi.string().email().required(), GSM: Joi.string().required(), COMPANY_NAME: Joi.string().required(), TAX_OFFICE: Joi.string().required(), TAX_NUMBER: Joi.string().required(), BANK_NAME: Joi.string().required(), EXTERNAL_ID: Joi.string().required(), TYPE: Joi.string().valid(...Object.values(SUBMERCHANT_TYPE)).required(), BANK_ACCOUNTS: Joi.array().items( Joi.object({ IBAN: Joi.string().required(), CURRENCY: Joi.string().valid(...Object.values(CURRENCY)).required() }) ).min(1).required() }); const { error } = schema.validate(subMerchantRequest); if (error) { throw new Error(`Geçersiz alt üye işyeri tanımlama isteği: ${error.message}`); } } module.exports = { validateClientConfig, validate3DPaymentRequest, validateCommonPaymentRequest, validateProcessQueryRequest, validateRefundRequest, validateSubMerchantRequest };