Laravel projeleri için güvenli, modern ve tam kapsamlı PayTR ödeme entegrasyon paketi.
Neden bu dokümantasyonu kullanmalısınız?
composer require paytr/laravel-client
// config/app.php
'providers' => [
Paytr\PaytrServiceProvider::class,
],
php artisan vendor:publish --tag=paytr-config
# PayTR Konfigürasyonu
PAYTR_MERCHANT_ID=your_merchant_id
PAYTR_MERCHANT_KEY=your_merchant_key
PAYTR_MERCHANT_SALT=your_merchant_salt
PAYTR_SANDBOX=true
PAYTR_DEBUG=true
# API URL'leri
PAYTR_API_URL=https://www.paytr.com/odeme/api/
PAYTR_DIRECT_API_URL=https://www.paytr.com/odeme
PAYTR_IFRAME_API_URL=https://www.paytr.com/odeme/api/get-token
# Webhook ayarları
PAYTR_WEBHOOK_SECRET=your_webhook_secret
PAYTR_ALLOWED_IPS=
PAYTR_DIRECT_API_URL
değeri https://www.paytr.com/odeme
olmalıdır. Bu URL, Direct API ödemeleri için kullanılır.
PayTR servislerine facade veya dependency injection ile erişebilirsiniz. Örnekler:
// Facade ile ödeme başlatma
use Paytr\Facades\Paytr;
$result = Paytr::payment()->pay($payload);
// Dependency Injection ile
public function __construct(Paytr\Services\PaymentService $paymentService) {
$this->paymentService = $paymentService;
}
Özellik | Direct API | iFrame API |
---|---|---|
Kart Bilgileri | Zorunlu (sunucu tarafında) | Gerekmez (kullanıcı PayTR sayfasında girer) |
3D Secure | Otomatik (kullanıcı banka sayfasına yönlendirilir) | Otomatik (iFrame içinde) |
Güvenlik | Yüksek (kart bilgileri sunucuda işlenir) | Yüksek (PayTR'ın güvenli sayfası) |
Kullanım Kolaylığı | Orta (kart bilgileri toplama gerekir) | Kolay (kart bilgileri toplamaya gerek yok) |
PCI DSS | Gerekli (kart bilgileri işlenir) | Gerekmez (kart bilgileri işlenmez) |
pay(array $payload): array fonksiyonu, PayTR Direct API ile ödeme başlatmanızı sağlar. Direct API, kart bilgilerini sunucu tarafında işler ve 3D Secure doğrulaması gerektirir. Tüm zorunlu ve opsiyonel parametreler, dönüş değerleri ve hata yönetimi aşağıda detaylıca açıklanmıştır.
merchant_id
,
user_ip
, test_mode
, debug_on
, client_lang
Başarılı işlemde aşağıdaki gibi bir dizi döner:
[
'status' => 'success',
'token' => 'Ödeme tokeni',
// Diğer PayTR yanıt parametreleri
]
Başarısız işlemde PaytrException fırlatılır ve hata mesajı döner.
use Paytr\Facades\Paytr;
$payload = [
// Zorunlu parametreler (otomatik alınır: merchant_id, user_ip, test_mode, debug_on, client_lang)
'merchant_oid' => 'TEST_' . time(), // Benzersiz sipariş numarası
'email' => 'user@example.com',
'payment_amount' => 100.00, // PayTR'de ondalık nokta kullanılır
'payment_type' => 'card',
'installment_count' => 0,
'currency' => 'TL',
'non_3d' => 0,
'request_exp_date' => date('Y-m-d H:i:s', strtotime('+1 hour')),
// Müşteri bilgileri
'user_name' => 'Test Kullanıcı',
'user_address' => 'Adres',
'user_phone' => '5551234567',
// URL'ler (doğru isimlendirme)
'merchant_ok_url' => 'https://site.com/success',
'merchant_fail_url' => 'https://site.com/fail',
// Sepet (PayTR formatında)
'basket' => [
['Test Ürün', '100.00', 1], // [ürün_adı, fiyat, adet]
],
// Direct API için zorunlu kart bilgileri
'cc_owner' => 'Test Kullanıcı',
'card_number' => '4355084355084358', // Test kart numarası
'expiry_month' => '12',
'expiry_year' => '25',
'cvv' => '000',
// Opsiyonel parametreler
'lang' => 'tr',
'sync_mode' => 0, // 0: async, 1: sync
'non3d_test_failed' => 0,
'card_type' => '', // Boş bırakılabilir
];
try {
$result = Paytr::payment()->pay($payload);
// $result['token'] ile ödeme başlatılır
} catch (Paytr\Exceptions\PaytrException $e) {
// Hata yönetimi
echo $e->getMessage();
}
$payload['installment_count'] = 3; // 3 taksit
$result = Paytr::payment()->pay($payload);
$payload['currency'] = 'USD';
$result = Paytr::payment()->pay($payload);
API veya validasyon hatalarında PaytrException fırlatılır. Hata mesajı ve kodu exception üzerinden alınabilir.
try {
$result = Paytr::payment()->pay($payload);
} catch (Paytr\Exceptions\PaytrException $e) {
// Hata mesajı: $e->getMessage()
// Hata kodu: $e->getCode()
}
4355084355084358
(son kullanma: 12/25, CVV: 000)createIframeToken(array $payload): array fonksiyonu, PayTR iFrame API ile ödeme başlatmak için gerekli token'ı üretir. Bu token ile iFrame ödeme formunu sitenize kolayca entegre edebilirsiniz. iFrame API'de kart bilgileri kullanıcı tarafından PayTR'ın güvenli sayfasında girilir.
merchant_id
,
user_ip
, test_mode
, debug_on
, lang
Başarılı işlemde aşağıdaki gibi bir dizi döner:
[
'status' => 'success',
'token' => 'iFrame token',
// Diğer PayTR yanıt parametreleri
]
Başarısız işlemde PaytrException fırlatılır ve hata mesajı döner.
use Paytr\Facades\Paytr;
$payload = [
// Zorunlu parametreler (otomatik alınır: merchant_id, user_ip, test_mode, debug_on, lang)
'merchant_oid' => 'TEST_' . time(), // Benzersiz sipariş numarası
'email' => 'user@example.com',
'payment_amount' => 100.00, // PayTR'de ondalık nokta kullanılır
'currency' => 'TL',
// Müşteri bilgileri
'user_name' => 'Test Kullanıcı',
'user_address' => 'Adres',
'user_phone' => '5551234567',
// URL'ler (doğru isimlendirme)
'merchant_ok_url' => 'https://site.com/success',
'merchant_fail_url' => 'https://site.com/fail',
// Sepet (PayTR formatında)
'basket' => [
['Test Ürün', '100.00', 1], // [ürün_adı, fiyat, adet]
],
// Opsiyonel parametreler
'no_installment' => 0, // Taksit kullan
'max_installment' => 12, // Maksimum 12 taksit
'timeout_limit' => 0, // Zaman aşımı yok
// iFrame API'de kart bilgileri gerekmez
];
try {
$result = Paytr::payment()->createIframeToken($payload);
// $result['token'] ile iFrame formu oluşturulabilir
} catch (Paytr\Exceptions\PaytrException $e) {
// Hata yönetimi
echo $e->getMessage();
}
API veya validasyon hatalarında PaytrException fırlatılır. Hata mesajı ve kodu exception üzerinden alınabilir.
try {
$result = Paytr::payment()->createIframeToken($payload);
} catch (Paytr\Exceptions\PaytrException $e) {
// Hata mesajı: $e->getMessage()
// Hata kodu: $e->getCode()
}
getPaymentStatus(string $merchantOid): array fonksiyonu, belirli bir siparişin (merchant_oid) ödeme durumunu PayTR API üzerinden sorgular.
Başarılı işlemde aşağıdaki gibi bir dizi döner:
[
'status' => 'success',
'payment_status' => 'paid', // veya 'pending', 'failed' vb.
// Diğer PayTR yanıt parametreleri
]
Başarısız işlemde PaytrException fırlatılır ve hata mesajı döner.
use Paytr\Facades\Paytr;
$merchantOid = 'ORDER123';
try {
$result = Paytr::payment()->getPaymentStatus($merchantOid);
if ($result['payment_status'] === 'paid') {
// Ödeme başarılı
} elseif ($result['payment_status'] === 'pending') {
// Ödeme beklemede
} else {
// Ödeme başarısız veya iptal
}
} catch (Paytr\Exceptions\PaytrException $e) {
// Hata yönetimi
echo $e->getMessage();
}
API veya validasyon hatalarında PaytrException fırlatılır. Hata mesajı ve kodu exception üzerinden alınabilir.
try {
$result = Paytr::payment()->getPaymentStatus($merchantOid);
} catch (Paytr\Exceptions\PaytrException $e) {
// Hata mesajı: $e->getMessage()
// Hata kodu: $e->getCode()
}
getInstallmentRates(string $bin): array fonksiyonu, verilen kart BIN numarasına göre taksit oranlarını PayTR API üzerinden sorgular.
Başarılı işlemde aşağıdaki gibi bir dizi döner:
[
'status' => 'success',
'installment_rates' => [
['count' => 1, 'rate' => 0],
['count' => 2, 'rate' => 1.5],
// ...
],
// Diğer PayTR yanıt parametreleri
]
Başarısız işlemde PaytrException fırlatılır ve hata mesajı döner.
use Paytr\Facades\Paytr;
$bin = '454360';
try {
$result = Paytr::payment()->getInstallmentRates($bin);
foreach ($result['installment_rates'] as $rate) {
echo $rate['count'] . ' taksit: ' . $rate['rate'] . "% oran\n";
}
} catch (Paytr\Exceptions\PaytrException $e) {
// Hata yönetimi
echo $e->getMessage();
}
API veya validasyon hatalarında PaytrException fırlatılır. Hata mesajı ve kodu exception üzerinden alınabilir.
try {
$result = Paytr::payment()->getInstallmentRates($bin);
} catch (Paytr\Exceptions\PaytrException $e) {
// Hata mesajı: $e->getMessage()
// Hata kodu: $e->getCode()
}
lookupBin(string $bin): array fonksiyonu, verilen kart BIN numarasına (ilk 6 hane) göre kartın ait olduğu banka, kart tipi ve diğer bilgileri PayTR API üzerinden sorgular.
Başarılı işlemde aşağıdaki gibi bir dizi döner:
[
'status' => 'success',
'bank' => 'Banka Adı',
'card_type' => 'Kredi Kartı',
'brand' => 'Visa',
// Diğer PayTR yanıt parametreleri
]
Başarısız işlemde PaytrException fırlatılır ve hata mesajı döner.
use Paytr\Facades\Paytr;
$bin = '454360';
try {
$result = Paytr::payment()->lookupBin($bin);
echo 'Banka: ' . $result['bank'] . "\n";
echo 'Kart Tipi: ' . $result['card_type'] . "\n";
echo 'Marka: ' . $result['brand'] . "\n";
} catch (Paytr\Exceptions\PaytrException $e) {
// Hata yönetimi
echo $e->getMessage();
}
API veya validasyon hatalarında PaytrException fırlatılır. Hata mesajı ve kodu exception üzerinden alınabilir.
try {
$result = Paytr::payment()->lookupBin($bin);
} catch (Paytr\Exceptions\PaytrException $e) {
// Hata mesajı: $e->getMessage()
// Hata kodu: $e->getCode()
}
getTransactionDetail(string $merchantOid): array fonksiyonu, belirli bir siparişin (merchant_oid) işlem detaylarını PayTR API üzerinden sorgular.
Başarılı işlemde aşağıdaki gibi bir dizi döner:
[
'status' => 'success',
'transaction' => [
'amount' => 10000,
'status' => 'paid',
'date' => '2024-01-01 12:00:00',
// ... diğer işlem detayları
],
// Diğer PayTR yanıt parametreleri
]
Başarısız işlemde PaytrException fırlatılır ve hata mesajı döner.
use Paytr\Facades\Paytr;
$merchantOid = 'ORDER123';
try {
$result = Paytr::payment()->getTransactionDetail($merchantOid);
$transaction = $result['transaction'];
echo 'Tutar: ' . $transaction['amount'] . "\n";
echo 'Durum: ' . $transaction['status'] . "\n";
echo 'Tarih: ' . $transaction['date'] . "\n";
} catch (Paytr\Exceptions\PaytrException $e) {
// Hata yönetimi
echo $e->getMessage();
}
API veya validasyon hatalarında PaytrException fırlatılır. Hata mesajı ve kodu exception üzerinden alınabilir.
try {
$result = Paytr::payment()->getTransactionDetail($merchantOid);
} catch (Paytr\Exceptions\PaytrException $e) {
// Hata mesajı: $e->getMessage()
// Hata kodu: $e->getCode()
}
getPaymentStatement(array $payload): array fonksiyonu, belirli bir tarih aralığı için ödeme raporunu (statement) PayTR API üzerinden sorgular.
Başarılı işlemde aşağıdaki gibi bir dizi döner:
[
'status' => 'success',
'payments' => [
[
'merchant_oid' => 'ORDER123',
'amount' => 10000,
'status' => 'paid',
'date' => '2024-01-01 12:00:00',
// ... diğer ödeme detayları
],
// ...
],
// Diğer PayTR yanıt parametreleri
]
Başarısız işlemde PaytrException fırlatılır ve hata mesajı döner.
use Paytr\Facades\Paytr;
$payload = [
'date_start' => '2024-01-01',
'date_end' => '2024-01-31',
];
try {
$result = Paytr::payment()->getPaymentStatement($payload);
foreach ($result['payments'] as $payment) {
echo $payment['merchant_oid'] . ': ' . $payment['amount'] . ' TL - ' . $payment['status'] . "\n";
}
} catch (Paytr\Exceptions\PaytrException $e) {
// Hata yönetimi
echo $e->getMessage();
}
API veya validasyon hatalarında PaytrException fırlatılır. Hata mesajı ve kodu exception üzerinden alınabilir.
try {
$result = Paytr::payment()->getPaymentStatement($payload);
} catch (Paytr\Exceptions\PaytrException $e) {
// Hata mesajı: $e->getMessage()
// Hata kodu: $e->getCode()
}
getPaymentDetail(string $paymentId): array fonksiyonu, belirli bir ödeme ID'sine ait detayları PayTR API üzerinden sorgular.
Başarılı işlemde aşağıdaki gibi bir dizi döner:
[
'status' => 'success',
'payment' => [
'merchant_oid' => 'ORDER123',
'amount' => 10000,
'status' => 'paid',
'date' => '2024-01-01 12:00:00',
// ... diğer ödeme detayları
],
// Diğer PayTR yanıt parametreleri
]
Başarısız işlemde PaytrException fırlatılır ve hata mesajı döner.
use Paytr\Facades\Paytr;
$paymentId = '12345';
try {
$result = Paytr::payment()->getPaymentDetail($paymentId);
$payment = $result['payment'];
echo 'Sipariş: ' . $payment['merchant_oid'] . "\n";
echo 'Tutar: ' . $payment['amount'] . "\n";
echo 'Durum: ' . $payment['status'] . "\n";
echo 'Tarih: ' . $payment['date'] . "\n";
} catch (Paytr\Exceptions\PaytrException $e) {
// Hata yönetimi
echo $e->getMessage();
}
API veya validasyon hatalarında PaytrException fırlatılır. Hata mesajı ve kodu exception üzerinden alınabilir.
try {
$result = Paytr::payment()->getPaymentDetail($paymentId);
} catch (Paytr\Exceptions\PaytrException $e) {
// Hata mesajı: $e->getMessage()
// Hata kodu: $e->getCode()
}
preProvision(array $payload): array fonksiyonu, ön provizyon (pre-auth) işlemi başlatmak için kullanılır. Karttan tutar çekilmeden önce provizyon alınmasını sağlar.
[
'status' => 'success',
'token' => 'Provizyon tokeni',
// Diğer PayTR yanıt parametreleri
]
$payload = [
'merchant_oid' => 'ORDER123',
'email' => 'user@example.com',
'payment_amount' => 10000,
'user_name' => 'Test Kullanıcı',
'user_address' => 'Adres',
'user_phone' => '5551234567',
'user_ip' => request()->ip(),
'basket' => [
['name' => 'Ürün', 'price' => 10000, 'quantity' => 1],
],
];
$result = Paytr::payment()->preProvision($payload);
createEftIframe(array $payload): array fonksiyonu, EFT ile ödeme için iFrame token'ı oluşturur.
[
'status' => 'success',
'token' => 'EFT iFrame token',
// Diğer PayTR yanıt parametreleri
]
$payload = [
'merchant_oid' => 'ORDER123',
'email' => 'user@example.com',
'payment_amount' => 10000,
'user_name' => 'Test Kullanıcı',
'user_address' => 'Adres',
'user_phone' => '5551234567',
'user_ip' => request()->ip(),
'basket' => [
['name' => 'Ürün', 'price' => 10000, 'quantity' => 1],
],
];
$result = Paytr::payment()->createEftIframe($payload);
bkm/express
endpoint'i kullanır. payment_type="bex"
parametresi gerekmez.
Entegrasyonun kolaylaştırılması için bu yol tercih edilmiştir.
payWithBkmExpress(array $payload): array fonksiyonu, BKM Express ile ödeme başlatmak için kullanılır.
[
'status' => 'success',
'token' => 'BKM Express token',
// Diğer PayTR yanıt parametreleri
]
$payload = [
'merchant_oid' => 'ORDER123',
'email' => 'user@example.com',
'payment_amount' => 10000,
'user_name' => 'Test Kullanıcı',
'user_address' => 'Adres',
'user_phone' => '5551234567',
'user_ip' => request()->ip(),
'basket' => [
['name' => 'Ürün', 'price' => 10000, 'quantity' => 1],
],
];
$result = Paytr::payment()->payWithBkmExpress($payload);
encodeBasket(array $basket): string fonksiyonu, sepet verilerini PayTR API'nin beklediği formatta kodlar.
[['Ürün Adı',
'Fiyat', 'Adet'], ...]
encodeBasket
metodu doğrudan çağrılamaz. Bu metot protected olarak
tanımlıdır ve genellikle ödeme işlemleri sırasında paket tarafından otomatik olarak kullanılır.
Base64 ile kodlanmış sepet verisi döner.
// PayTR Sepet Formatı: [['Ürün Adı', 'Fiyat', 'Adet'], ...]
$basket = [
['Test Ürün 1', '100.00', 1], // [ürün_adı, fiyat, adet]
['Test Ürün 2', '50.50', 2], // [ürün_adı, fiyat, adet]
['Test Ürün 3', '25.25', 3], // [ürün_adı, fiyat, adet]
];
function encodeBasket(array $basket): string {
return base64_encode(json_encode($basket));
}
$encoded = encodeBasket($basket);
// 1. PayTR Formatı (Önerilen)
$basket = [
['Ürün Adı', '100.00', 1],
];
// 2. Obje Formatı (Otomatik dönüştürülür)
$basket = [
['name' => 'Ürün Adı', 'price' => 100.00, 'quantity' => 1],
];
// 3. Karma Format
$basket = [
['Ürün 1', '100.00', 1],
['name' => 'Ürün 2', 'price' => 50.00, 'quantity' => 2],
];
1000
yazılmalıdır. PayTR'nin resmi API'sinde ise return_amount
parametresi ondalık
string (ör: "10.00") olarak gönderilir. Lütfen bu farklılığa dikkat edin.
refund(string $merchantOid): array fonksiyonu, bir ödemenin tamamının iadesini başlatır.
[
'status' => 'success',
// Diğer PayTR yanıt parametreleri
]
use Paytr\Facades\Paytr;
$merchantOid = 'ORDER123';
try {
$result = Paytr::refund()->refund($merchantOid);
// İade başarılı ise $result['status'] == 'success'
} catch (Paytr\Exceptions\PaytrException $e) {
// Hata yönetimi
echo $e->getMessage();
}
1000
yazılmalıdır. PayTR'nin resmi API'sinde ise return_amount
parametresi
ondalık string (ör: "10.00") olarak gönderilir. Lütfen bu farklılığa dikkat edin.
partialRefund(string $merchantOid, int $amount): array fonksiyonu, bir ödemenin belirli bir tutarının iadesini başlatır.
[
'status' => 'success',
// Diğer PayTR yanıt parametreleri
]
$merchantOid = 'ORDER123';
$amount = 5000; // 50 TL
try {
$result = Paytr::refund()->partialRefund($merchantOid, $amount);
// Kısmi iade başarılı ise $result['status'] == 'success'
} catch (Paytr\Exceptions\PaytrException $e) {
// Hata yönetimi
echo $e->getMessage();
}
getRefundStatus(string $merchantOid): array fonksiyonu, bir iade işleminin güncel durumunu sorgular.
[
'status' => 'success',
'refund_status' => 'completed', // veya 'pending', 'failed' vb.
// Diğer PayTR yanıt parametreleri
]
$merchantOid = 'ORDER123';
try {
$result = Paytr::refund()->getRefundStatus($merchantOid);
if ($result['refund_status'] === 'completed') {
// İade tamamlandı
} elseif ($result['refund_status'] === 'pending') {
// İade beklemede
} else {
// İade başarısız veya iptal
}
} catch (Paytr\Exceptions\PaytrException $e) {
// Hata yönetimi
echo $e->getMessage();
}
cancel(string $merchantOid): array fonksiyonu, bir ödemenin tamamının iptalini başlatır.
[
'status' => 'success',
// Diğer PayTR yanıt parametreleri
]
use Paytr\Facades\Paytr;
$merchantOid = 'ORDER123';
try {
$result = Paytr::cancel()->cancel($merchantOid);
// İptal başarılı ise $result['status'] == 'success'
} catch (Paytr\Exceptions\PaytrException $e) {
// Hata yönetimi
echo $e->getMessage();
}
partialCancel(string $merchantOid, int $amount): array fonksiyonu, bir ödemenin belirli bir tutarının iptalini başlatır.
[
'status' => 'success',
// Diğer PayTR yanıt parametreleri
]
$merchantOid = 'ORDER123';
$amount = 5000; // 50 TL
try {
$result = Paytr::cancel()->partialCancel($merchantOid, $amount);
// Kısmi iptal başarılı ise $result['status'] == 'success'
} catch (Paytr\Exceptions\PaytrException $e) {
// Hata yönetimi
echo $e->getMessage();
}
storeCard(array $cardData): array fonksiyonu, kullanıcının kart bilgisini güvenli şekilde PayTR sistemine kaydeder.
[
'status' => 'success',
'token' => 'Kart tokeni',
// Diğer PayTR yanıt parametreleri
]
$cardData = [
'customer_id' => 'USER123',
'cc_owner' => 'Test Kullanıcı',
'card_number' => '4111111111111111',
'expiry_month' => '12',
'expiry_year' => '25',
'cvv' => '123',
];
try {
$result = Paytr::card()->storeCard($cardData);
// $result['token'] ile kayıtlı kart işlemleri yapılabilir
} catch (Paytr\Exceptions\PaytrException $e) {
echo $e->getMessage();
}
payWithCard(string $token, array $paymentData): array fonksiyonu, kayıtlı kart ile ödeme başlatır.
[
'status' => 'success',
// Diğer PayTR yanıt parametreleri
]
$token = 'KART_TOKEN';
$paymentData = [
'amount' => 10000,
'merchant_oid' => 'ORDER123',
];
try {
$result = Paytr::card()->payWithCard($token, $paymentData);
// Ödeme başarılı ise $result['status'] == 'success'
} catch (Paytr\Exceptions\PaytrException $e) {
echo $e->getMessage();
}
recurringPayment(string $token, array $paymentData): array fonksiyonu, kayıtlı kart ile tekrarlayan ödeme başlatır.
[
'status' => 'success',
// Diğer PayTR yanıt parametreleri
]
$token = 'KART_TOKEN';
$paymentData = [
'amount' => 10000,
'merchant_oid' => 'ORDER123',
];
try {
$result = Paytr::card()->recurringPayment($token, $paymentData);
// Ödeme başarılı ise $result['status'] == 'success'
} catch (Paytr\Exceptions\PaytrException $e) {
echo $e->getMessage();
}
listCards(string $customerId): array fonksiyonu, bir kullanıcıya ait kayıtlı kartları listeler.
[
'status' => 'success',
'cards' => [
[
'token' => 'KART_TOKEN',
'cc_owner' => 'Test Kullanıcı',
// ... diğer kart bilgileri
],
// ...
],
// Diğer PayTR yanıt parametreleri
]
$customerId = 'USER123';
try {
$result = Paytr::card()->listCards($customerId);
foreach ($result['cards'] as $card) {
echo $card['cc_owner'] . ' - ' . $card['token'] . "\n";
}
} catch (Paytr\Exceptions\PaytrException $e) {
echo $e->getMessage();
}
deleteCard(string $token): array fonksiyonu, kayıtlı bir kartı siler.
[
'status' => 'success',
// Diğer PayTR yanıt parametreleri
]
$token = 'KART_TOKEN';
try {
$result = Paytr::card()->deleteCard($token);
// Silme başarılı ise $result['status'] == 'success'
} catch (Paytr\Exceptions\PaytrException $e) {
echo $e->getMessage();
}
createLink(array $payload): array fonksiyonu, kullanıcıya özel ödeme linki oluşturur.
[
'status' => 'success',
'link' => 'https://paytr.com/odeme/....',
// Diğer PayTR yanıt parametreleri
]
$payload = [
'email' => 'user@example.com',
'amount' => 10000,
'user_name' => 'Test Kullanıcı',
'user_address' => 'Adres',
'user_phone' => '5551234567',
'basket' => [
['name' => 'Ürün', 'price' => 10000, 'quantity' => 1],
],
];
try {
$result = Paytr::link()->createLink($payload);
// $result['link'] ile kullanıcıya ödeme linki gönderilebilir
} catch (Paytr\Exceptions\PaytrException $e) {
echo $e->getMessage();
}
deleteLink(string $linkId): array fonksiyonu, oluşturulan ödeme linkini siler.
[
'status' => 'success',
// Diğer PayTR yanıt parametreleri
]
$linkId = 'LINK_ID';
try {
$result = Paytr::link()->deleteLink($linkId);
// Silme başarılı ise $result['status'] == 'success'
} catch (Paytr\Exceptions\PaytrException $e) {
echo $e->getMessage();
}
verifyCallback(array $payload, string $signature): bool fonksiyonu, ödeme linki callback isteğinin imzasını doğrular.
$isValid = Paytr::link()->verifyCallback($payload, $signature);
// $isValid: true veya false
$payload = [...];
$signature = $_SERVER['HTTP_X_PAYTR_SIGNATURE'] ?? '';
$isValid = Paytr::link()->verifyCallback($payload, $signature);
if ($isValid) {
// Callback geçerli
} else {
// Geçersiz imza
}
sendLinkNotification(string $linkId, string $type = 'sms'): array fonksiyonu, oluşturulan ödeme linki için SMS veya e-posta bildirimi gönderir.
[
'status' => 'success',
// Diğer PayTR yanıt parametreleri
]
$linkId = 'LINK_ID';
try {
$result = Paytr::link()->sendLinkNotification($linkId, 'sms');
// Bildirim başarılı ise $result['status'] == 'success'
} catch (Paytr\Exceptions\PaytrException $e) {
echo $e->getMessage();
}
Kütüphane aşağıdaki ana servisleri sunar:
$payload = [
'merchant_oid' => 'ORDER123',
'email' => 'user@example.com',
'amount' => 10000,
'user_name' => 'Test Kullanıcı',
'user_address' => 'Adres',
'user_phone' => '5551234567',
'ok_url' => 'https://site.com/success',
'fail_url' => 'https://site.com/fail',
'basket' => [
['name' => 'Ürün', 'price' => 10000, 'quantity' => 1],
],
];
$result = Paytr::payment()->createIframeToken($payload);
$result = Paytr::refund()->refund('ORDER123');
// Event dinleme örneği
Event::listen(Paytr\Events\PaymentSuccessEvent::class, function($event) {
// $event->data ile işlem detaylarına erişebilirsiniz
});
paytr.signature middleware'i, webhook endpoint'lerinde imza doğrulaması yapar.
Route::post('/webhook', [WebhookController::class, 'handle'])
->middleware('paytr.signature');
Kütüphane, unit ve feature testleriyle kapsamlı şekilde test edilmiştir. Testler, eventlerin veri taşıma işlevinden, servislerin imza üretimine ve middleware doğrulamasına kadar tüm kritik noktaları kapsar.
createTransfer(array $payload): array fonksiyonu, platform üzerinden transfer talebi oluşturur.
[
'status' => 'success',
'transfer_id' => 'TRF123',
// Diğer PayTR yanıt parametreleri
]
$payload = [
'amount' => 10000,
'iban' => 'TR000000000000000000000000',
'description' => 'Açıklama',
];
try {
$result = Paytr::platform()->createTransfer($payload);
// $result['transfer_id'] ile transfer işlemi takip edilebilir
} catch (Paytr\Exceptions\PaytrException $e) {
echo $e->getMessage();
}
getTransferResult(string $transferId): array fonksiyonu, platform transferinin sonucunu sorgular.
[
'status' => 'success',
'result' => 'completed', // veya 'pending', 'failed' vb.
// Diğer PayTR yanıt parametreleri
]
$transferId = 'TRF123';
try {
$result = Paytr::platform()->getTransferResult($transferId);
if ($result['result'] === 'completed') {
// Transfer tamamlandı
} elseif ($result['result'] === 'pending') {
// Transfer beklemede
} else {
// Transfer başarısız
}
} catch (Paytr\Exceptions\PaytrException $e) {
echo $e->getMessage();
}
getReturningPayments(array $payload): array fonksiyonu, belirli bir tarih aralığında iade edilen ödemeleri listeler.
[
'status' => 'success',
'returning_payments' => [
[
'trans_id' => 'TRS123',
'amount' => 10000,
'iban' => 'TR000000000000000000000000',
// ... diğer bilgiler
],
// ...
],
// Diğer PayTR yanıt parametreleri
]
$payload = [
'date_start' => '2024-01-01',
'date_end' => '2024-01-31',
];
try {
$result = Paytr::platform()->getReturningPayments($payload);
foreach ($result['returning_payments'] as $payment) {
echo $payment['trans_id'] . ': ' . $payment['amount'] . "\n";
}
} catch (Paytr\Exceptions\PaytrException $e) {
echo $e->getMessage();
}
sendReturningPayment(array $payload): array fonksiyonu, hesaptan iade ödemesi gönderir.
[
'status' => 'success',
// Diğer PayTR yanıt parametreleri
]
$payload = [
'trans_id' => 'TRS123',
'amount' => 10000,
'iban' => 'TR000000000000000000000000',
'name' => 'Alıcı Adı',
];
try {
$result = Paytr::platform()->sendReturningPayment($payload);
// $result['status'] == 'success' ise iade gönderildi
} catch (Paytr\Exceptions\PaytrException $e) {
echo $e->getMessage();
}
handleReturningCallback(array $payload): array fonksiyonu, gelen iade bildirimini işler ve doğrular.
$result = Paytr::platform()->handleReturningCallback($payload);
// $result: iade edilen işlemler dizisi
$payload = [...];
try {
$result = Paytr::platform()->handleReturningCallback($payload);
// $result ile iade edilen işlemler işlenebilir
} catch (Paytr\Exceptions\PaytrException $e) {
echo $e->getMessage();
}
verifyCallback(array $payload, string $signature): bool fonksiyonu, platform transfer callback isteğinin imzasını doğrular.
$isValid = Paytr::platform()->verifyCallback($payload, $signature);
// $isValid: true veya false
$payload = [...];
$signature = $_SERVER['HTTP_X_PAYTR_SIGNATURE'] ?? '';
$isValid = Paytr::platform()->verifyCallback($payload, $signature);
if ($isValid) {
// Callback geçerli
} else {
// Geçersiz imza
}
Başarılı bir ödeme işlemi gerçekleştiğinde tetiklenen eventtir.
$event->data = [
'event' => 'payment_success',
'merchant_oid' => 'ORDER123',
'amount' => 10000,
// ... diğer alanlar
];
Event::listen(Paytr\Events\PaymentSuccessEvent::class, function($event) {
// $event->data ile işlem detaylarına erişebilirsiniz
});
Başarısız bir ödeme işlemi gerçekleştiğinde tetiklenen eventtir.
$event->data = [
'event' => 'payment_failed',
'merchant_oid' => 'ORDER123',
'reason' => 'Insufficient funds',
// ... diğer alanlar
];
Event::listen(Paytr\Events\PaymentFailedEvent::class, function($event) {
// $event->data ile hata detaylarına erişebilirsiniz
});
Başarılı bir iade işlemi gerçekleştiğinde tetiklenen eventtir.
$event->data = [
'event' => 'refund_success',
'merchant_oid' => 'ORDER123',
'refund_amount' => 5000,
// ... diğer alanlar
];
Event::listen(Paytr\Events\RefundSuccessEvent::class, function($event) {
// $event->data ile iade detaylarına erişebilirsiniz
});
Webhook endpoint'lerinde gelen isteğin imzasını doğrulayan middleware'dir.
Route::post('/webhook', [WebhookController::class, 'handle'])
->middleware('paytr.signature');
curl -X POST /webhook -H "X-PayTR-Signature: yanlis" -d '{...}'
PayTR tarafından gönderilen webhook bildirimlerini işler. IP ve signature doğrulaması yapar, ilgili event'i tetikler.
Route::post('/webhook', [WebhookController::class, 'handle'])
->middleware('paytr.signature');
{
"event": "payment_success",
"merchant_oid": "ORDER123",
"amount": 10000,
// ... diğer alanlar
}
Kütüphane, unit ve feature testleriyle kapsamlı şekilde test edilmiştir. Her bir testin amacı, kapsamı ve örnek assertion'lar aşağıda özetlenmiştir.
$this->assertEquals($data, $event->data);
$response->assertStatus(500);
$this->assertArrayHasKey('paytr_token', $params);