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>

255 lines (237 loc) 8.3 kB
const express = require('express'); const bodyParser = require('body-parser'); const QuickPos = require('./app'); const app = express(); app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json()); const quickPos = new QuickPos({ providers: { esnekpos: { merchant: 'TEST1234', merchantKey: '4oK26hK8MOXrIV1bzTRVPA==', testMode: true, debug: false } } }); app.use(quickPos.middleware()); // Ana sayfa - Ödeme formu app.get('/', (req, res) => { res.send(` <h1>EsnekPOS Ödeme Testi</h1> <h2>Ortak Ödeme Sayfası</h2> <form action="/create-common-payment" method="post"> <div> <label>Tutar:</label> <input type="text" name="amount" value="100.00" required> </div> <div> <label>Para Birimi:</label> <select name="currency" required> <option value="TRY">TRY</option> <option value="USD">USD</option> <option value="EUR">EUR</option> </select> </div> <div> <label>Sipariş Numarası:</label> <input type="text" name="orderId" value="ORDER-${Date.now()}" required> </div> <div> <label>Açıklama:</label> <input type="text" name="description" value="Test ödemesi" required> </div> <div> <label>E-posta:</label> <input type="email" name="email" value="musteri@example.com" required> </div> <button type="submit">Ortak Ödeme Sayfası Oluştur</button> </form> <hr> <h2>3D Secure Ödeme</h2> <form action="/create-3d-payment" method="post"> <div> <label>Tutar:</label> <input type="text" name="amount" value="100.00" required> </div> <div> <label>Para Birimi:</label> <select name="currency" required> <option value="TRY">TRY</option> <option value="USD">USD</option> <option value="EUR">EUR</option> </select> </div> <div> <label>Sipariş Numarası:</label> <input type="text" name="orderId" value="ORDER-${Date.now()}" required> </div> <div> <label>Açıklama:</label> <input type="text" name="description" value="Test ödemesi" required> </div> <div> <label>E-posta:</label> <input type="email" name="email" value="musteri@example.com" required> </div> <h3>Kart Bilgileri</h3> <div> <label>Kart Numarası:</label> <input type="text" name="cardNumber" value="4159562885391991" required> </div> <div> <label>Son Kullanma Ay:</label> <input type="text" name="expireMonth" value="12" required> </div> <div> <label>Son Kullanma Yıl:</label> <input type="text" name="expireYear" value="2025" required> </div> <div> <label>CVV:</label> <input type="text" name="cvv" value="123" required> </div> <div> <label>Kart Sahibi:</label> <input type="text" name="cardOwner" value="John Doe" required> </div> <div> <label>Taksit Sayısı:</label> <select name="installment"> <option value="1">Tek Çekim</option> <option value="2">2 Taksit</option> <option value="3">3 Taksit</option> <option value="6">6 Taksit</option> </select> </div> <button type="submit">3D Secure Ödeme Başlat</button> </form> `); }); // Ortak ödeme sayfası oluşturma rotası app.post('/create-common-payment', async (req, res) => { try { const result = await quickPos.providers['esnekpos'].createPayment({ amount: req.body.amount, currency: req.body.currency, orderId: req.body.orderId, description: req.body.description, email: req.body.email, ip: '195.142.21.81', // Opsiyonel phone: '5555555555', city: 'İstanbul', state: 'Kadıköy', address: 'Örnek Mahallesi, Örnek Sokak No: 1', name: 'Müşteri', surname: 'Test', callbackUrl: `http://${req.headers.host}/webhook-callback` }); if (result.status === 'success') { console.log('Ödeme sayfası başarıyla oluşturuldu:', result.data); // Ödeme sayfası başarıyla oluşturuldu: { // transactionId: 'ORDER-1742140882252', // url: 'https://postest.esnekpos.com/Pages/CommonPaymentNew.aspx?hash=837e4aafc61c9e1e9a074922b165fd540b0e4374db4740c511b51f5efb3b9b49', // id: '29386', // html: null // } res.redirect(result.data.url); } else { res.status(400).json({ error: 'Ödeme sayfası oluşturulamadı', details: result }); } } catch (error) { console.error('Ödeme sayfası oluşturma hatası:', error); res.status(500).json({ error: error.message }); } }); // 3D Secure ödeme başlatma rotası app.post('/create-3d-payment', async (req, res) => { try { const result = await quickPos.providers['esnekpos'].createPayment({ amount: req.body.amount, currency: req.body.currency, orderId: req.body.orderId, description: req.body.description, email: req.body.email, name: 'Müşteri', surname: 'Test', callbackUrl: `http://${req.headers.host}/webhook-callback`, creditCard: { number: req.body.cardNumber, expireMonth: req.body.expireMonth, expireYear: req.body.expireYear, cvv: req.body.cvv, owner: req.body.cardOwner, installment: req.body.installment } }); if (result.status === 'success') { console.log('3D Secure ödeme başarıyla başlatıldı:', result.data); if (result.data.html) { // 3D Secure form HTML'i varsa göster res.send(` <h1>3D Secure İşlemi</h1> <p>3D Secure doğrulama sayfasına yönlendiriliyorsunuz...</p> ${result.data.html} `); } else { // URL varsa yönlendir res.redirect(result.data.url); } } else { res.status(400).json({ error: 'Ödeme başlatılamadı', details: result }); } } catch (error) { console.error('Ödeme başlatma hatası:', error); res.status(500).json({ error: error.message }); } }); // Webhook callback app.post('/webhook-callback', quickPos.handleCallback('esnekpos'), (req, res) => { try { console.log('Ödeme sonucu:', req.paymentResult); // Ödeme sonucu: { // status: 'success', // orderId: 'ORDER-1742140882252', // transactionId: 'ORDER-1742140882252', // amount: 101, // currency: 'TRY', // paymentType: 'creditcard', // date: '2025-03-16T16:12:32.022Z' // } if (req.paymentResult && req.paymentResult.status === 'success') { // Burada ödemeyi onaylayabilir, veritabanına kaydedebilirsiniz res.status(200).send('OK'); } else { console.error('Ödeme başarısız:', req.paymentResult || 'Sonuç yok'); res.status(400).send('Payment failed'); } } catch (error) { console.error('Webhook hatası:', error); res.status(500).send('Internal Server Error'); } }); // Ödeme durumu sorgulama app.get('/check-payment/:orderRefNumber', async (req, res) => { try { const result = await quickPos.providers['esnekpos'].getPaymentStatus(req.params.orderRefNumber); res.json(result); } catch (error) { console.error('Ödeme sorgulama hatası:', error); res.status(500).json({ error: error.message }); } }); // İade işlemi app.post('/refund-payment', async (req, res) => { try { const { orderRefNumber, amount } = req.body; const result = await quickPos.providers['esnekpos'].refundPayment(orderRefNumber, amount); res.json(result); } catch (error) { console.error('İade işlemi hatası:', error); res.status(500).json({ error: error.message }); } }); const PORT = process.env.PORT || 80; app.listen(PORT, () => { console.log(`Server ${PORT} portunda çalışıyor`); });