Core API
PayTRClient
PayTR Direct API ile doğrudan iletişim kuran düşük seviyeli istemci
Başlatma
import { PayTRClient } from '@vinenastudio/recurr'
const client = new PayTRClient({
merchantId: process.env.PAYTR_MERCHANT_ID!,
merchantKey: process.env.PAYTR_MERCHANT_KEY!,
merchantSalt: process.env.PAYTR_MERCHANT_SALT!,
testMode: false, // varsayılan: false
})Metodlar
prepareDirectPayment(params)
Direct API ödeme formu için gerekli token ve gizli alanları üretir. Kart verisi tarayıcıdan doğrudan PayTR'ye gönderilir, sunucunuzdan geçmez.
const result = await client.prepareDirectPayment({
userIp: '1.2.3.4',
merchantOid: 'DC0M3X7KQA3F2',
email: 'user@example.com',
paymentAmount: 9900, // 99.00 TRY
currency: 'TRY',
successUrl: 'https://example.com/billing/success',
failUrl: 'https://example.com/billing/checkout',
userBasket: [['Pro Plan', '99.00', 1]],
})
// result.paytrUrl → formun POST hedefi
// result.fields → forma enjekte edilecek gizli alanlarchargeStoredCard(params)
Kayıtlı kartı (utoken) kullanarak Non-3D tekrarlayan ödeme gerçekleştirir. Dahili olarak önce fetchCtoken() çağrılarak ctoken alınır, ardından ödeme yapılır.
const result = await client.chargeStoredCard({
utoken: 'paytr_user_token',
merchantOid: 'BPsub4f2a8b9cM3X7KQ2',
email: 'user@example.com',
paymentAmount: 9900,
currency: 'TRY',
userIp: '1.2.3.4',
userBasket: [['Pro Plan', '99.00', 1]],
})
// result.status → 'success' | 'failed'verifyWebhookHash(payload)
PayTR'den gelen webhook'un HMAC-SHA256 imzasını doğrular. timingSafeEqual() kullanılır.
const isValid = client.verifyWebhookHash({
merchant_oid: 'DC0M3X7KQA3F2',
status: 'success',
total_amount: '9900',
hash: payload.hash,
})utoken vs ctoken
| Token | Anlamı | Ömrü |
|---|---|---|
utoken | PayTR'deki kullanıcı kartı kasası | Kalıcı — Subscriber'da saklanır |
ctoken | Kasadaki belirli bir kart | Her ödeme öncesi CAPI LIST ile otomatik alınır |
chargeStoredCard() her çağrıda ctoken'i otomatik olarak çeker. Sadece utoken'i saklamanız yeterlidir.