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>

247 lines (215 loc) 7.79 kB
const { AnypayClient, crypto } = require('anypay-node'); class AnyPay { constructor(config) { this.config = config || {}; const requiredFields = ['merchantId', 'secretKey']; for (let field of requiredFields) { if (!config[field]) throw new Error(`Missing required field: ${field}`); } this.client = new AnypayClient({ merchantId: config.merchantId, secretKey: config.secretKey, apiId: config.apiId || '', apiKey: config.apiKey || '' }); this.debug = config.debug || false; this.crypto = crypto; // Crypto yardımcı fonksiyonlarını dışa açalım } async createPayment(paymentDetails) { try { const requiredData = ['amount', 'currency', 'orderId', 'desc']; for (let data of requiredData) { if (!paymentDetails[data]) throw new Error(`Missing required data: ${data}`); } // Parametre adlarını dönüştür (QuickPos -> AnyPay API) const params = { pay_id: paymentDetails.orderId, amount: paymentDetails.amount, currency: paymentDetails.currency, desc: paymentDetails.desc, method: paymentDetails.method || '', email: paymentDetails.email || '', success_url: paymentDetails.successUrl || '', fail_url: paymentDetails.failUrl || '', webhook_url: paymentDetails.notificationUrl || '' }; if (this.debug) console.log('Creating payment with params:', params); // Form verisi ve HTML URL'si al const formData = this.client.createPaymentFormData(params); if (this.debug) console.log('Payment form data:', formData); // API ile ödeme oluşturma if (paymentDetails.useApi) { try { const apiResponse = await this.client.createPayment(params); if (this.debug) console.log('API payment response:', apiResponse); return { status: 'success', data: { url: apiResponse.payment_url, id: apiResponse.id || apiResponse.transaction_id, pay_id: params.pay_id, amount: params.amount, currency: params.currency } }; } catch (apiError) { if (this.debug) console.error('API payment error:', apiError); throw apiError; } } // Form HTML oluşturma ya da POST URL'i alma if (paymentDetails.returnFormHtml) { // HTML formunu döndür const formHtml = this.client.createPaymentForm(params); return { status: 'success', data: { formHtml: formHtml, pay_id: params.pay_id } }; } else { // Doğrudan post URL'ini döndür return { status: 'success', data: { url: 'https://anypay.io/payment', formData: formData, pay_id: params.pay_id, amount: params.amount, currency: params.currency } }; } } catch (error) { if (this.debug) console.error('Payment creation error:', error); return { status: 'fail', message: error.message || 'Unknown error' }; } } async handleCallback(callbackData) { try { if (this.debug) console.log('Processing callback data:', callbackData); if (!callbackData || !callbackData.pay_id) { throw new Error('Missing required callback parameters'); } // IP adresini kontrol edebiliriz (isteğe bağlı) // const isValid = this.client.validateNotification(callbackData); // if (!isValid) { // throw new Error('Invalid notification signature'); // } // status "paid" ise başarılı if (callbackData.status === 'paid') { return { status: 'success', orderId: callbackData.pay_id, amount: parseFloat(callbackData.amount), currency: callbackData.currency, transactionId: callbackData.transaction_id, profit: callbackData.profit, paymentMethod: callbackData.method, email: callbackData.email, test: callbackData.test === '1' }; } else { throw new Error(`Payment failed with status: ${callbackData.status}`); } } catch (error) { if (this.debug) console.error('Callback handling error:', error); throw new Error(`Error in AnyPay callback handling: ${error.message}`); } } async getPaymentInfo(transactionId) { try { const payments = await this.client.getPayments({ trans_id: transactionId }); if (payments && Array.isArray(payments) && payments.length > 0) { return { status: 'success', data: payments[0] }; } else { throw new Error('Payment not found'); } } catch (error) { if (this.debug) console.error('Get payment info error:', error); throw new Error(`Error in AnyPay payment info: ${error.message}`); } } async getBalance() { try { return await this.client.getBalance(); } catch (error) { if (this.debug) console.error('Get balance error:', error); throw new Error(`Error getting balance: ${error.message}`); } } async getPayments(params = {}) { try { return await this.client.getPayments(params); } catch (error) { if (this.debug) console.error('Get payments error:', error); throw new Error(`Error getting payments: ${error.message}`); } } async getRates() { try { return await this.client.getRates(); } catch (error) { if (this.debug) console.error('Get rates error:', error); throw new Error(`Error getting rates: ${error.message}`); } } async getCommissions() { try { return await this.client.getCommissions(); } catch (error) { if (this.debug) console.error('Get commissions error:', error); throw new Error(`Error getting commissions: ${error.message}`); } } async createPaymentForm(params) { try { return this.client.createPaymentForm(params); } catch (error) { if (this.debug) console.error('Create payment form error:', error); throw new Error(`Error creating payment form: ${error.message}`); } } async getNotificationIPs() { try { return await this.client.getNotificationIPs(); } catch (error) { if (this.debug) console.error('Get notification IPs error:', error); throw new Error(`Error getting notification IPs: ${error.message}`); } } async createPayout(params) { try { return await this.client.createPayout(params); } catch (error) { if (this.debug) console.error('Create payout error:', error); throw new Error(`Error creating payout: ${error.message}`); } } async getPayouts(params = {}) { try { return await this.client.getPayouts(params); } catch (error) { if (this.debug) console.error('Get payouts error:', error); throw new Error(`Error getting payouts: ${error.message}`); } } // Form verisi ve HTML döndüren yardımcı metodlar createPaymentFormData(params) { return this.client.createPaymentFormData(params); } createPaymentForm(params) { return this.client.createPaymentForm(params); } validateNotification(notification, ipAddress) { return this.client.validateNotification(notification, ipAddress); } } module.exports = AnyPay;