UNPKG

esnekpos

Version:

Node.js entegrasyon paketi - EsnekPOS ödeme sistemi için resmi olmayan istemci

140 lines (122 loc) 4.52 kB
/** * EsnekPOS Callback Demo Sunucusu * * Bu basit Express sunucusu, EsnekPOS'tan gelen callback isteklerini * dinler ve sonuçlarını kaydeder. Gerçek dünya senaryolarında ödeme * entegrasyonunuzu test etmek için kullanabilirsiniz. */ const express = require('express'); const bodyParser = require('body-parser'); const fs = require('fs'); const path = require('path'); const app = express(); const port = process.env.PORT || 3000; // Callback isteklerini kaydetmek için dizin const callbackDir = path.join(__dirname, 'callbacks'); if (!fs.existsSync(callbackDir)) { fs.mkdirSync(callbackDir, { recursive: true }); } // Middleware ayarları app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: true })); // Ana sayfa app.get('/', (req, res) => { res.send(` <html> <head> <title>EsnekPOS Demo Callback Sunucusu</title> <style> body { font-family: Arial, sans-serif; margin: 40px; line-height: 1.6; } h1 { color: #333; } .container { max-width: 800px; } .callbacks { margin-top: 20px; } .callback-item { background: #f5f5f5; padding: 10px; margin-bottom: 10px; border-radius: 5px; } pre { overflow: auto; background: #eee; padding: 10px; border-radius: 3px; } .success { color: green; } .error { color: red; } </style> </head> <body> <div class="container"> <h1>EsnekPOS Demo Callback Sunucusu</h1> <p>Bu sunucu, EsnekPOS entegrasyonunuzu test etmek için callback isteklerini dinler ve kaydeder.</p> <p>Callback URL'inizi şu şekilde yapılandırın: <code>http://localhost:${port}/callback</code></p> <h2>Son Callbacks</h2> <div class="callbacks" id="callbacks"> ${listCallbacks()} </div> <script> // 5 saniyede bir callback listesini yenile setInterval(() => { fetch('/api/callbacks') .then(res => res.json()) .then(data => { document.getElementById('callbacks').innerHTML = data.html; }); }, 5000); </script> </div> </body> </html> `); }); // Callback endpoint'i app.post('/callback', (req, res) => { const callbackData = { timestamp: new Date().toISOString(), headers: req.headers, body: req.body, query: req.query }; console.log('Callback alındı:', JSON.stringify(callbackData, null, 2)); // Callback verilerini kaydet const filename = `callback_${Date.now()}.json`; fs.writeFileSync(path.join(callbackDir, filename), JSON.stringify(callbackData, null, 2)); // EsnekPOS'a başarılı yanıt gönder res.status(200).send('OK'); }); // Callback listesi API endpoint'i app.get('/api/callbacks', (req, res) => { res.json({ html: listCallbacks() }); }); // Kayıtlı callback'leri listele function listCallbacks() { try { const files = fs.readdirSync(callbackDir) .filter(file => file.endsWith('.json')) .sort((a, b) => { return fs.statSync(path.join(callbackDir, b)).mtime.getTime() - fs.statSync(path.join(callbackDir, a)).mtime.getTime(); }) .slice(0, 10); // Son 10 callback if (files.length === 0) { return '<p>Henüz callback alınmadı.</p>'; } let html = ''; for (const file of files) { const data = JSON.parse(fs.readFileSync(path.join(callbackDir, file), 'utf8')); const isSuccess = data.body && (data.body.STATUS === 'SUCCESS' || data.body.RETURN_CODE === '0'); const statusClass = isSuccess ? 'success' : 'error'; html += ` <div class="callback-item"> <h3 class="${statusClass}">${file} - ${isSuccess ? 'Başarılı' : 'Başarısız'}</h3> <p>Zaman: ${data.timestamp}</p> <details> <summary>Detaylar</summary> <pre>${JSON.stringify(data, null, 2)}</pre> </details> </div> `; } return html; } catch (err) { return `<p>Callbacks listelenemedi: ${err.message}</p>`; } } // Sunucuyu başlat app.listen(port, () => { console.log(`Demo Callback Sunucusu başlatıldı: http://localhost:${port}`); console.log(`Callback URL'iniz: http://localhost:${port}/callback`); });