PHPackages                             done6666/paytr-sdk - 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. [API Development](/categories/api)
4. /
5. done6666/paytr-sdk

ActiveLibrary[API Development](/categories/api)

done6666/paytr-sdk
==================

Framework bağımsız PayTR ödeme altyapısı PHP SDK

v1.0.0(3mo ago)14MITPHPPHP ^8.0CI failing

Since Jan 26Pushed 3mo agoCompare

[ Source](https://github.com/done6666/paytr-sdk)[ Packagist](https://packagist.org/packages/done6666/paytr-sdk)[ RSS](/packages/done6666-paytr-sdk/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependencies (2)Versions (2)Used By (0)

done6666/paytr-sdk
==================

[](#done6666paytr-sdk)

PayTR ödeme altyapısı için framework bağımsız PHP SDK. **PSR-4**, **PSR-12**, **PHP 8.0+**.

- Iframe (Token + iframe URL)
- Direkt API (Ödeme, BIN, Taksit Oranları)
- Kart Saklama API (CAPI) (Yeni kart ekleme, kayıtlı karttan ödeme, kart listesi, kart silme, tekrarlayan ödeme)
- Callback doğrulama (Iframe + Direkt API + CAPI ortak bildirim)
- Durum sorgulama
- İade

---

Kurulum
-------

[](#kurulum)

```
composer require done6666/paytr-sdk
```

HTTP istekleri için Guzzle adapter (opsiyonel):

```
composer require guzzlehttp/guzzle
```

---

Hızlı Başlangıç
---------------

[](#hızlı-başlangıç)

Önerilen kurulum `Options` ile yapılır. (`Options` fluent builder’dır; ileri kullanımda `Config` de kullanılabilir.)

```
use Done\PayTR\Options;
use Done\PayTR\Client;
use Done\PayTR\Adapters\GuzzleHttpClient;

$options = (new Options())
    ->setMerchantId('MAĞAZA_NO')
    ->setMerchantKey('MAĞAZA_PAROLA')
    ->setMerchantSalt('MAĞAZA_GİZLİ_ANAHTAR')
    ->setTestMode(true);

$client = new Client($options, GuzzleHttpClient::default());
```

Kendi HTTP client’ınız için `Done\PayTR\Contracts\HttpClient` arayüzünü implement edebilirsiniz.

---

Önemli Notlar
-------------

[](#önemli-notlar)

### 1) user\_ip (kritik)

[](#1-user_ip-kritik)

Direkt API / Kart Saklama API çağrılarında `user_ip` alanı **mutlaka gerçek müşteri IP’si** olmalıdır. Örneğin reverse proxy arkasındaysanız doğru header’dan almayı unutmayın.

### 2) Idempotency (kritik)

[](#2-idempotency-kritik)

PayTR bildirimleri (callback) aynı `merchant_oid` için birden fazla kez gelebilir. Siparişinizi **idempotent** işleyin:

- Sipariş daha önce “paid/failed” durumuna alınmışsa tekrar işlemeyin.
- Önce DB’de sipariş durumunu kontrol edin.

### 3) sync\_mode farkı

[](#3-sync_mode-farkı)

- **sync\_mode=0 (varsayılan):** SDK payload üretir, siz HTML form ile PayTR’ye POST edersiniz.
- **sync\_mode=1:** SDK HTTP çağrısını kendi yapar (JSON yanıt alırsınız). Bunun için mağazada ilgili yetkilerin açık olması gerekir.

### 4) Kart verisi güvenliği

[](#4-kart-verisi-güvenliği)

Ham kart numarası / CVV / tam kart bilgisini:

- loglamayın,
- gereksiz yere saklamayın,
- HTTPS kullanın,
- PCI-DSS yükümlülüklerinizi değerlendirin.

---

Desteklenen Entegrasyonlar
--------------------------

[](#desteklenen-entegrasyonlar)

- **Iframe API**

    - Token oluşturma (ödeme formu başlatma)
- **Direkt API**

    - Ödeme isteği
    - BIN sorgulama
    - Taksit oranları
- **Kart Saklama API (CAPI)**

    - Yeni kart ekleme (ödeme sırasında, `store_card=1`)
    - Kayıtlı karttan ödeme
    - Kayıtlı kart listesi (CAPI LIST)
    - Kayıtlı kart silme (CAPI DELETE)
    - Kayıtlı kartla tekrarlayan ödeme (`recurring_payment=1`)
- **Callback doğrulama**

    - Iframe + Direkt API + CAPI aynı doğrulama ile çalışır
- **Durum sorgulama**
- **İade**

---

1) Iframe ile ödeme başlatma (token)
------------------------------------

[](#1-iframe-ile-ödeme-başlatma-token)

`Buyer`, `Basket`, `CreateTokenRequest` ile token alıp iframe URL’i üretin.

> PayTR `payment_amount` alanını **kuruş** bazlı kullanır. SDK’da:
>
> - `setAmountFromTL('34.56')` → SDK 3456 olarak gönderir
> - direkt kuruş için `setAmountKurus(3456)`

```
use Done\PayTR\Model\Buyer;
use Done\PayTR\Model\Basket;
use Done\PayTR\Model\BasketItem;
use Done\PayTR\Request\Iframe\CreateTokenRequest;

$buyer = new Buyer(
    email: 'musteri@ornek.com',
    name: 'Ad Soyad',
    phone: '5551234567',
    ip: $_SERVER['HTTP_X_FORWARDED_FOR'] ?? $_SERVER['REMOTE_ADDR'] ?? '0.0.0.0',
    addressLine: 'Teslimat adresi'
);

$basket = (new Basket())
    ->addItem(new BasketItem('Ürün adı 1', '18.00', 1))
    ->addItem(new BasketItem('Ürün adı 2', '33.25', 2));

$request = (new CreateTokenRequest())
    ->setMerchantOid('SIPARIS-' . uniqid())
    ->setAmountFromTL('34.56')
    ->setCurrency('TL')
    ->setBuyer($buyer)
    ->setBasket($basket)
    ->setOkUrl('https://siteniz.com/odeme-basarili')
    ->setFailUrl('https://siteniz.com/odeme-hata')
    ->setInstallmentPolicy(noInstallment: false, maxInstallment: 12);

$response = $client->iframe()->createToken($request);
$iframeSrc = $client->iframe()->iframeUrl($response->token);
```

HTML iframe:

```
