
Research
Two Malicious Rust Crates Impersonate Popular Logger to Steal Wallet Keys
Socket uncovers malicious Rust crates impersonating fast_log to steal Solana and Ethereum wallet keys from source code.
unified-upi-payment
Advanced tools
Complete UPI payment integration for all major Indian payment gateways
A unified UPI payment gateway integration package for Node.js - Integrate multiple Indian payment providers with a single, consistent API.
Based on real API testing (January 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 | - |
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
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);
// 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' }
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
}
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
}
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
}
rzp_test_
const payment = new UnifiedUPIPayment({
provider: 'razorpay',
credentials: {
keyId: 'rzp_test_xxxxx', // Your test key
keySecret: 'your_secret_here' // Your secret
},
environment: 'sandbox'
});
Just need a valid UPI ID:
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
const payment = new UnifiedUPIPayment({
provider: 'cashfree',
credentials: {
appId: 'your_app_id',
secretKey: 'your_secret_key'
},
environment: 'sandbox'
});
const payment = new UnifiedUPIPayment({
provider: 'payu',
credentials: {
keyId: 'your_merchant_key',
merchantSalt: 'your_salt'
},
environment: 'sandbox'
});
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');
});
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);
}
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 });
// 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);
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 |
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 | ✅ |
// Use environment variables
const payment = new UnifiedUPIPayment({
provider: process.env.PAYMENT_PROVIDER,
credentials: {
keyId: process.env.PAYMENT_KEY,
keySecret: process.env.PAYMENT_SECRET
}
});
// 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');
}
const isValidWebhook = payment.verifyWebhookSignature({
payload: req.body,
signature: req.headers['x-webhook-signature']
});
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 |
Contributions are welcome! Please check the GitHub repository.
MIT © Ali Imran Adil
Star ⭐ this repo if it helps you!
FAQs
Complete UPI payment integration for all major Indian payment gateways
We found that unified-upi-payment demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Socket uncovers malicious Rust crates impersonating fast_log to steal Solana and Ethereum wallet keys from source code.
Research
A malicious package uses a QR code as steganography in an innovative technique.
Research
/Security News
Socket identified 80 fake candidates targeting engineering roles, including suspected North Korean operators, exposing the new reality of hiring as a security function.