{"_id":"@baris.gktp/paytr","name":"@baris.gktp/paytr","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@baris.gktp/paytr","version":"1.0.0","description":"PayTR Payment Gateway - Modular Node.js/TypeScript SDK","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"require":"./dist/index.js","types":"./dist/index.d.ts"}},"scripts":{"build":"tsc","clean":"rm -rf dist","prepublishOnly":"npm run clean && npm run build"},"keywords":["paytr","payment","gateway","turkey","turkiye","odeme","kredi-karti","credit-card","3d-secure"],"author":"","license":"MIT","engines":{"node":">=18.0.0"},"devDependencies":{"@types/node":"^25.1.0","typescript":"^5.3.0"},"_id":"@baris.gktp/paytr@1.0.0","gitHead":"b74aef82156e78ad8bbabbb7c0843648038d40fa","_nodeVersion":"22.17.1","_npmVersion":"10.9.2","dist":{"integrity":"sha512-nJ65+pX8AWWYIbT0Hoj4g3JJWq7O1yGRJujquQ84bk72QPWoossOCqb5sbm8OqjpMcm/rL9JeQEI4FZVpGErAQ==","shasum":"0d652bbd979679b60658b51293b2e6b0f51d2423","tarball":"https://registry.npmjs.org/@baris.gktp/paytr/-/paytr-1.0.0.tgz","fileCount":18,"unpackedSize":69768,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQD9CUkLC6TJUEfTQKk6WkhAIsO32WwxXHSJu822kdggAgIgfUzR1WHPFox3Vehuoh1P0PcmwrHbOEg1PCIs7dpjbzw="}]},"_npmUser":{"name":"baris.gktp","email":"m.barisgoktepe@gmail.com"},"directories":{},"maintainers":[{"name":"baris.gktp","email":"m.barisgoktepe@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/paytr_1.0.0_1769686460319_0.13438880555122945"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-29T11:34:20.218Z","1.0.0":"2026-01-29T11:34:20.446Z","modified":"2026-01-29T11:34:20.654Z"},"maintainers":[{"name":"baris.gktp","email":"m.barisgoktepe@gmail.com"}],"description":"PayTR Payment Gateway - Modular Node.js/TypeScript SDK","keywords":["paytr","payment","gateway","turkey","turkiye","odeme","kredi-karti","credit-card","3d-secure"],"license":"MIT","readme":"# PayTR Node.js SDK\n\nPayTR ödeme geçidi için modüler Node.js/TypeScript SDK. React, Nuxt, Next.js ve Vue backend'lerinde kullanılabilir.\n\n## 🚀 Kurulum\n\n```bash\nnpm install paytr-node\n# veya\nyarn add paytr-node\n# veya\npnpm add paytr-node\n```\n\n## ⚙️ Yapılandırma\n\n```typescript\nimport { PayTR } from 'paytr-node';\n\nconst paytr = new PayTR({\n  merchantId: 'MAGAZA_NO',\n  merchantKey: 'API_KEY',\n  merchantSalt: 'API_SALT',\n  testMode: false, // Test modu (isteğe bağlı)\n  language: 'tr',  // Dil: 'tr' veya 'en' (isteğe bağlı)\n  debugMode: false // Debug modu (isteğe bağlı)\n});\n```\n\n## 📖 Kullanım\n\n### Direkt Ödeme (3D Secure)\n\n```typescript\n// Ödeme formu verilerini hazırla\nconst payment = paytr.preparePayment({\n  merchantOid: `ORDER-${Date.now()}`,\n  email: 'musteri@example.com',\n  paymentAmount: 100.99,\n  currency: 'TL',\n  basketItems: [\n    { name: 'Ürün 1', price: 50.00, quantity: 1 },\n    { name: 'Ürün 2', price: 25.50, quantity: 2 }\n  ],\n  user: {\n    name: 'Müşteri Adı',\n    address: 'Müşteri Adresi',\n    phone: '05551234567'\n  },\n  merchantOkUrl: 'https://site.com/odeme/basarili',\n  merchantFailUrl: 'https://site.com/odeme/hata',\n  userIp: '192.168.1.1', // İsteğe bağlı\n  installmentCount: 0,    // Taksit sayısı (0 = peşin)\n  non3d: false           // 3D'siz işlem\n});\n\n// payment.formAction -> Form action URL'i\n// payment.formData   -> Hidden input verileri\n// payment.token      -> PayTR token\n```\n\n### Ödeme Callback Doğrulama\n\n```typescript\n// Express.js / Next.js API Route\napp.post('/api/paytr/callback', (req, res) => {\n  const isValid = paytr.verifyCallback(req.body);\n  \n  if (!isValid) {\n    return res.status(400).send('Invalid hash');\n  }\n  \n  const { merchant_oid, status, total_amount, utoken } = req.body;\n  \n  if (status === 'success') {\n    // Siparişi onayla ve veritabanını güncelle\n    // utoken varsa kullanıcının kart token'ını kaydet\n  } else {\n    // Siparişi iptal et\n  }\n  \n  res.send('OK'); // PayTR'a bildirimi aldığımızı bildir\n});\n```\n\n### BIN Sorgulama\n\n```typescript\nconst result = await paytr.queryBIN('979203');\n\nif (result.status === 'success') {\n  console.log('Banka:', result.issuer_name);\n  console.log('Kart Tipi:', result.card_type);\n  console.log('Kart Ailesi:', result.card_family);\n}\n```\n\n### İade İşlemi\n\n```typescript\nconst result = await paytr.refund('ORDER-123', 50.00, 'REF-001');\n\nif (result.status === 'success') {\n  console.log('İade başarılı');\n} else {\n  console.error('Hata:', result.err_msg);\n}\n```\n\n### İşlem Dökümü\n\n```typescript\nconst startDate = new Date('2024-01-01');\nconst endDate = new Date('2024-01-03'); // Max 3 gün aralık\n\nconst result = await paytr.getTransactions(startDate, endDate);\n\nif (result.status === 'success' && result.transactions) {\n  result.transactions.forEach(tx => {\n    console.log(`${tx.merchant_oid}: ${tx.status} - ${tx.amount} ${tx.currency}`);\n  });\n}\n```\n\n### Kayıtlı Kartlar\n\n```typescript\n// Kart listesi\nconst cards = await paytr.listCards('user-token-xxx');\n\nif (cards.status === 'success' && cards.cards) {\n  cards.cards.forEach(card => {\n    console.log(`${card.bank_name} - ****${card.c_last_four}`);\n    console.log('CVV Gerekli:', card.require_cvv === '1');\n  });\n}\n\n// Kart silme\nconst deleteResult = await paytr.deleteCard('user-token-xxx', 'card-token-xxx');\n```\n\n### Kayıtlı Kart ile Ödeme\n\n```typescript\nconst payment = paytr.prepareStoredCardPayment({\n  merchantOid: `ORDER-${Date.now()}`,\n  email: 'musteri@example.com',\n  paymentAmount: 100.99,\n  currency: 'TL',\n  basketItems: [{ name: 'Ürün', price: 100.99, quantity: 1 }],\n  user: { name: 'Ad Soyad', address: 'Adres', phone: '05551234567' },\n  merchantOkUrl: 'https://site.com/basarili',\n  merchantFailUrl: 'https://site.com/hata',\n  utoken: 'user-token-xxx',\n  ctoken: 'card-token-xxx',\n  requireCvv: true // Eğer kart CVV gerektiriyorsa\n});\n```\n\n### Kart Saklayarak Ödeme\n\n```typescript\nconst payment = paytr.prepareSaveCardPayment({\n  merchantOid: `ORDER-${Date.now()}`,\n  email: 'musteri@example.com',\n  paymentAmount: 100.99,\n  currency: 'TL',\n  basketItems: [{ name: 'Ürün', price: 100.99, quantity: 1 }],\n  user: { name: 'Ad Soyad', address: 'Adres', phone: '05551234567' },\n  merchantOkUrl: 'https://site.com/basarili',\n  merchantFailUrl: 'https://site.com/hata',\n  storeCard: true,\n  utoken: 'existing-user-token' // Mevcut kullanıcı varsa\n});\n```\n\n### Tekrarlı Ödeme (Recurring)\n\n```typescript\nconst payment = paytr.prepareRecurringPayment({\n  merchantOid: `RECURRING-${Date.now()}`,\n  email: 'musteri@example.com',\n  paymentAmount: 49.99,\n  currency: 'TL',\n  basketItems: [{ name: 'Aylık Abonelik', price: 49.99, quantity: 1 }],\n  user: { name: 'Ad Soyad', address: 'Adres', phone: '05551234567' },\n  merchantOkUrl: 'https://site.com/basarili',\n  merchantFailUrl: 'https://site.com/hata',\n  utoken: 'user-token-xxx',\n  ctoken: 'card-token-xxx'\n});\n```\n\n### Sipariş Durumu Sorgulama\n\n```typescript\nconst result = await paytr.getOrderStatus('ORDER-123');\n\nif (result.status === 'success') {\n  console.log('Ödeme Durumu:', result.payment_status);\n  // 'waiting' | 'success' | 'failed'\n}\n```\n\n### Taksit Oranları\n\n```typescript\nconst result = await paytr.getInstallmentRates();\n\nif (result.status === 'success') {\n  console.log('Taksit Oranları:', result.raw);\n}\n```\n\n## 🔧 Next.js / Nuxt Entegrasyonu\n\n### Next.js API Route\n\n```typescript\n// app/api/payment/route.ts\nimport { PayTR } from 'paytr-node';\n\nconst paytr = new PayTR({\n  merchantId: process.env.PAYTR_MERCHANT_ID!,\n  merchantKey: process.env.PAYTR_MERCHANT_KEY!,\n  merchantSalt: process.env.PAYTR_MERCHANT_SALT!\n});\n\nexport async function POST(request: Request) {\n  const body = await request.json();\n  \n  const payment = paytr.preparePayment({\n    merchantOid: `ORDER-${Date.now()}`,\n    email: body.email,\n    paymentAmount: body.amount,\n    currency: 'TL',\n    basketItems: body.items,\n    user: body.user,\n    merchantOkUrl: `${process.env.NEXT_PUBLIC_URL}/payment/success`,\n    merchantFailUrl: `${process.env.NEXT_PUBLIC_URL}/payment/failed`,\n    userIp: request.headers.get('x-forwarded-for') || ''\n  });\n\n  return Response.json(payment);\n}\n```\n\n### Nuxt Server Route\n\n```typescript\n// server/api/payment.post.ts\nimport { PayTR } from 'paytr-node';\n\nconst paytr = new PayTR({\n  merchantId: process.env.PAYTR_MERCHANT_ID!,\n  merchantKey: process.env.PAYTR_MERCHANT_KEY!,\n  merchantSalt: process.env.PAYTR_MERCHANT_SALT!\n});\n\nexport default defineEventHandler(async (event) => {\n  const body = await readBody(event);\n  \n  const payment = paytr.preparePayment({\n    merchantOid: `ORDER-${Date.now()}`,\n    email: body.email,\n    paymentAmount: body.amount,\n    currency: 'TL',\n    basketItems: body.items,\n    user: body.user,\n    merchantOkUrl: `${process.env.NUXT_PUBLIC_URL}/odeme/basarili`,\n    merchantFailUrl: `${process.env.NUXT_PUBLIC_URL}/odeme/hata`,\n    userIp: getHeader(event, 'x-forwarded-for') || ''\n  });\n\n  return payment;\n});\n```\n\n## 📋 API Referansı\n\n| Metod | Açıklama |\n|-------|----------|\n| `preparePayment(options)` | Direkt ödeme formu hazırlar |\n| `prepareSaveCardPayment(options)` | Kart saklayarak ödeme formu hazırlar |\n| `prepareStoredCardPayment(options)` | Kayıtlı kart ile ödeme formu hazırlar |\n| `prepareRecurringPayment(options)` | Tekrarlı ödeme formu hazırlar |\n| `verifyCallback(callback)` | Ödeme bildirimini doğrular |\n| `queryBIN(binNumber)` | BIN sorgulama yapar |\n| `refund(merchantOid, amount, referenceNo?)` | İade işlemi yapar |\n| `getTransactions(startDate, endDate)` | İşlem dökümü getirir |\n| `listCards(utoken)` | Kayıtlı kartları listeler |\n| `deleteCard(utoken, ctoken)` | Kayıtlı kartı siler |\n| `getOrderStatus(merchantOid)` | Sipariş durumu sorgular |\n| `getInstallmentRates()` | Taksit oranlarını getirir |\n\n## 📝 Test Kartı\n\n```\nKart Numarası: 9792030394440796\nSon Kullanma: 12/24\nCVV: 000\n```\n\n## 📄 Lisans\n\nMIT\n","readmeFilename":"README.md","_rev":"1-d1506344fcdeeb05e2d0f15eb1530c3a"}