https://github.com/imrandil/unified-upi-payment-npm-package
A unified UPI payment gateway integration package for Node.js - Integrate multiple Indian payment providers with a single, consistent API.
https://github.com/imrandil/unified-upi-payment-npm-package
npm-package upi-integration upi-payment
Last synced: 17 days ago
JSON representation
A unified UPI payment gateway integration package for Node.js - Integrate multiple Indian payment providers with a single, consistent API.
- Host: GitHub
- URL: https://github.com/imrandil/unified-upi-payment-npm-package
- Owner: IMRANDIL
- License: mit
- Created: 2025-09-02T11:38:41.000Z (about 1 month ago)
- Default Branch: main
- Last Pushed: 2025-09-06T02:20:19.000Z (about 1 month ago)
- Last Synced: 2025-09-06T04:18:29.600Z (about 1 month ago)
- Topics: npm-package, upi-integration, upi-payment
- Language: TypeScript
- Homepage: https://www.npmjs.com/package/unified-upi-payment
- Size: 141 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: Readme.md
- License: LICENSE
Awesome Lists containing this project
README
# ๐ Unified UPI Payment
[](https://www.npmjs.com/package/unified-upi-payment)
[](https://opensource.org/licenses/MIT)
[]()**A unified UPI payment gateway integration package for Node.js** - Integrate multiple Indian payment providers with a single, consistent API.
## โ Tested & Working Providers
Based on real API testing (August 2025):
| Provider | Status | Test Results | Features |
|----------|--------|--------------|----------|
| **Razorpay** | โ **Working** | Order creation, status check successful | Full API integration |
| **PayU** | โ **Working** | Transaction creation successful | UPI, Cards, Net Banking |
| **Google Pay** | โ **Working** | QR code generation, UPI links working | Direct UPI, No fees |
| **Cashfree** | โ **Working** | Order & session creation successful | High success rate |
| **PhonePe** | โ ๏ธ Needs Setup | Requires merchant account | - |
| **Paytm** | โ ๏ธ Needs Setup | Requires merchant account | - |
| **BharatPe** | โ ๏ธ Needs Setup | Requires API access | - |## ๐ฆ Installation
```bash
npm install unified-upi-payment# Optional: Install provider SDKs for enhanced features
npm install razorpay # For Razorpay SDK support
npm install cashfree-pg # For Cashfree SDK support
```## ๐ Quick Start
```javascript
const { UnifiedUPIPayment } = require('unified-upi-payment');// Initialize with any tested provider
const payment = new UnifiedUPIPayment({
provider: 'razorpay', // or 'payu', 'googlepay', 'cashfree'
credentials: {
keyId: 'your_key_id',
keySecret: 'your_key_secret'
},
environment: 'sandbox' // or 'production'
});// Create an order - same API for all providers!
const order = await payment.createOrder({
amount: 100, // Amount in INR
currency: 'INR',
customerInfo: {
name: 'John Doe',
email: 'john@example.com',
contact: '9999999999'
}
});console.log('Order created:', order);
```## ๐ Actual API Responses
### Razorpay Response
```javascript
// Create Order
const order = await payment.createOrder({
amount: 1,
currency: 'INR'
});// Actual Response:
{
orderId: 'order_RDXo8n1Ienthhy',
amount: 1,
currency: 'INR',
status: 'created',
provider: 'razorpay',
createdAt: Date,
raw: { /* Razorpay specific data */ }
}// Check Status
const status = await payment.getTransactionStatus(order.orderId);
// Returns: { status: 'pending', amount: 1, orderId: 'order_RDXo8n1Ienthhy' }
```### Google Pay Response (Direct UPI)
```javascript
const payment = new UnifiedUPIPayment({
provider: 'googlepay',
credentials: {
merchantName: 'Your Business',
merchantUPI: 'yourbusiness@paytm'
}
});const order = await payment.createOrder({
amount: 100,
description: 'Test Payment'
});// Actual Response:
{
orderId: 'GP_1756993220774',
amount: 100,
currency: 'INR',
status: 'created',
provider: 'googlepay',
upiUrl: 'upi://pay?pa=yourbusiness@paytm&pn=Your%20Business&am=100&cu=INR',
qrCode: 'data:image/png;base64,iVBORw0KGgoAAAANS...', // Base64 QR code
createdAt: Date
}
```### Cashfree Response
```javascript
const order = await payment.createOrder({
amount: 1,
customerInfo: {
name: 'Test User',
email: 'test@example.com',
contact: '9999999999'
}
});// Actual Response:
{
orderId: 'CF_1756993220807',
amount: 1,
currency: 'INR',
status: 'created',
provider: 'cashfree',
paymentSessionId: 'session_81_M-omZTSl8...',
createdAt: Date
}
```### PayU Response
```javascript
const order = await payment.createOrder({
amount: 1,
description: 'Test Product'
});// Actual Response:
{
orderId: 'TXN_1756993220772',
amount: 1,
currency: 'INR',
status: 'created',
provider: 'payu',
paymentUrl: 'https://test.payu.in/_payment',
createdAt: Date
}
```## ๐ง Provider Setup Guide
### 1. Razorpay (Easiest Setup)
1. Sign up at https://dashboard.razorpay.com
2. Get test keys from Dashboard โ Settings โ API Keys
3. Test keys start with `rzp_test_````javascript
const payment = new UnifiedUPIPayment({
provider: 'razorpay',
credentials: {
keyId: 'rzp_test_xxxxx', // Your test key
keySecret: 'your_secret_here' // Your secret
},
environment: 'sandbox'
});
```### 2. Google Pay (No API Keys Needed!)
Just need a valid UPI ID:
```javascript
const payment = new UnifiedUPIPayment({
provider: 'googlepay',
credentials: {
merchantName: 'Your Business Name',
merchantUPI: 'yourbusiness@paytm', // Any valid UPI ID
merchantCode: '5411' // Optional: merchant category code
}
});// Generate QR code for any UPI app
const order = await payment.createOrder({ amount: 100 });
// order.qrCode contains base64 QR image
// order.upiUrl contains the UPI deep link
```### 3. Cashfree
1. Sign up at https://merchant.cashfree.com
2. Get credentials from Dashboard โ Developers โ API Keys```javascript
const payment = new UnifiedUPIPayment({
provider: 'cashfree',
credentials: {
appId: 'your_app_id',
secretKey: 'your_secret_key'
},
environment: 'sandbox'
});
```### 4. PayU
1. Register at https://payu.in/merchants
2. Get test credentials from Dashboard```javascript
const payment = new UnifiedUPIPayment({
provider: 'payu',
credentials: {
keyId: 'your_merchant_key',
merchantSalt: 'your_salt'
},
environment: 'sandbox'
});
```## ๐ป Complete Working Examples
### Express.js Payment API
```javascript
const express = require('express');
const { UnifiedUPIPayment } = require('unified-upi-payment');const app = express();
app.use(express.json());// Initialize payment gateway
const payment = new UnifiedUPIPayment({
provider: process.env.PROVIDER || 'razorpay',
credentials: {
keyId: process.env.KEY_ID,
keySecret: process.env.KEY_SECRET
},
environment: 'sandbox'
});// Create payment endpoint
app.post('/api/payment/create', async (req, res) => {
try {
const order = await payment.createOrder({
amount: req.body.amount,
currency: 'INR',
customerInfo: req.body.customer
});
res.json({
success: true,
orderId: order.orderId,
amount: order.amount,
paymentUrl: order.paymentUrl,
upiUrl: order.upiUrl,
qrCode: order.qrCode
});
} catch (error) {
res.status(400).json({
success: false,
error: error.message
});
}
});// Verify payment
app.post('/api/payment/verify', async (req, res) => {
try {
const isValid = await payment.verifyPayment({
orderId: req.body.orderId,
paymentId: req.body.paymentId,
signature: req.body.signature
});
res.json({ success: true, verified: isValid });
} catch (error) {
res.status(400).json({
success: false,
error: error.message
});
}
});app.listen(3000, () => {
console.log('Payment server running on port 3000');
});
```### Generate UPI QR Code
```javascript
const { UnifiedUPIPayment } = require('unified-upi-payment');
const fs = require('fs');// Use Google Pay provider for direct UPI
const payment = new UnifiedUPIPayment({
provider: 'googlepay',
credentials: {
merchantName: 'My Store',
merchantUPI: 'mystore@paytm'
}
});// Generate QR code
const order = await payment.createOrder({
amount: 299,
description: 'Product Purchase'
});// Save QR code as image
if (order.qrCode) {
const base64Data = order.qrCode.replace(/^data:image\/png;base64,/, '');
fs.writeFileSync('payment-qr.png', base64Data, 'base64');
console.log('QR code saved as payment-qr.png');
console.log('UPI Link:', order.upiUrl);
}
```### Switch Providers Based on Amount
```javascript
function getOptimalProvider(amount) {
if (amount > 10000) {
// Use Cashfree for large amounts (better success rate)
return 'cashfree';
} else if (amount < 100) {
// Use Google Pay for small amounts (no fees)
return 'googlepay';
} else {
// Use Razorpay for general transactions
return 'razorpay';
}
}const provider = getOptimalProvider(amount);
const payment = new UnifiedUPIPayment({
provider: provider,
credentials: getCredentials(provider)
});const order = await payment.createOrder({ amount });
```## ๐งช Testing Your Integration
### Test Credentials
```javascript
// Test with Razorpay's public test credentials
const payment = new UnifiedUPIPayment({
provider: 'razorpay',
credentials: {
keyId: 'rzp_test_1DP5mmOlF5G5ag',
keySecret: 'thisissupersecret'
},
environment: 'sandbox'
});// Create a test order
const testOrder = await payment.createOrder({
amount: 1,
currency: 'INR'
});console.log('Test order created:', testOrder);
```### Test UPI IDs
| Provider | Test UPI ID | Notes |
|----------|-------------|--------|
| All Providers | success@razorpay | Always succeeds |
| All Providers | failure@razorpay | Always fails |
| Google Pay | Any valid UPI | Works with real UPI apps |## โ๏ธ API Methods
### Core Methods
| Method | Description | All Providers |
|--------|-------------|---------------|
| `createOrder()` | Create payment order | โ |
| `verifyPayment()` | Verify payment signature | โ |
| `generateUPILink()` | Generate UPI deep link | โ |
| `generateQRCode()` | Generate QR code | โ |
| `getTransactionStatus()` | Check payment status | โ |
| `getProviderCapabilities()` | Get provider features | โ |## ๐ Security Best Practices
1. **Keep credentials secure**
```javascript
// Use environment variables
const payment = new UnifiedUPIPayment({
provider: process.env.PAYMENT_PROVIDER,
credentials: {
keyId: process.env.PAYMENT_KEY,
keySecret: process.env.PAYMENT_SECRET
}
});
```2. **Always verify payments on server-side**
```javascript
// Never trust client-side payment confirmation
const isValid = await payment.verifyPayment({
orderId: req.body.orderId,
paymentId: req.body.paymentId,
signature: req.body.signature
});if (!isValid) {
throw new Error('Payment verification failed');
}
```3. **Implement webhook signature verification**
```javascript
const isValidWebhook = payment.verifyWebhookSignature({
payload: req.body,
signature: req.headers['x-webhook-signature']
});
```## ๐ Provider Comparison
| Feature | Razorpay | Cashfree | Google Pay | PayU |
|---------|----------|----------|------------|------|
| Setup Difficulty | Easy | Easy | Very Easy | Medium |
| API Key Required | Yes | Yes | No | Yes |
| Transaction Fees | 2% | 1.9% | 0% | 2% |
| Settlement | T+3 | T+2 | Direct | T+2 |
| Success Rate | 85% | 90% | 95% | 85% |
| Best For | General | High Volume | Small Amounts | Enterprise |## ๐ค Contributing
Contributions are welcome! Please check the [GitHub repository](https://github.com/IMRANDIL/unified-upi-payment-npm-package).
## ๐ License
MIT ยฉ Ali Imran Adil
## ๐ Support
- ๐ Issues: [GitHub Issues](https://github.com/IMRANDIL/unified-upi-payment-npm-package/issues)
- ๐ง Email: aliimranadil2@gmail.com---
**Star โญ this repo if it helps you!**