UNPKG

ibc-payment-gateway

Version:

A modular payment gateway for Node.js applications with PostgreSQL and Sequelize

70 lines (61 loc) 1.83 kB
const Razorpay = require('razorpay'); const crypto = require('crypto'); class RazorpayProvider { constructor(config) { this.key_id = config.key_id; this.key_secret = config.key_secret; this.webhook_secret = config.webhook_secret; this.razorpay = new Razorpay({ key_id: this.key_id, key_secret: this.key_secret }); } async createOrder(orderData) { try { const options = { amount: orderData.amount, // amount in paisa currency: orderData.currency, receipt: orderData.order_id, payment_capture: 1, notes: { internal_order_id: orderData.order_id } }; const order = await this.razorpay.orders.create(options); return order; } catch (error) { throw new Error(`Razorpay order creation failed: ${error.message}`); } } verifyWebhook(signature, payload, secret) { try { const expectedSignature = crypto .createHmac('sha256', secret) .update(JSON.stringify(payload)) .digest('hex'); return signature === expectedSignature; } catch (error) { console.error('Webhook verification error:', error); return false; } } async getPayment(paymentId) { try { const payment = await this.razorpay.payments.fetch(paymentId); return payment; } catch (error) { throw new Error(`Failed to fetch payment: ${error.message}`); } } async refundPayment(paymentId, amount) { try { const refund = await this.razorpay.payments.refund(paymentId, { amount: amount }); return refund; } catch (error) { throw new Error(`Refund failed: ${error.message}`); } } } module.exports = RazorpayProvider;