esnekpos
Version:
Node.js entegrasyon paketi - EsnekPOS ödeme sistemi için resmi olmayan istemci
140 lines (122 loc) • 4.52 kB
JavaScript
/**
* 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`);
});