UNPKG

quickpos

Version:

<div align="center"> <h1>💳 QuickPos 🚀</h1> <p><strong>A powerful, multi-gateway payment integration module for Node.js</strong></p> <p>Seamlessly integrate with 50+ payment providers worldwide</p>

110 lines (95 loc) • 3.81 kB
const crypto = require('crypto'); const axios = require('axios'); class Payeer { constructor(config) { this.config = config || {}; const requiredFields = ['m_shop', 'm_key']; for (let field of requiredFields) { if (!config[field]) throw new Error(`Missing required field: ${field}`); } this.m_shop = config.m_shop; this.m_key = config.m_key; } async createPayment(paymentDetails) { try { const requiredData = ['orderId', 'amount', 'currency', 'description']; for (let data of requiredData) { if (!paymentDetails[data]) throw new Error(`Missing required data: ${data}`); } const m_sign = this.generateSignature( paymentDetails.orderId, paymentDetails.amount, paymentDetails.currency, Buffer.from(paymentDetails.description).toString('base64') ); const paymentUrl = `https://payeer.com/merchant/?m_shop=${this.m_shop}&m_orderid=${paymentDetails.orderId}&m_amount=${paymentDetails.amount}&m_curr=${paymentDetails.currency}&m_desc=${Buffer.from(paymentDetails.description).toString('base64')}&m_sign=${m_sign}&lang=${paymentDetails.lang || 'en'}`; return { status: 'success', data: { url: paymentUrl, orderId: paymentDetails.orderId, amount: paymentDetails.amount, currency: paymentDetails.currency } }; } catch (error) { throw new Error(`Error in Payeer payment creation: ${error.message}`); } } async handleCallback(callbackData) { try { const signHash = this.generatePaymentStatusSignature(callbackData); if (callbackData.m_sign === signHash && callbackData.m_status === 'success') { return { status: 'success', orderId: callbackData.m_orderid, amount: callbackData.m_amount, currency: callbackData.m_curr, operationId: callbackData.m_operation_id, paymentDate: callbackData.m_operation_pay_date }; } else { throw new Error('Payment validation failed'); } } catch (error) { throw new Error(`Error in Payeer callback handling: ${error.message}`); } } generateSignature(m_orderid, m_amount, m_curr, m_desc) { const arHash = [ this.m_shop, m_orderid, m_amount, m_curr, m_desc, this.m_key ]; return crypto.createHash('sha256') .update(arHash.join(':')) .digest('hex') .toUpperCase(); } generatePaymentStatusSignature(paymentData) { const arHash = [ paymentData.m_operation_id, paymentData.m_operation_ps, paymentData.m_operation_date, paymentData.m_operation_pay_date, paymentData.m_shop, paymentData.m_orderid, paymentData.m_amount, paymentData.m_curr, paymentData.m_desc, paymentData.m_status ]; if (paymentData.m_params) { arHash.push(paymentData.m_params); } arHash.push(this.m_key); return crypto.createHash('sha256') .update(arHash.join(':')) .digest('hex') .toUpperCase(); } } module.exports = Payeer;