Bu paket, PayTR ödeme altyapısından gelen callback/webhook isteklerini HMAC imzası ve idempotency kontrolü ile güvenle doğrulamak için geliştirilmiş bir Express.js middleware’idir.
- 🔒 HMAC-SHA256 imza doğrulama (PayTR
merchant_key+merchant_saltile) - 🛑 Replay attack koruması (raw body hash + 5 dk pencere)
- ♻️ Idempotent işlem desteği (aynı
merchant_oidtekrar işlenmez) - 📦 TypeScript desteği (tip tanımları dahil)
- ⚡ Minimal bağımlılıklar: sadece
express,dotenv
npm install paytr-webhook-verifierveya kendi projenizde:
npm installimport express from "express";
import bodyParser from "body-parser";
import dotenv from "dotenv";
dotenv.config();
import { verifyPaytr } from "./paytr";
const app = express();
// rawBody yakala
app.use(bodyParser.json({ verify: (req: any, _res, buf) => {
(req as any).rawBody = buf;
}}));
app.post("/webhooks/paytr", verifyPaytr, (req, res) => {
console.log("Doğrulandı:", req.paytr);
res.status(200).send("ok");
});
app.listen(3000, () => console.log("PayTR webhook verifier up on 3000"));.env dosyası:
PORT=3000
PAYTR_MERCHANT_KEY=changeme
PAYTR_MERCHANT_SALT=changemeÖrnek için .env.example repoda mevcut.
Webhook doğrulamasını test etmek için:
curl -X POST http://localhost:3000/webhooks/paytr \
-H "Content-Type: application/x-www-form-urlencoded" \
--data "merchant_oid=ORD-12345&status=success&total_amount=100.00&hash=<geçerli-imza>"MIT