PHPackages                             furkanmeclis/laravel-paytr - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Payment Processing](/categories/payments)
4. /
5. furkanmeclis/laravel-paytr

ActiveLibrary[Payment Processing](/categories/payments)

furkanmeclis/laravel-paytr
==========================

Updated and Maintained Laravel Paytr Payment Gateway for Laravel 10, 11 &amp; 12

0.0.3(1y ago)0225[1 issues](https://github.com/furkanmeclis/laravel-paytr/issues)MITPHPPHP ^8.2

Since Jun 21Pushed 1y agoCompare

[ Source](https://github.com/furkanmeclis/laravel-paytr)[ Packagist](https://packagist.org/packages/furkanmeclis/laravel-paytr)[ RSS](/packages/furkanmeclis-laravel-paytr/feed)WikiDiscussions main Synced today

READMEChangelog (3)Dependencies (4)Versions (4)Used By (0)

Laravel Paytr (Güncel ve Kapsamlı Sürüm)
========================================

[](#laravel-paytr-güncel-ve-kapsamlı-sürüm)

[![Latest Version on Packagist](https://camo.githubusercontent.com/43be1e6f7f261ebeb0789d7c43989c1db02b9d7dfe3f73827272fb99cd4e2b57/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6675726b616e6d65636c69732f6c61726176656c2d70617974722e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/furkanmeclis/laravel-paytr)[![Total Downloads](https://camo.githubusercontent.com/843754281045cd5b8e9f02d43367a43c99b5aa414fd552b720313654296fd7d0/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6675726b616e6d65636c69732f6c61726176656c2d70617974722e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/furkanmeclis/laravel-paytr)[![License: MIT](https://camo.githubusercontent.com/1b01ef0024ba0866c115986b895301f657c1b21fc29f05c4844b7f2e8d89204d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d79656c6c6f772e7376673f7374796c653d666c61742d737175617265)](https://opensource.org/licenses/MIT)

Bu paket, **Paytr** ödeme altyapısını modern Laravel (10, 11, 12+) projelerinize kolayca entegre edebilmeniz için geliştirilmiştir. `past/paytr` paketinin kod tabanı kullanılarak **Furkan Meclis** tarafından yeniden yapılandırılmış, güncellenmiş ve bakımı yapılmaktadır.

Paket, Paytr'ın **Iframe API**, **Direct API** ve **Iframe Havale/EFT** gibi tüm popüler ödeme yöntemlerini destekler.

---

İçindekiler
-----------

[](#i̇çindekiler)

- [Desteklenen Sürümler](#desteklenen-s%C3%BCr%C3%BCmler)
- [Kurulum](#kurulum)
- [Yapılandırma](#yap%C4%B1land%C4%B1rma)
    - [Yapılandırma Dosyasını Yayınlama](#yap%C4%B1land%C4%B1rma-dosyas%C4%B1n%C4%B1-yay%C4%B1nlama)
    - [Ortam Değişkenleri (.env)](#ortam-de%C4%9Fi%C5%9Fkenleri-env)
- [Temel Kullanım (`FurkanMeclis\Paytr\Payment`)](#temel-kullan%C4%B1m-furkanmeclispaytrpayment)
    - [Iframe API ile Ödeme Alma](#1-iframe-api-ile-%C3%B6deme-alma)
    - [Direct API (Doğrudan Ödeme)](#2-direct-api-do%C4%9Frudan-%C3%B6deme)
    - [Iframe Havale/EFT ile Ödeme](#3-iframe-havaleeft-ile-%C3%B6deme)
- [Ödeme Bildirimlerini (Callback) Doğrulama](#%C3%B6deme-bildirimlerini-callback-do%C4%9Frulama)
    - [Yöntem 1: `Payment` Sınıfı ile Doğrulama (Önerilen)](#y%C3%B6ntem-1-payment-s%C4%B1n%C4%B1f%C4%B1-ile-do%C4%9Frulama-%C3%B6nerilen)
    - [Yöntem 2: `PaymentVerification` Sınıfı ile Doğrulama](#y%C3%B6ntem-2-paymentverification-s%C4%B1n%C4%B1f%C4%B1-ile-do%C4%9Frulama)
- [Gelişmiş Kullanım ve İpuçları](#geli%C5%9Fmi%C5%9F-kullan%C4%B1m-ve-ipu%C3%A7lar%C4%B1)
    - [Taksit Seçenekleri](#taksit-se%C3%A7enekleri)
    - [Para Birimi (Currency) Değiştirme](#para-birimi-currency-de%C4%9Fi%C5%9Ftirme)
- [Paket Sınıflarına Genel Bakış](#paket-s%C4%B1n%C4%B1flar%C4%B1na-genel-bak%C4%B1%C5%9F)
- [Alternatif Kullanım (`Request\Payment`)](#alternatif-kullan%C4%B1m-requestpayment)

---

Desteklenen Sürümler
--------------------

[](#desteklenen-sürümler)

- **PHP:** `^8.2`
- **Laravel:** `^10.0`, `^11.0`, `^12.0`

---

Kurulum
-------

[](#kurulum)

Composer kullanarak paketi projenize kolayca ekleyebilirsiniz:

```
composer require furkanmeclis/laravel-paytr
```

---

Yapılandırma
------------

[](#yapılandırma)

### Yapılandırma Dosyasını Yayınlama

[](#yapılandırma-dosyasını-yayınlama)

Paketin yapılandırma dosyasını (`paytr.php`) kendi projenizin `config` dizinine kopyalamak için aşağıdaki Artisan komutunu çalıştırın. Bu, varsayılan ayarları değiştirmenize olanak tanır.

```
php artisan vendor:publish --provider="FurkanMeclis\Paytr\PaytrServiceProvider"
```

### Ortam Değişkenleri (.env)

[](#ortam-değişkenleri-env)

Yapılandırma dosyasını yayınladıktan sonra, `.env` dosyanıza aşağıdaki değişkenleri ekleyip kendi Paytr Mağaza bilgilerinizle doldurmanız gerekmektedir.

```
# Paytr Mağaza Bilgileri
PAYTR_MERCHANT_ID=
PAYTR_MERCHANT_SALT=
PAYTR_MERCHANT_KEY=

# Geri Dönüş URL'leri
PAYTR_SUCCESS_URL=https://siteniz.com/odeme-basarili
PAYTR_FAIL_URL=https://siteniz.com/odeme-basarisiz

# Diğer Ayarlar
PAYTR_TEST_MODE=true
PAYTR_BASE_URI=https://www.paytr.com
PAYTR_TIMEOUT=60
```

- `PAYTR_TEST_MODE`: `true` olarak ayarlandığında tüm işlemler test modunda çalışır. Canlıya geçerken `false` yapmayı unutmayın.
- `PAYTR_BASE_URI`: Paytr API'sinin ana URL'sidir. Genellikle değiştirmeniz gerekmez.
- `PAYTR_TIMEOUT`: API istekleri için saniye cinsinden zaman aşımı süresi.

---

Temel Kullanım (`FurkanMeclis\Paytr\Payment`)
---------------------------------------------

[](#temel-kullanım-furkanmeclispaytrpayment)

Bu sınıf, ödeme işlemleri oluşturmak için ana ve önerilen yöntemdir. Oldukça esnek ve zincirleme metot (`fluent interface`) kullanımını destekler.

### 1. Iframe API ile Ödeme Alma

[](#1-iframe-api-ile-ödeme-alma)

Bu en yaygın yöntemdir. Kullanıcı, sitenizden ayrılmadan güvenli bir Paytr iframe'i içinde ödeme yapar.

```
use FurkanMeclis\Paytr\Payment;
use FurkanMeclis\Paytr\Enums\TransactionType;
use FurkanMeclis\Paytr\Request\Basket;
use FurkanMeclis\Paytr\Request\Order;
use FurkanMeclis\Paytr\Request\Product;

public function startPayment()
{
    // 1. Ödeme nesnesini Service Container veya `new` ile oluşturun
    $payment = app(Payment::class); // veya new Payment(config('paytr.credentials'), config('paytr.options'));

    // 2. İşlem tipini ve diğer seçenekleri belirleyin
    $payment->getOption()
            ->setTransactionType(TransactionType::IFRAME)
            ->setTestMode(true); // .env'deki ayarı geçersiz kılar

    // 3. Sepeti ve ürünleri oluşturun
    $basket = new Basket();
    $product1 = (new Product())->setName('T-Shirt')->setPrice(100);
    $product2 = (new Product())->setName('Mug')->setPrice(50.50);
    $basket->addProduct($product1, 1); // 1 adet T-Shirt
    $basket->addProduct($product2, 2); // 2 adet Mug

    // 4. Sipariş ve kullanıcı bilgilerini ayarlayın
    $order = new Order();
    $order->setUserName('Furkan Meclis')
          ->setUserAddress('Test Adres, No: 1, Daire: 2, İstanbul')
          ->setEmail('test@furkanmeclis.com')
          ->setUserPhone('5551234567')
          ->setUserIp(request()->ip())
          ->setMerchantOrderId('SIPARIS' . time())
          ->setPaymentAmount(201.00) // Sepet toplamı ile aynı olmalı: 100 + (50.50 * 2)
          ->setBasket($basket);

    // 5. Siparişi ödeme nesnesine ekleyin ve API'yi çağırın
    $payment->setOrder($order);
    $response = $payment->call()->getResponse();

    if ($response->isSuccess() && $response->isHtml()) {
        // Başarılı olursa, Paytr'dan dönen iframe HTML'ini sayfada gösterin
        return $response->getHtml();
    }

    // Hata durumunda
    return "Hata: " . $response->getMessage();
}
```

### 2. Direct API (Doğrudan Ödeme)

[](#2-direct-api-doğrudan-ödeme)

Bu yöntemde, kullanıcı kredi kartı bilgilerini doğrudan sitenizdeki formlara girer. **PCI-DSS sertifikası gerektirir!**

```
// ... (use ifadeleri önceki örnekle aynı)

// İşlem tipini DIRECT olarak değiştirin
$payment->getOption()->setTransactionType(TransactionType::DIRECT);

// Sipariş oluştururken kart bilgilerini de ekleyin
$order->setCardOwner("TEST KULLANICI")
      ->setCardNumber("4355084355084358") // Test kart numarası
      ->setCardExpireMonth("12")
      ->setCardExpireYear("24")
      ->setCardCvv("000");
      // ... (diğer kullanıcı bilgileri)

// API çağrısı ve yanıtı işleme
$response = $payment->call()->getResponse();

if ($response->isSuccess()) {
    // Direct API'den JSON yanıt döner
    return response()->json($response->getContent());
}

return response()->json(['error' => $response->getMessage()], 400);
```

### 3. Iframe Havale/EFT ile Ödeme

[](#3-iframe-havaleeft-ile-ödeme)

```
// ... (use ifadeleri önceki örnekle aynı)

// İşlem tipini IFRAME_TRANSFER olarak değiştirin
$payment->getOption()->setTransactionType(TransactionType::IFRAME_TRANSFER);

// Kart bilgileri gerekmez, bu yüzden Order nesnesinden kartla ilgili satırları kaldırabilirsiniz.
// ... (siparişin geri kalanını ayarlayın)

$response = $payment->call()->getResponse();

if ($response->isSuccess() && $response->isHtml()) {
    // Başarılı olursa, Paytr'dan dönen havale/EFT talimatlarını içeren iframe'i gösterin
    return $response->getHtml();
}
```

---

Ödeme Bildirimlerini (Callback) Doğrulama
-----------------------------------------

[](#ödeme-bildirimlerini-callback-doğrulama)

Paytr, ödeme sonucu ne olursa olsun `.env` dosyanızda belirttiğiniz `PAYTR_SUCCESS_URL` veya `PAYTR_FAIL_URL`'e kullanıcıyı yönlendirir ve **arka planda** sunucunuza bir `POST` isteği gönderir. Gelen bu isteğin Paytr'dan geldiğini ve değiştirilmediğini doğrulamak zorunludur.

Aşağıda `routes/web.php` veya `routes/api.php` içinde bir callback rotası örneği bulunmaktadır.

### Yöntem 1: `Payment` Sınıfı ile Doğrulama (Önerilen)

[](#yöntem-1-payment-sınıfı-ile-doğrulama-önerilen)

Bu yöntem, ana `Payment` sınıfının `checkHash` metodunu kullanır ve en basit yaklaşımdır.

```
// routes/web.php

use Illuminate\Http\Request;
use FurkanMeclis\Paytr\Payment;

Route::post('/paytr-callback', function () {
    $payment = app(Payment::class);

    // 1. Hash kontrolü yap
    if (!$payment->checkHash()) {
        return response('HASH MISMATCH', 401);
    }

    // 2. Gelen isteği al ve durumu kontrol et
    $callbackData = request()->all();

    if ($callbackData['status'] === 'success') {
        // Ödeme başarılı. Sipariş durumunu veritabanında güncelle.
        // $orderId = $callbackData['merchant_oid'];
        // ...
    } else {
        // Ödeme başarısız. Hata mesajını logla.
        // $errorMessage = $callbackData['failed_reason_msg'];
        // ...
    }

    // 3. Paytr'a "OK" yanıtı gönder. Bu zorunludur.
    return response('OK', 200);
});
```

### Yöntem 2: `PaymentVerification` Sınıfı ile Doğrulama

[](#yöntem-2-paymentverification-sınıfı-ile-doğrulama)

Bu, paketin eski yapısından gelen alternatif bir doğrulama yöntemidir.

```
// routes/web.php

use Illuminate\Http\Request;
use FurkanMeclis\Paytr\Request\PaymentVerification;

Route::post('/paytr-callback', function (Request $request) {
    $verification = new PaymentVerification($request);

    // 1. Hash kontrolü yap
    if (!$verification->isVerified()) {
        return response('HASH MISMATCH', 401);
    }

    // 2. Durumu kontrol et
    if ($verification->isSuccess()) {
        // Ödeme başarılı.
        // $orderId = $verification->getMerchantOid();
    } else {
        // Ödeme başarısız.
        // $errorMessage = $verification->getFailedReasonMessage();
    }

    // 3. Paytr'a "OK" yanıtı gönder.
    return $verification->getProcessedResponse();
});
```

---

Gelişmiş Kullanım ve İpuçları
-----------------------------

[](#gelişmiş-kullanım-ve-i̇puçları)

### Taksit Seçenekleri

[](#taksit-seçenekleri)

- `setInstallmentCount(int $count)`: Sadece Direct API için geçerlidir. `1` (tek çekim) veya `2-12` arası taksit sayısını belirtir.
- `setNoInstallment(bool $status)`: Iframe API'de taksit seçeneklerini gizlemek için `true` yapın.
- `setMaxInstallment(int $count)`: Iframe API'de gösterilecek maksimum taksit sayısını belirler (`0` hepsi demektir).

```
// Iframe'de sadece en fazla 6 taksit göster
$payment->getOption()->setMaxInstallment(6);

// Direct API'de 3 taksit yap
$payment->getOption()->setInstallmentCount(3);
```

### Para Birimi (Currency) Değiştirme

[](#para-birimi-currency-değiştirme)

Varsayılan para birimi TL'dir. Desteklenen diğer para birimlerini `Currency` enum'ı ile ayarlayabilirsiniz.

```
use FurkanMeclis\Paytr\Enums\Currency;

$payment->getOption()->setCurrency(Currency::EUR);
```

---

Paket Sınıflarına Genel Bakış
-----------------------------

[](#paket-sınıflarına-genel-bakış)

- `FurkanMeclis\Paytr\Payment`: Ana ödeme sınıfı.
- `FurkanMeclis\Paytr\PaytrClient`: API istekleri için temel Guzzle istemcisi.
- `FurkanMeclis\Paytr\Request\Order`: Sipariş detaylarını ve kullanıcı bilgilerini tutar.
- `FurkanMeclis\Paytr\Request\Basket`: Ürün listesini yönetir.
- `FurkanMeclis\Paytr\Request\Product`: Tek bir ürünün adını ve fiyatını tutar.
- `FurkanMeclis\Paytr\Response\PaymentResponse`: API'den dönen yanıtı (HTML veya JSON) yönetir.
- `FurkanMeclis\Paytr\Enums\*`: `Currency`, `TransactionType` gibi sabit değerleri içeren Enum sınıfları.

---

Alternatif Kullanım (`Request\Payment`)
---------------------------------------

[](#alternatif-kullanım-requestpayment)

Paket, `past/paytr`'ın orijinal yapısını korumak amacıyla `FurkanMeclis\Paytr\Request\Payment` adında alternatif bir ödeme sınıfı daha içerir. Bu sınıfın kullanımı, ana `Payment` sınıfından farklıdır ve zincirleme metotları desteklemez.

> **Uyarı:** Bu sınıf, ana `Payment` sınıfıyla benzer işlevlere sahip olduğu için kafa karıştırıcı olabilir. Genellikle ana `Payment` sınıfını kullanmanız önerilir.

**Örnek:**

```
use FurkanMeclis\Paytr\Request\Payment as RequestPayment;

$paymentRequest = new RequestPayment();
$paymentRequest->setUserIp(request()->ip());
$paymentRequest->setMerchantOid('SIPARIS_ALT_123');
// ... tüm diğer bilgileri setter metotları ile tek tek ayarlayın ...
$response = $paymentRequest->create();
```

###  Health Score

30

—

LowBetter than 62% of packages

Maintenance49

Moderate activity, may be stable

Popularity14

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity41

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

3

Last Release

378d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/286faff943fc3453f69a6702fd3e6d794d430cb45404e2909142ad56b5a6dc9a?d=identicon)[furkanmeclis](/maintainers/furkanmeclis)

---

Top Contributors

[![furkanmeclis](https://avatars.githubusercontent.com/u/71632315?v=4)](https://github.com/furkanmeclis "furkanmeclis (3 commits)")

---

Tags

phplaravellaravel 10laravel 11laravel 12paymentgatewayiframepaytreft apihavale apiiframe apidirekt api

### Embed Badge

![Health badge](/badges/furkanmeclis-laravel-paytr/health.svg)

```
[![Health](https://phpackages.com/badges/furkanmeclis-laravel-paytr/health.svg)](https://phpackages.com/packages/furkanmeclis-laravel-paytr)
```

###  Alternatives

[craftcms/cms

Craft CMS

3.6k3.6M3.1k](/packages/craftcms-cms)[psalm/plugin-laravel

Psalm plugin for Laravel

3355.3M346](/packages/psalm-plugin-laravel)[sebdesign/laravel-viva-payments

A Laravel package for integrating the Viva Payments gateway

4851.0k](/packages/sebdesign-laravel-viva-payments)[simplestats-io/laravel-client

Server-side analytics for Laravel that follows the full funnel from visit to registration to payment, attributed to the channel that drove it. Revenue, MRR, churn and ad-spend profit (ROAS/CAC) per channel. GDPR compliant, ad-blocker proof.

5021.9k](/packages/simplestats-io-laravel-client)[aedart/athenaeum

Athenaeum is a mono repository; a collection of various PHP packages

245.2k](/packages/aedart-athenaeum)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
