paytr.js 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +306 -0
- package/dist/constants.d.ts +46 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +49 -0
- package/dist/constants.js.map +1 -0
- package/dist/index.d.ts +218 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +455 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +310 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +24 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +56 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +148 -0
- package/dist/utils.js.map +1 -0
- package/package.json +42 -0
package/README.md
ADDED
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
# PayTR Node.js SDK
|
|
2
|
+
|
|
3
|
+
PayTR ödeme geçidi için modüler Node.js/TypeScript SDK.
|
|
4
|
+
|
|
5
|
+
## Kurulum
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @baris.gktp/paytr
|
|
9
|
+
# veya
|
|
10
|
+
yarn add @baris.gktp/paytr
|
|
11
|
+
# veya
|
|
12
|
+
pnpm add @baris.gktp/paytr
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## ⚙️ Yapılandırma
|
|
16
|
+
|
|
17
|
+
```typescript
|
|
18
|
+
import { PayTR } from '@baris.gktp/paytr';
|
|
19
|
+
|
|
20
|
+
const paytr = new PayTR({
|
|
21
|
+
merchantId: 'MAGAZA_NO',
|
|
22
|
+
merchantKey: 'API_KEY',
|
|
23
|
+
merchantSalt: 'API_SALT',
|
|
24
|
+
testMode: false, // Test modu (isteğe bağlı)
|
|
25
|
+
language: 'tr', // Dil: 'tr' veya 'en' (isteğe bağlı)
|
|
26
|
+
debugMode: false // Debug modu (isteğe bağlı)
|
|
27
|
+
});
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## 📖 Kullanım
|
|
31
|
+
|
|
32
|
+
### Direkt Ödeme (3D Secure)
|
|
33
|
+
|
|
34
|
+
```typescript
|
|
35
|
+
// Ödeme formu verilerini hazırla
|
|
36
|
+
const payment = paytr.preparePayment({
|
|
37
|
+
merchantOid: `ORDER-${Date.now()}`,
|
|
38
|
+
email: 'musteri@example.com',
|
|
39
|
+
paymentAmount: 100.99,
|
|
40
|
+
currency: 'TL',
|
|
41
|
+
basketItems: [
|
|
42
|
+
{ name: 'Ürün 1', price: 50.00, quantity: 1 },
|
|
43
|
+
{ name: 'Ürün 2', price: 25.50, quantity: 2 }
|
|
44
|
+
],
|
|
45
|
+
user: {
|
|
46
|
+
name: 'Müşteri Adı',
|
|
47
|
+
address: 'Müşteri Adresi',
|
|
48
|
+
phone: '05551234567'
|
|
49
|
+
},
|
|
50
|
+
merchantOkUrl: 'https://site.com/odeme/basarili',
|
|
51
|
+
merchantFailUrl: 'https://site.com/odeme/hata',
|
|
52
|
+
userIp: '192.168.1.1', // İsteğe bağlı
|
|
53
|
+
installmentCount: 0, // Taksit sayısı (0 = peşin)
|
|
54
|
+
non3d: false // 3D'siz işlem
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
// payment.formAction -> Form action URL'i
|
|
58
|
+
// payment.formData -> Hidden input verileri
|
|
59
|
+
// payment.token -> PayTR token
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Ödeme Callback Doğrulama
|
|
63
|
+
|
|
64
|
+
```typescript
|
|
65
|
+
// Express.js / Next.js API Route
|
|
66
|
+
app.post('/api/paytr/callback', (req, res) => {
|
|
67
|
+
const isValid = paytr.verifyCallback(req.body);
|
|
68
|
+
|
|
69
|
+
if (!isValid) {
|
|
70
|
+
return res.status(400).send('Invalid hash');
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
const { merchant_oid, status, total_amount, utoken } = req.body;
|
|
74
|
+
|
|
75
|
+
if (status === 'success') {
|
|
76
|
+
// Siparişi onayla ve veritabanını güncelle
|
|
77
|
+
// utoken varsa kullanıcının kart token'ını kaydet
|
|
78
|
+
} else {
|
|
79
|
+
// Siparişi iptal et
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
res.send('OK'); // PayTR'a bildirimi aldığımızı bildir
|
|
83
|
+
});
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### BIN Sorgulama
|
|
87
|
+
|
|
88
|
+
```typescript
|
|
89
|
+
const result = await paytr.queryBIN('979203');
|
|
90
|
+
|
|
91
|
+
if (result.status === 'success') {
|
|
92
|
+
console.log('Banka:', result.issuer_name);
|
|
93
|
+
console.log('Kart Tipi:', result.card_type);
|
|
94
|
+
console.log('Kart Ailesi:', result.card_family);
|
|
95
|
+
}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### İade İşlemi
|
|
99
|
+
|
|
100
|
+
```typescript
|
|
101
|
+
const result = await paytr.refund('ORDER-123', 50.00, 'REF-001');
|
|
102
|
+
|
|
103
|
+
if (result.status === 'success') {
|
|
104
|
+
console.log('İade başarılı');
|
|
105
|
+
} else {
|
|
106
|
+
console.error('Hata:', result.err_msg);
|
|
107
|
+
}
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### İşlem Dökümü
|
|
111
|
+
|
|
112
|
+
```typescript
|
|
113
|
+
const startDate = new Date('2024-01-01');
|
|
114
|
+
const endDate = new Date('2024-01-03'); // Max 3 gün aralık
|
|
115
|
+
|
|
116
|
+
const result = await paytr.getTransactions(startDate, endDate);
|
|
117
|
+
|
|
118
|
+
if (result.status === 'success' && result.transactions) {
|
|
119
|
+
result.transactions.forEach(tx => {
|
|
120
|
+
console.log(`${tx.merchant_oid}: ${tx.status} - ${tx.amount} ${tx.currency}`);
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### Kayıtlı Kartlar
|
|
126
|
+
|
|
127
|
+
```typescript
|
|
128
|
+
// Kart listesi
|
|
129
|
+
const cards = await paytr.listCards('user-token-xxx');
|
|
130
|
+
|
|
131
|
+
if (cards.status === 'success' && cards.cards) {
|
|
132
|
+
cards.cards.forEach(card => {
|
|
133
|
+
console.log(`${card.bank_name} - ****${card.c_last_four}`);
|
|
134
|
+
console.log('CVV Gerekli:', card.require_cvv === '1');
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// Kart silme
|
|
139
|
+
const deleteResult = await paytr.deleteCard('user-token-xxx', 'card-token-xxx');
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### Kayıtlı Kart ile Ödeme
|
|
143
|
+
|
|
144
|
+
```typescript
|
|
145
|
+
const payment = paytr.prepareStoredCardPayment({
|
|
146
|
+
merchantOid: `ORDER-${Date.now()}`,
|
|
147
|
+
email: 'musteri@example.com',
|
|
148
|
+
paymentAmount: 100.99,
|
|
149
|
+
currency: 'TL',
|
|
150
|
+
basketItems: [{ name: 'Ürün', price: 100.99, quantity: 1 }],
|
|
151
|
+
user: { name: 'Ad Soyad', address: 'Adres', phone: '05551234567' },
|
|
152
|
+
merchantOkUrl: 'https://site.com/basarili',
|
|
153
|
+
merchantFailUrl: 'https://site.com/hata',
|
|
154
|
+
utoken: 'user-token-xxx',
|
|
155
|
+
ctoken: 'card-token-xxx',
|
|
156
|
+
requireCvv: true // Eğer kart CVV gerektiriyorsa
|
|
157
|
+
});
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
### Kart Saklayarak Ödeme
|
|
161
|
+
|
|
162
|
+
```typescript
|
|
163
|
+
const payment = paytr.prepareSaveCardPayment({
|
|
164
|
+
merchantOid: `ORDER-${Date.now()}`,
|
|
165
|
+
email: 'musteri@example.com',
|
|
166
|
+
paymentAmount: 100.99,
|
|
167
|
+
currency: 'TL',
|
|
168
|
+
basketItems: [{ name: 'Ürün', price: 100.99, quantity: 1 }],
|
|
169
|
+
user: { name: 'Ad Soyad', address: 'Adres', phone: '05551234567' },
|
|
170
|
+
merchantOkUrl: 'https://site.com/basarili',
|
|
171
|
+
merchantFailUrl: 'https://site.com/hata',
|
|
172
|
+
storeCard: true,
|
|
173
|
+
utoken: 'existing-user-token' // Mevcut kullanıcı varsa
|
|
174
|
+
});
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### Tekrarlı Ödeme (Recurring)
|
|
178
|
+
|
|
179
|
+
```typescript
|
|
180
|
+
const payment = paytr.prepareRecurringPayment({
|
|
181
|
+
merchantOid: `RECURRING-${Date.now()}`,
|
|
182
|
+
email: 'musteri@example.com',
|
|
183
|
+
paymentAmount: 49.99,
|
|
184
|
+
currency: 'TL',
|
|
185
|
+
basketItems: [{ name: 'Aylık Abonelik', price: 49.99, quantity: 1 }],
|
|
186
|
+
user: { name: 'Ad Soyad', address: 'Adres', phone: '05551234567' },
|
|
187
|
+
merchantOkUrl: 'https://site.com/basarili',
|
|
188
|
+
merchantFailUrl: 'https://site.com/hata',
|
|
189
|
+
utoken: 'user-token-xxx',
|
|
190
|
+
ctoken: 'card-token-xxx'
|
|
191
|
+
});
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### Sipariş Durumu Sorgulama
|
|
195
|
+
|
|
196
|
+
```typescript
|
|
197
|
+
const result = await paytr.getOrderStatus('ORDER-123');
|
|
198
|
+
|
|
199
|
+
if (result.status === 'success') {
|
|
200
|
+
console.log('Ödeme Durumu:', result.payment_status);
|
|
201
|
+
// 'waiting' | 'success' | 'failed'
|
|
202
|
+
}
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
### Taksit Oranları
|
|
206
|
+
|
|
207
|
+
```typescript
|
|
208
|
+
const result = await paytr.getInstallmentRates();
|
|
209
|
+
|
|
210
|
+
if (result.status === 'success') {
|
|
211
|
+
console.log('Taksit Oranları:', result.raw);
|
|
212
|
+
}
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
## 🔧 Next.js / Nuxt Entegrasyonu
|
|
216
|
+
|
|
217
|
+
### Next.js API Route
|
|
218
|
+
|
|
219
|
+
```typescript
|
|
220
|
+
// app/api/payment/route.ts
|
|
221
|
+
import { PayTR } from '@baris.gktp/paytr';
|
|
222
|
+
|
|
223
|
+
const paytr = new PayTR({
|
|
224
|
+
merchantId: process.env.PAYTR_MERCHANT_ID!,
|
|
225
|
+
merchantKey: process.env.PAYTR_MERCHANT_KEY!,
|
|
226
|
+
merchantSalt: process.env.PAYTR_MERCHANT_SALT!
|
|
227
|
+
});
|
|
228
|
+
|
|
229
|
+
export async function POST(request: Request) {
|
|
230
|
+
const body = await request.json();
|
|
231
|
+
|
|
232
|
+
const payment = paytr.preparePayment({
|
|
233
|
+
merchantOid: `ORDER-${Date.now()}`,
|
|
234
|
+
email: body.email,
|
|
235
|
+
paymentAmount: body.amount,
|
|
236
|
+
currency: 'TL',
|
|
237
|
+
basketItems: body.items,
|
|
238
|
+
user: body.user,
|
|
239
|
+
merchantOkUrl: `${process.env.NEXT_PUBLIC_URL}/payment/success`,
|
|
240
|
+
merchantFailUrl: `${process.env.NEXT_PUBLIC_URL}/payment/failed`,
|
|
241
|
+
userIp: request.headers.get('x-forwarded-for') || ''
|
|
242
|
+
});
|
|
243
|
+
|
|
244
|
+
return Response.json(payment);
|
|
245
|
+
}
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
### Nuxt Server Route
|
|
249
|
+
|
|
250
|
+
```typescript
|
|
251
|
+
// server/api/payment.post.ts
|
|
252
|
+
import { PayTR } from '@baris.gktp/paytr';
|
|
253
|
+
|
|
254
|
+
const paytr = new PayTR({
|
|
255
|
+
merchantId: process.env.PAYTR_MERCHANT_ID!,
|
|
256
|
+
merchantKey: process.env.PAYTR_MERCHANT_KEY!,
|
|
257
|
+
merchantSalt: process.env.PAYTR_MERCHANT_SALT!
|
|
258
|
+
});
|
|
259
|
+
|
|
260
|
+
export default defineEventHandler(async (event) => {
|
|
261
|
+
const body = await readBody(event);
|
|
262
|
+
|
|
263
|
+
const payment = paytr.preparePayment({
|
|
264
|
+
merchantOid: `ORDER-${Date.now()}`,
|
|
265
|
+
email: body.email,
|
|
266
|
+
paymentAmount: body.amount,
|
|
267
|
+
currency: 'TL',
|
|
268
|
+
basketItems: body.items,
|
|
269
|
+
user: body.user,
|
|
270
|
+
merchantOkUrl: `${process.env.NUXT_PUBLIC_URL}/odeme/basarili`,
|
|
271
|
+
merchantFailUrl: `${process.env.NUXT_PUBLIC_URL}/odeme/hata`,
|
|
272
|
+
userIp: getHeader(event, 'x-forwarded-for') || ''
|
|
273
|
+
});
|
|
274
|
+
|
|
275
|
+
return payment;
|
|
276
|
+
});
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
## 📋 API Referansı
|
|
280
|
+
|
|
281
|
+
| Metod | Açıklama |
|
|
282
|
+
|-------|----------|
|
|
283
|
+
| `preparePayment(options)` | Direkt ödeme formu hazırlar |
|
|
284
|
+
| `prepareSaveCardPayment(options)` | Kart saklayarak ödeme formu hazırlar |
|
|
285
|
+
| `prepareStoredCardPayment(options)` | Kayıtlı kart ile ödeme formu hazırlar |
|
|
286
|
+
| `prepareRecurringPayment(options)` | Tekrarlı ödeme formu hazırlar |
|
|
287
|
+
| `verifyCallback(callback)` | Ödeme bildirimini doğrular |
|
|
288
|
+
| `queryBIN(binNumber)` | BIN sorgulama yapar |
|
|
289
|
+
| `refund(merchantOid, amount, referenceNo?)` | İade işlemi yapar |
|
|
290
|
+
| `getTransactions(startDate, endDate)` | İşlem dökümü getirir |
|
|
291
|
+
| `listCards(utoken)` | Kayıtlı kartları listeler |
|
|
292
|
+
| `deleteCard(utoken, ctoken)` | Kayıtlı kartı siler |
|
|
293
|
+
| `getOrderStatus(merchantOid)` | Sipariş durumu sorgular |
|
|
294
|
+
| `getInstallmentRates()` | Taksit oranlarını getirir |
|
|
295
|
+
|
|
296
|
+
## 📝 Test Kartı
|
|
297
|
+
|
|
298
|
+
```
|
|
299
|
+
Kart Numarası: 9792030394440796
|
|
300
|
+
Son Kullanma: 12/24
|
|
301
|
+
CVV: 000
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
## 📄 Lisans
|
|
305
|
+
|
|
306
|
+
MIT
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PayTR API Endpoints and Default Values
|
|
3
|
+
*/
|
|
4
|
+
/** PayTR API base URL */
|
|
5
|
+
export declare const PAYTR_BASE_URL = "https://www.paytr.com";
|
|
6
|
+
/** PayTR API Endpoints */
|
|
7
|
+
export declare const ENDPOINTS: {
|
|
8
|
+
/** Ödeme formu gönderim URL'i */
|
|
9
|
+
readonly PAYMENT_FORM: "https://www.paytr.com/odeme";
|
|
10
|
+
/** BIN sorgulama */
|
|
11
|
+
readonly BIN_QUERY: "https://www.paytr.com/odeme/api/bin-detail";
|
|
12
|
+
/** İade işlemi */
|
|
13
|
+
readonly REFUND: "https://www.paytr.com/odeme/iade";
|
|
14
|
+
/** İşlem dökümü */
|
|
15
|
+
readonly TRANSACTION_LOG: "https://www.paytr.com/rapor/islem-dokumu";
|
|
16
|
+
/** Kayıtlı kart listesi */
|
|
17
|
+
readonly CARD_LIST: "https://www.paytr.com/odeme/capi/list";
|
|
18
|
+
/** Kart silme */
|
|
19
|
+
readonly CARD_DELETE: "https://www.paytr.com/odeme/capi/delete";
|
|
20
|
+
/** Sipariş durumu */
|
|
21
|
+
readonly ORDER_STATUS: "https://www.paytr.com/odeme/durum-sorgu";
|
|
22
|
+
/** Taksit oranları */
|
|
23
|
+
readonly INSTALLMENT_RATES: "https://www.paytr.com/odeme/taksit-oranlari";
|
|
24
|
+
};
|
|
25
|
+
/** Varsayılan değerler */
|
|
26
|
+
export declare const DEFAULTS: {
|
|
27
|
+
/** Varsayılan dil */
|
|
28
|
+
readonly LANGUAGE: "tr";
|
|
29
|
+
/** Varsayılan para birimi */
|
|
30
|
+
readonly CURRENCY: "TL";
|
|
31
|
+
/** Varsayılan ödeme tipi */
|
|
32
|
+
readonly PAYMENT_TYPE: "card";
|
|
33
|
+
/** Varsayılan taksit sayısı (peşin) */
|
|
34
|
+
readonly INSTALLMENT_COUNT: 0;
|
|
35
|
+
/** Debug modu kapalı */
|
|
36
|
+
readonly DEBUG_MODE: false;
|
|
37
|
+
/** Test modu kapalı */
|
|
38
|
+
readonly TEST_MODE: false;
|
|
39
|
+
/** 3D güvenlik aktif */
|
|
40
|
+
readonly NON_3D: false;
|
|
41
|
+
};
|
|
42
|
+
/** HTTP Headers */
|
|
43
|
+
export declare const HEADERS: {
|
|
44
|
+
readonly 'Content-Type': "application/x-www-form-urlencoded";
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,yBAAyB;AACzB,eAAO,MAAM,cAAc,0BAA0B,CAAC;AAEtD,0BAA0B;AAC1B,eAAO,MAAM,SAAS;IACpB,iCAAiC;;IAGjC,oBAAoB;;IAGpB,kBAAkB;;IAGlB,mBAAmB;;IAGnB,2BAA2B;;IAG3B,iBAAiB;;IAGjB,qBAAqB;;IAGrB,sBAAsB;;CAEd,CAAC;AAEX,0BAA0B;AAC1B,eAAO,MAAM,QAAQ;IACnB,qBAAqB;;IAGrB,6BAA6B;;IAG7B,4BAA4B;;IAG5B,uCAAuC;;IAGvC,wBAAwB;;IAGxB,uBAAuB;;IAGvB,wBAAwB;;CAEhB,CAAC;AAEX,mBAAmB;AACnB,eAAO,MAAM,OAAO;;CAEV,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* PayTR API Endpoints and Default Values
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.HEADERS = exports.DEFAULTS = exports.ENDPOINTS = exports.PAYTR_BASE_URL = void 0;
|
|
7
|
+
/** PayTR API base URL */
|
|
8
|
+
exports.PAYTR_BASE_URL = 'https://www.paytr.com';
|
|
9
|
+
/** PayTR API Endpoints */
|
|
10
|
+
exports.ENDPOINTS = {
|
|
11
|
+
/** Ödeme formu gönderim URL'i */
|
|
12
|
+
PAYMENT_FORM: `${exports.PAYTR_BASE_URL}/odeme`,
|
|
13
|
+
/** BIN sorgulama */
|
|
14
|
+
BIN_QUERY: `${exports.PAYTR_BASE_URL}/odeme/api/bin-detail`,
|
|
15
|
+
/** İade işlemi */
|
|
16
|
+
REFUND: `${exports.PAYTR_BASE_URL}/odeme/iade`,
|
|
17
|
+
/** İşlem dökümü */
|
|
18
|
+
TRANSACTION_LOG: `${exports.PAYTR_BASE_URL}/rapor/islem-dokumu`,
|
|
19
|
+
/** Kayıtlı kart listesi */
|
|
20
|
+
CARD_LIST: `${exports.PAYTR_BASE_URL}/odeme/capi/list`,
|
|
21
|
+
/** Kart silme */
|
|
22
|
+
CARD_DELETE: `${exports.PAYTR_BASE_URL}/odeme/capi/delete`,
|
|
23
|
+
/** Sipariş durumu */
|
|
24
|
+
ORDER_STATUS: `${exports.PAYTR_BASE_URL}/odeme/durum-sorgu`,
|
|
25
|
+
/** Taksit oranları */
|
|
26
|
+
INSTALLMENT_RATES: `${exports.PAYTR_BASE_URL}/odeme/taksit-oranlari`,
|
|
27
|
+
};
|
|
28
|
+
/** Varsayılan değerler */
|
|
29
|
+
exports.DEFAULTS = {
|
|
30
|
+
/** Varsayılan dil */
|
|
31
|
+
LANGUAGE: 'tr',
|
|
32
|
+
/** Varsayılan para birimi */
|
|
33
|
+
CURRENCY: 'TL',
|
|
34
|
+
/** Varsayılan ödeme tipi */
|
|
35
|
+
PAYMENT_TYPE: 'card',
|
|
36
|
+
/** Varsayılan taksit sayısı (peşin) */
|
|
37
|
+
INSTALLMENT_COUNT: 0,
|
|
38
|
+
/** Debug modu kapalı */
|
|
39
|
+
DEBUG_MODE: false,
|
|
40
|
+
/** Test modu kapalı */
|
|
41
|
+
TEST_MODE: false,
|
|
42
|
+
/** 3D güvenlik aktif */
|
|
43
|
+
NON_3D: false,
|
|
44
|
+
};
|
|
45
|
+
/** HTTP Headers */
|
|
46
|
+
exports.HEADERS = {
|
|
47
|
+
'Content-Type': 'application/x-www-form-urlencoded',
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,yBAAyB;AACZ,QAAA,cAAc,GAAG,uBAAuB,CAAC;AAEtD,0BAA0B;AACb,QAAA,SAAS,GAAG;IACvB,iCAAiC;IACjC,YAAY,EAAE,GAAG,sBAAc,QAAQ;IAEvC,oBAAoB;IACpB,SAAS,EAAE,GAAG,sBAAc,uBAAuB;IAEnD,kBAAkB;IAClB,MAAM,EAAE,GAAG,sBAAc,aAAa;IAEtC,mBAAmB;IACnB,eAAe,EAAE,GAAG,sBAAc,qBAAqB;IAEvD,2BAA2B;IAC3B,SAAS,EAAE,GAAG,sBAAc,kBAAkB;IAE9C,iBAAiB;IACjB,WAAW,EAAE,GAAG,sBAAc,oBAAoB;IAElD,qBAAqB;IACrB,YAAY,EAAE,GAAG,sBAAc,oBAAoB;IAEnD,sBAAsB;IACtB,iBAAiB,EAAE,GAAG,sBAAc,wBAAwB;CACpD,CAAC;AAEX,0BAA0B;AACb,QAAA,QAAQ,GAAG;IACtB,qBAAqB;IACrB,QAAQ,EAAE,IAAa;IAEvB,6BAA6B;IAC7B,QAAQ,EAAE,IAAa;IAEvB,4BAA4B;IAC5B,YAAY,EAAE,MAAe;IAE7B,uCAAuC;IACvC,iBAAiB,EAAE,CAAC;IAEpB,wBAAwB;IACxB,UAAU,EAAE,KAAK;IAEjB,uBAAuB;IACvB,SAAS,EAAE,KAAK;IAEhB,wBAAwB;IACxB,MAAM,EAAE,KAAK;CACL,CAAC;AAEX,mBAAmB;AACN,QAAA,OAAO,GAAG;IACrB,cAAc,EAAE,mCAAmC;CAC3C,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PayTR Node.js SDK
|
|
3
|
+
*
|
|
4
|
+
* PayTR ödeme geçidi için modüler Node.js/TypeScript SDK.
|
|
5
|
+
* React, Nuxt, Next.js ve Vue backend'lerinde kullanılabilir.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { PayTR } from 'paytr-node';
|
|
10
|
+
*
|
|
11
|
+
* const paytr = new PayTR({
|
|
12
|
+
* merchantId: 'YOUR_MERCHANT_ID',
|
|
13
|
+
* merchantKey: 'YOUR_MERCHANT_KEY',
|
|
14
|
+
* merchantSalt: 'YOUR_MERCHANT_SALT'
|
|
15
|
+
* });
|
|
16
|
+
*
|
|
17
|
+
* // Ödeme formu hazırla
|
|
18
|
+
* const payment = paytr.preparePayment({
|
|
19
|
+
* merchantOid: 'ORDER-123',
|
|
20
|
+
* email: 'customer@example.com',
|
|
21
|
+
* paymentAmount: 100.99,
|
|
22
|
+
* currency: 'TL',
|
|
23
|
+
* basketItems: [{ name: 'Ürün', price: 100.99, quantity: 1 }],
|
|
24
|
+
* user: { name: 'Müşteri Adı', address: 'Adres', phone: '05551234567' },
|
|
25
|
+
* merchantOkUrl: 'https://site.com/basarili',
|
|
26
|
+
* merchantFailUrl: 'https://site.com/hata'
|
|
27
|
+
* });
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
import type { PayTRConfig, PaymentOptions, SaveCardPaymentOptions, StoredCardPaymentOptions, RecurringPaymentOptions, PreparedPayment, PaymentCallback, BINQueryResult, RefundResult, TransactionLogResult, CardListResult, DeleteCardResult, OrderStatusResult, InstallmentRatesResult } from './types';
|
|
31
|
+
/**
|
|
32
|
+
* PayTR SDK ana sınıfı
|
|
33
|
+
*/
|
|
34
|
+
export declare class PayTR {
|
|
35
|
+
private readonly config;
|
|
36
|
+
/**
|
|
37
|
+
* PayTR SDK'yı başlatır
|
|
38
|
+
* @param config - Mağaza yapılandırması
|
|
39
|
+
*/
|
|
40
|
+
constructor(config: PayTRConfig);
|
|
41
|
+
/**
|
|
42
|
+
* Direkt ödeme için form verilerini hazırlar
|
|
43
|
+
*
|
|
44
|
+
* @param options - Ödeme parametreleri
|
|
45
|
+
* @returns Form verileri ve token
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* ```typescript
|
|
49
|
+
* const payment = paytr.preparePayment({
|
|
50
|
+
* merchantOid: 'ORDER-123',
|
|
51
|
+
* email: 'customer@example.com',
|
|
52
|
+
* paymentAmount: 100.99,
|
|
53
|
+
* currency: 'TL',
|
|
54
|
+
* basketItems: [{ name: 'Ürün', price: 100.99, quantity: 1 }],
|
|
55
|
+
* user: { name: 'Ad Soyad', address: 'Adres', phone: '05551234567' },
|
|
56
|
+
* merchantOkUrl: 'https://site.com/basarili',
|
|
57
|
+
* merchantFailUrl: 'https://site.com/hata'
|
|
58
|
+
* });
|
|
59
|
+
*
|
|
60
|
+
* // Frontend'de form oluştur ve gönder
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
preparePayment(options: PaymentOptions): PreparedPayment;
|
|
64
|
+
/**
|
|
65
|
+
* Kart saklayarak ödeme için form verilerini hazırlar
|
|
66
|
+
*
|
|
67
|
+
* @param options - Ödeme parametreleri (storeCard: true olmalı)
|
|
68
|
+
* @returns Form verileri ve token
|
|
69
|
+
*/
|
|
70
|
+
prepareSaveCardPayment(options: SaveCardPaymentOptions): PreparedPayment;
|
|
71
|
+
/**
|
|
72
|
+
* Kayıtlı kart ile ödeme için form verilerini hazırlar
|
|
73
|
+
*
|
|
74
|
+
* @param options - Kayıtlı kart ödeme parametreleri
|
|
75
|
+
* @returns Form verileri ve token
|
|
76
|
+
*/
|
|
77
|
+
prepareStoredCardPayment(options: StoredCardPaymentOptions): PreparedPayment;
|
|
78
|
+
/**
|
|
79
|
+
* Tekrarlı ödeme için form verilerini hazırlar
|
|
80
|
+
*
|
|
81
|
+
* @param options - Tekrarlı ödeme parametreleri
|
|
82
|
+
* @returns Form verileri ve token
|
|
83
|
+
*/
|
|
84
|
+
prepareRecurringPayment(options: RecurringPaymentOptions): PreparedPayment;
|
|
85
|
+
/**
|
|
86
|
+
* PayTR ödeme bildirimini doğrular
|
|
87
|
+
*
|
|
88
|
+
* @param callback - PayTR'dan gelen callback verisi
|
|
89
|
+
* @returns Doğrulama başarılı mı?
|
|
90
|
+
*
|
|
91
|
+
* @example
|
|
92
|
+
* ```typescript
|
|
93
|
+
* // Express/Next.js API route
|
|
94
|
+
* app.post('/api/paytr/callback', (req, res) => {
|
|
95
|
+
* const isValid = paytr.verifyCallback(req.body);
|
|
96
|
+
*
|
|
97
|
+
* if (!isValid) {
|
|
98
|
+
* return res.status(400).send('Invalid hash');
|
|
99
|
+
* }
|
|
100
|
+
*
|
|
101
|
+
* if (req.body.status === 'success') {
|
|
102
|
+
* // Siparişi onayla
|
|
103
|
+
* }
|
|
104
|
+
*
|
|
105
|
+
* res.send('OK');
|
|
106
|
+
* });
|
|
107
|
+
* ```
|
|
108
|
+
*/
|
|
109
|
+
verifyCallback(callback: PaymentCallback): boolean;
|
|
110
|
+
/**
|
|
111
|
+
* Kart BIN numarasını sorgular
|
|
112
|
+
*
|
|
113
|
+
* @param binNumber - Kartın ilk 6 veya 8 hanesi
|
|
114
|
+
* @returns BIN sorgu sonucu
|
|
115
|
+
*
|
|
116
|
+
* @example
|
|
117
|
+
* ```typescript
|
|
118
|
+
* const result = await paytr.queryBIN('979203');
|
|
119
|
+
* if (result.status === 'success') {
|
|
120
|
+
* console.log('Banka:', result.issuer_name);
|
|
121
|
+
* console.log('Kart Tipi:', result.card_type);
|
|
122
|
+
* }
|
|
123
|
+
* ```
|
|
124
|
+
*/
|
|
125
|
+
queryBIN(binNumber: string): Promise<BINQueryResult>;
|
|
126
|
+
/**
|
|
127
|
+
* Ödeme iadesi yapar
|
|
128
|
+
*
|
|
129
|
+
* @param merchantOid - Sipariş numarası
|
|
130
|
+
* @param returnAmount - İade tutarı
|
|
131
|
+
* @param referenceNo - Referans numarası (isteğe bağlı)
|
|
132
|
+
* @returns İade sonucu
|
|
133
|
+
*
|
|
134
|
+
* @example
|
|
135
|
+
* ```typescript
|
|
136
|
+
* const result = await paytr.refund('ORDER-123', 50.00);
|
|
137
|
+
* if (result.status === 'success') {
|
|
138
|
+
* console.log('İade başarılı');
|
|
139
|
+
* }
|
|
140
|
+
* ```
|
|
141
|
+
*/
|
|
142
|
+
refund(merchantOid: string, returnAmount: number, referenceNo?: string): Promise<RefundResult>;
|
|
143
|
+
/**
|
|
144
|
+
* İşlem dökümünü getirir (max 3 gün aralık)
|
|
145
|
+
*
|
|
146
|
+
* @param startDate - Başlangıç tarihi
|
|
147
|
+
* @param endDate - Bitiş tarihi
|
|
148
|
+
* @returns İşlem dökümü
|
|
149
|
+
*
|
|
150
|
+
* @example
|
|
151
|
+
* ```typescript
|
|
152
|
+
* const start = new Date('2024-01-01');
|
|
153
|
+
* const end = new Date('2024-01-03');
|
|
154
|
+
* const result = await paytr.getTransactions(start, end);
|
|
155
|
+
* ```
|
|
156
|
+
*/
|
|
157
|
+
getTransactions(startDate: Date, endDate: Date): Promise<TransactionLogResult>;
|
|
158
|
+
/**
|
|
159
|
+
* Kullanıcının kayıtlı kartlarını listeler
|
|
160
|
+
*
|
|
161
|
+
* @param utoken - Kullanıcı token'ı
|
|
162
|
+
* @returns Kart listesi
|
|
163
|
+
*
|
|
164
|
+
* @example
|
|
165
|
+
* ```typescript
|
|
166
|
+
* const result = await paytr.listCards('user-token-xxx');
|
|
167
|
+
* if (result.status === 'success' && result.cards) {
|
|
168
|
+
* result.cards.forEach(card => {
|
|
169
|
+
* console.log(`${card.bank_name} - ****${card.c_last_four}`);
|
|
170
|
+
* });
|
|
171
|
+
* }
|
|
172
|
+
* ```
|
|
173
|
+
*/
|
|
174
|
+
listCards(utoken: string): Promise<CardListResult>;
|
|
175
|
+
/**
|
|
176
|
+
* Kayıtlı kartı siler
|
|
177
|
+
*
|
|
178
|
+
* @param utoken - Kullanıcı token'ı
|
|
179
|
+
* @param ctoken - Kart token'ı
|
|
180
|
+
* @returns Silme sonucu
|
|
181
|
+
*
|
|
182
|
+
* @example
|
|
183
|
+
* ```typescript
|
|
184
|
+
* const result = await paytr.deleteCard('user-token', 'card-token');
|
|
185
|
+
* ```
|
|
186
|
+
*/
|
|
187
|
+
deleteCard(utoken: string, ctoken: string): Promise<DeleteCardResult>;
|
|
188
|
+
/**
|
|
189
|
+
* Sipariş durumunu sorgular
|
|
190
|
+
*
|
|
191
|
+
* @param merchantOid - Sipariş numarası
|
|
192
|
+
* @returns Sipariş durumu
|
|
193
|
+
*
|
|
194
|
+
* @example
|
|
195
|
+
* ```typescript
|
|
196
|
+
* const result = await paytr.getOrderStatus('ORDER-123');
|
|
197
|
+
* console.log('Durum:', result.payment_status);
|
|
198
|
+
* ```
|
|
199
|
+
*/
|
|
200
|
+
getOrderStatus(merchantOid: string): Promise<OrderStatusResult>;
|
|
201
|
+
/**
|
|
202
|
+
* Taksit oranlarını getirir
|
|
203
|
+
*
|
|
204
|
+
* @returns Taksit oranları
|
|
205
|
+
*
|
|
206
|
+
* @example
|
|
207
|
+
* ```typescript
|
|
208
|
+
* const result = await paytr.getInstallmentRates();
|
|
209
|
+
* if (result.status === 'success') {
|
|
210
|
+
* console.log('Taksit oranları:', result.raw);
|
|
211
|
+
* }
|
|
212
|
+
* ```
|
|
213
|
+
*/
|
|
214
|
+
getInstallmentRates(): Promise<InstallmentRatesResult>;
|
|
215
|
+
}
|
|
216
|
+
export * from './types';
|
|
217
|
+
export { ENDPOINTS, DEFAULTS } from './constants';
|
|
218
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAYH,OAAO,KAAK,EACV,WAAW,EACX,cAAc,EACd,sBAAsB,EACtB,wBAAwB,EACxB,uBAAuB,EACvB,eAAe,EACf,eAAe,EACf,cAAc,EACd,YAAY,EACZ,oBAAoB,EACpB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,EACvB,MAAM,SAAS,CAAC;AAGjB;;GAEG;AACH,qBAAa,KAAK;IAChB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwB;IAE/C;;;OAGG;gBACS,MAAM,EAAE,WAAW;IAe/B;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,eAAe;IAwDxD;;;;;OAKG;IACH,sBAAsB,CAAC,OAAO,EAAE,sBAAsB,GAAG,eAAe;IAYxE;;;;;OAKG;IACH,wBAAwB,CAAC,OAAO,EAAE,wBAAwB,GAAG,eAAe;IAiB5E;;;;;OAKG;IACH,uBAAuB,CAAC,OAAO,EAAE,uBAAuB,GAAG,eAAe;IAe1E;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,cAAc,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO;IAgBlD;;;;;;;;;;;;;;OAcG;IACG,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAe1D;;;;;;;;;;;;;;;OAeG;IACG,MAAM,CACV,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,YAAY,CAAC;IA4BxB;;;;;;;;;;;;;OAaG;IACG,eAAe,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAwBpF;;;;;;;;;;;;;;;OAeG;IACG,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAWxD;;;;;;;;;;;OAWG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAgB3E;;;;;;;;;;;OAWG;IACG,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAmBrE;;;;;;;;;;;;OAYG;IACG,mBAAmB,IAAI,OAAO,CAAC,sBAAsB,CAAC;CA4B7D;AAGD,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC"}
|