anypay-node
Version:
Node.js integration for Anypay payment gateway
80 lines (70 loc) • 2.1 kB
JavaScript
const { NOTIFICATION_IPS } = require('./constants');
/**
* Parametre değerini doğrular
* @param {*} value Değer
* @param {string} paramName Parametre adı
* @param {boolean} isRequired Zorunlu mu?
* @throws {Error} Geçersiz parametre hatası
*/
function validateParam(value, paramName, isRequired = true) {
if (isRequired && (value === undefined || value === null || value === '')) {
throw new Error(`${paramName} is required`);
}
}
/**
* URL'ye sorgu parametreleri ekler
* @param {string} url Temel URL
* @param {Object} params Parametreler
* @returns {string} Parametreli URL
*/
function appendQueryParams(url, params) {
const urlObj = new URL(url);
Object.entries(params).forEach(([key, value]) => {
if (value !== undefined && value !== null) {
urlObj.searchParams.append(key, value);
}
});
return urlObj.toString();
}
/**
* IP adresinin bildirim için geçerli olup olmadığını kontrol eder
* @param {string} ip IP adresi
* @returns {boolean} Geçerli mi?
*/
function isValidNotificationIP(ip) {
return NOTIFICATION_IPS.includes(ip);
}
/**
* Nesneyi sorgu dizesine dönüştürür
* @param {Object} obj Nesne
* @returns {string} Sorgu dizesi
*/
function objectToQueryString(obj) {
return Object.entries(obj)
.filter(([_, v]) => v !== undefined && v !== null)
.map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`)
.join('&');
}
/**
* Ödeme formu HTML'i oluşturur
* @param {Object} formData Form verileri
* @returns {string} HTML formu
*/
function generatePaymentFormHTML(formData) {
const formFields = Object.entries(formData)
.map(([key, value]) => `<input type="hidden" name="${key}" value="${value}">`)
.join('\n');
return `
<form action="https://anypay.io/merchant" accept-charset="utf-8" method="post">
${formFields}
<input type="submit" value="Öde">
</form>
`;
}
module.exports = {
validateParam,
appendQueryParams,
isValidNotificationIP,
objectToQueryString,
generatePaymentFormHTML
};