PHPackages                             evrenonur/sanalpos - 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. evrenonur/sanalpos

ActiveLibrary[Payment Processing](/categories/payments)

evrenonur/sanalpos
==================

Türkiye'deki banka ve ödeme kuruluşlarının sanal POS entegrasyonlarını tek bir Laravel paketi altında birleştiren kütüphane

1.2.0(2mo ago)19237↑87.5%3[1 issues](https://github.com/evrenonur/sanalpos/issues)MITPHPPHP ^8.3CI passing

Since Feb 24Pushed 2mo ago1 watchersCompare

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

READMEChangelog (8)Dependencies (12)Versions (10)Used By (0)

SanalPos
========

[](#sanalpos)

[![Latest Version on Packagist](https://camo.githubusercontent.com/a9c586cb2905ff305e9df97d40059821be4d8cb0836a63e0f77006668ab8f714/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f657672656e6f6e75722f73616e616c706f73)](https://packagist.org/packages/evrenonur/sanalpos)[![License: MIT](https://camo.githubusercontent.com/fdf2982b9f5d7489dcf44570e714e3a15fce6253e0cc6b5aa61a075aac2ff71b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d79656c6c6f772e737667)](LICENSE)[![PHP Version](https://camo.githubusercontent.com/4c8bab5114aaae3e383fd0895d61222418a7c4a7176a847c3aa5c53ceaa34646/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f7068702d762f657672656e6f6e75722f73616e616c706f73)](https://packagist.org/packages/evrenonur/sanalpos)

SanalPos: Sanal Pos Entegrasyonlarını Basitleştirin
---------------------------------------------------

[](#sanalpos-sanal-pos-entegrasyonlarını-basitleştirin)

SanalPos, Türkiye'deki birçok bankanın ve ödeme kuruluşunun sanal POS entegrasyonlarını tek bir kod tabanı ile kullanmayı mümkün kılan PHP/Laravel kütüphanesidir. Bu sayede geliştiriciler, her banka için ayrı ayrı kod yazmak zorunda kalmadan, tüm sanal POS işlemlerini tek bir kütüphane üzerinden gerçekleştirebilirler.

> Bu paket, [CP.VPOS](https://github.com/cempehlivan/CP.VPOS) (.NET) kütüphanesinin PHP/Laravel portudur.

Özellikler
----------

[](#özellikler)

- **Tek Kod Tabanı:** Farklı bankaların sanal pos entegrasyonları için ayrı ayrı kod yazmaya gerek kalmadan, tek bir API ile tüm işlemleri gerçekleştirebilirsiniz.
- **Basitleştirilmiş İşlem Akışı:** Sanal pos işlemleri için gerekli tüm adımlar kütüphane tarafından otomatik olarak halledilir.
- **3D Güvenli Ödeme Desteği:** 3D Güvenli Ödeme işlemleri için gerekli tüm adımlar desteklenir.
- **Geniş Banka Kapsamı:** 35+ banka ve ödeme kuruluşu desteği.
- **Ödeme Kuruluşu Komisyon Politikası:** CCPayment tabanlı kuruluşlarda taksit komisyonunu müşteriye veya satıcıya yansıtma seçeneği desteklenir.
- **Laravel Entegrasyonu:** ServiceProvider, Facade ve config dosyası ile tam Laravel uyumluluğu.
- **Bağımsız Kullanım:** Laravel olmadan da `SanalPosClient` statik sınıfı ile kullanılabilir.

Gereksinimler
-------------

[](#gereksinimler)

- PHP &gt;= 8.3
- Laravel 10, 11, 12 veya 13
- ext-simplexml, ext-openssl, ext-json

Kurulum
-------

[](#kurulum)

Composer ile projenize ekleyin:

```
composer require evrenonur/sanalpos
```

Laravel otomatik olarak ServiceProvider'ı ve Facade'ı kaydeder. Config dosyasını yayınlamak için:

```
php artisan vendor:publish --provider="EvrenOnur\SanalPos\SanalPosServiceProvider"
```

Kullanılabilir Sanal POS'lar
----------------------------

[](#kullanılabilir-sanal-poslar)

Sanal POSSatışSatış 3DİptalİadePaynet✔️✔️✔️✔️Akbank✔️✔️✔️✔️Akbank Nestpay✔️✔️✔️✔️Alternatif Bank✔️✔️✔️✔️Anadolubank✔️✔️✔️✔️Denizbank✔️✔️✔️✔️QNB Finansbank✔️✔️✔️✔️Finansbank Nestpay✔️✔️✔️✔️Garanti BBVA✔️✔️❌❌Halkbank✔️✔️✔️✔️ING Bank✔️✔️✔️✔️İş Bankası✔️✔️✔️✔️Şekerbank✔️✔️✔️✔️Türk Ekonomi Bankası✔️✔️✔️✔️Türkiye Finans✔️✔️✔️✔️Vakıfbank✔️✔️✔️✔️Yapı Kredi Bankası✔️✔️❌❌Ziraat Bankası✔️✔️✔️✔️Kuveyt Türk✔️✔️❌❌Vakıf Katılım✔️✔️❌❌Cardplus✔️✔️✔️✔️Paratika✔️✔️✔️✔️Payten (MSU)✔️✔️✔️✔️ZiraatPay✔️✔️✔️✔️VakıfPayS✔️✔️✔️✔️Iyzico✔️✔️✔️✔️Sipay✔️✔️✔️✔️QNBpay✔️✔️✔️✔️ParamPos✔️✔️✔️✔️PayBull✔️✔️✔️✔️Parolapara✔️✔️✔️✔️IQmoney✔️✔️✔️✔️Ahlpay✔️✔️✔️✔️Moka✔️✔️✔️✔️Vepara✔️✔️✔️✔️Tami✔️✔️✔️✔️HalkÖde✔️✔️✔️✔️PayNKolay✔️✔️✔️✔️API Bilgilerinin Ayarlanması - `MerchantAuth`
---------------------------------------------

[](#api-bilgilerinin-ayarlanması---merchantauth)

AlanTürAçıklama`bank_code``string`Banka/ödeme kuruluşu kodu. `BankService` sabitlerini kullanın.`merchant_id``string`Firma kodu / Üye işyeri numarası`merchant_user``string`API kullanıcı adı`merchant_password``string`API kullanıcı şifresi`merchant_storekey``string`3D store key / güvenlik anahtarı`test_platform``bool``true` → test ortamı, `false` → canlı ortam`installment_commission_policy``InstallmentCommissionPolicy`CCPayment tabanlı kuruluşlarda taksit komisyonunun nasıl yansıtılacağını belirler. Varsayılan: `Default`### Taksit Komisyon Politikası

[](#taksit-komisyon-politikası)

CCPayment altyapısını kullanan ödeme kuruluşlarında taksitli işlemlerde oluşan komisyon için aşağıdaki seçenekler kullanılabilir:

- `InstallmentCommissionPolicy::Default`: Gateway varsayılan davranışı kullanılır
- `InstallmentCommissionPolicy::ChargeToCustomer`: Komisyon müşteriye yansıtılır
- `InstallmentCommissionPolicy::AbsorbByMerchant`: Komisyon satıcı üzerinde bırakılır

```
use EvrenOnur\SanalPos\Enums\InstallmentCommissionPolicy;

$auth = new MerchantAuth(
    bank_code: BankService::SIPAY,
    merchant_id: 'merchant-id',
    merchant_user: 'merchant-user',
    merchant_password: 'merchant-password',
    merchant_storekey: 'merchant-storekey',
    test_platform: true,
    installment_commission_policy: InstallmentCommissionPolicy::ChargeToCustomer,
);
```

Kullanım Örnekleri
------------------

[](#kullanım-örnekleri)

### 3D'siz Direkt Satış İşlemi

[](#3dsiz-direkt-satış-i̇şlemi)

`payment_3d->confirm = false` gönderilmesi halinde 3D'siz çekim işlemi yapılır ve direkt olarak nihai sonuç döner.

```
use EvrenOnur\SanalPos\SanalPosClient;
use EvrenOnur\SanalPos\DTOs\{MerchantAuth, SaleInfo, CustomerInfo, Payment3DConfig};
use EvrenOnur\SanalPos\DTOs\Requests\SaleRequest;
use EvrenOnur\SanalPos\Services\BankService;
use EvrenOnur\SanalPos\Enums\{Currency, Country};

$auth = new MerchantAuth(
    bank_code: BankService::QNBPAY,
    merchant_id: '20158',
    merchant_user: '07fb70f9d8de575f32baa6518e38c5d6',
    merchant_password: '61d97b2cac247069495be4b16f8604db',
    merchant_storekey: '$2y$10$N9IJkgazXMUwCzpn7NJrZePy3v.dIFOQUyW4yGfT3eWry6m.KxanK',
    test_platform: true,
);

$customerInfo = new CustomerInfo(
    tax_number: '1111111111',
    email_address: 'test@test.com',
    name: 'cem',
    surname: 'pehlivan',
    phone_number: '1111111111',
    address_description: 'adres',
    city_name: 'istanbul',
    country: Country::TUR,
    post_code: '34000',
    tax_office: 'maltepe',
    town_name: 'maltepe',
);

$saleRequest = new SaleRequest(
    order_number: dechex(time()),
    sale_info: new SaleInfo(
        card_name_surname: 'test kart',
        card_number: '4022780520669303',
        card_expiry_month: 1,
        card_expiry_year: 2050,
        card_cvv: '988',
        amount: 10.00,
        currency: Currency::TRY,
        installment: 1,
    ),
    payment_3d: new Payment3DConfig(confirm: false),
    customer_ip_address: '1.1.1.1',
    invoice_info: $customerInfo,
    shipping_info: $customerInfo,
);

$response = SanalPosClient::sale($saleRequest, $auth);

echo "Status: {$response->status->name}\n";
echo "Mesaj: {$response->message}\n";
echo "İşlem ID: {$response->transaction_id}\n";
```

### 3D Secure Satış İşlemi

[](#3d-secure-satış-i̇şlemi)

`payment_3d->confirm = true` gönderilmesi halinde 3D'li satış işlemi başlatılır. `payment_3d->return_url` alanına 3D'den gelecek olan cevabın iletilmesi istenen URL girilmelidir.

```
$saleRequest = new SaleRequest(
    order_number: dechex(time()),
    sale_info: new SaleInfo(
        card_name_surname: 'test kart',
        card_number: '4022780520669303',
        card_expiry_month: 1,
        card_expiry_year: 2050,
        card_cvv: '988',
        amount: 10.00,
        currency: Currency::TRY,
        installment: 1,
    ),
    payment_3d: new Payment3DConfig(
        confirm: true,
        return_url: 'https://example.com/payment/3d-response',
    ),
    customer_ip_address: request()->ip(),
    invoice_info: $customerInfo,
    shipping_info: $customerInfo,
);

$response = SanalPosClient::sale($saleRequest, $auth);

// status RedirectURL ise → $response->message içindeki URL'e yönlendirin
// status RedirectHTML ise → $response->message içindeki HTML'i tarayıcıda gösterin
```

### 3D Secure Satış İşlemi - 2. Adım

[](#3d-secure-satış-i̇şlemi---2-adım)

```
use EvrenOnur\SanalPos\DTOs\Requests\Sale3DResponse;

// Controller method - 3D'den gelen callback
public function virtualPOS3DResponse(Request $request)
{
    $responseArray = $request->all();

    $response = SanalPosClient::sale3DResponse(
        new Sale3DResponse(responseArray: $responseArray),
        $auth
    );

    // $response->status → SaleResponseStatus::Success veya Error
    // $response->message → Sonuç mesajı
    // $response->transaction_id → İşlem ID
    // $response->private_response['response_1'] → callback verisi
    // $response->private_response['response_2'] → gerekiyorsa provider tamamlama yanıtı
}
```

### İptal İşlemi

[](#i̇ptal-i̇şlemi)

```
use EvrenOnur\SanalPos\DTOs\Requests\CancelRequest;

$cancelRequest = new CancelRequest(
    order_number: 'ORDER-001',
    transaction_id: 'TXN-001',
);

$response = SanalPosClient::cancel($cancelRequest, $auth);
```

### İade İşlemi

[](#i̇ade-i̇şlemi)

```
use EvrenOnur\SanalPos\DTOs\Requests\RefundRequest;

$refundRequest = new RefundRequest(
    order_number: 'ORDER-001',
    refund_amount: 50.00,
    currency: Currency::TRY,
);

$response = SanalPosClient::refund($refundRequest, $auth);
```

### BIN Taksit Sorgulama

[](#bin-taksit-sorgulama)

```
use EvrenOnur\SanalPos\DTOs\Requests\BINInstallmentQueryRequest;

$request = new BINInstallmentQueryRequest(
    BIN: '411111',  // Kart numarasının ilk 6 hanesi
    currency: Currency::TRY,
);

$response = SanalPosClient::binInstallmentQuery($request, $auth);
```

### Laravel Facade ile Kullanım

[](#laravel-facade-ile-kullanım)

```
use EvrenOnur\SanalPos\Facades\SanalPos;

$response = SanalPos::sale($saleRequest, $auth);
$response = SanalPos::cancel($cancelRequest, $auth);
$response = SanalPos::refund($refundRequest, $auth);
```

Sanal POS API Bilgileri
-----------------------

[](#sanal-pos-api-bilgileri)

Sanal POSbank\_codemerchant\_idmerchant\_usermerchant\_passwordmerchant\_storekeyAkbank`BankService::AKBANK`İş Yeri NomerchantSafeIdTerminal Safe IDSecret KeyAkbank Nestpay`BankService::AKBANK_NESTPAY`Mağaza KoduApi KullanıcısıApi Şifresi3D StorekeyGaranti BBVA`BankService::GARANTI_BBVA`Firma KoduTerminal NoPROVAUT Şifresi3D AnahtarıVakıfbank`BankService::VAKIFBANK`Üye İşyeri NoPOS NoApi Şifresi—Yapı Kredi`BankService::YAPI_KREDI`Firma KoduTerminal NoPosNet IDENCKEYIyzico`BankService::IYZICO`Üye İşyeri NoAPI AnahtarıGüvenlik Anahtarı—Paynet`BankService::PAYNET`Paynet Merchant IDBasic Auth kullanıcısıBasic Auth şifresi—Sipay`BankService::SIPAY`Üye İşyeri IDUygulama AnahtarıUygulama ParolasıMerchant KeyQNBpay`BankService::QNBPAY`Üye İşyeri IDUygulama AnahtarıUygulama ParolasıMerchant KeyParamPos`BankService::PARAMPOS`Client CodeKullanıcı AdıŞifreGuid AnahtarMoka`BankService::MOKA`Bayi KoduApi KullanıcısıApi Şifresi—Ahlpay`BankService::AHLPAY`Member IDApi KullanıcısıApi ŞifresiAPI KeyPayten (MSU)`BankService::PAYTEN`Firma KoduApi KullanıcısıApi Şifresi—Tami`BankService::TAMI`Üye İşyeri NoTerminal NoKidValue|KValueSecret KeyPayNKolay`BankService::PAYNKOLAY`sx (Token)sx listsx iptalSecret Key> Nestpay bankalarında (Alternatif Bank, Anadolubank, Denizbank, Halkbank, ING Bank, İş Bankası, Şekerbank, TEB, Türkiye Finans, Ziraat Bankası, Cardplus) alan eşlemesi aynıdır: Mağaza Kodu, Api Kullanıcısı, Api Şifresi, 3D Storekey.

Proje Yapısı
------------

[](#proje-yapısı)

```
src/
├── Contracts/              # VirtualPOSServiceInterface
├── Enums/                  # Currency, Country, ResponseStatus, vb.
├── Exceptions/             # HttpRequestException
├── Facades/                # Laravel Facade
├── Gateways/
│   ├── AbstractGateway.php # Tüm gateway'lerin temel sınıfı
│   ├── Banks/              # Banka gateway'leri
│   │   └── Nestpay/        # Nestpay altyapılı bankalar
│   └── Providers/          # Ödeme kuruluşu gateway'leri
│       ├── CCPayment/      # CCPayment altyapılı kuruluşlar
│       └── Payten/         # Payten altyapılı kuruluşlar
├── Support/                # StringHelper, ValidationHelper, XmlHelper, MakesHttpRequests
├── Infrastructure/
│   └── Iyzico/             # Iyzico özel altyapı sınıfları
├── DTOs/                   # Data Transfer Objects
│   ├── Requests/           # SaleRequest, CancelRequest, RefundRequest, vb.
│   ├── Responses/          # SaleResponse, CancelResponse, RefundResponse, vb.
│   └── ...                 # Bank, SaleInfo, CustomerInfo, MerchantAuth, vb.
├── Services/               # BankService
├── SanalPosClient.php      # Ana statik istemci
└── SanalPosServiceProvider.php

```

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

[](#yapılandırma)

Config dosyasında (`config/sanalpos.php`) aşağıdaki ayarlar mevcuttur:

AyarEnv DeğişkeniVarsayılanAçıklama`test_mode``SANALPOS_TEST_MODE``true`Tüm işlemleri test ortamına yönlendirir`timeout``SANALPOS_TIMEOUT``60`HTTP istek zaman aşımı (saniye)`verify_ssl``SANALPOS_VERIFY_SSL``true`SSL sertifika doğrulaması (production'da `true` olmalıdır)`connect_timeout``SANALPOS_CONNECT_TIMEOUT``10`HTTP bağlantı kurma zaman aşımı (saniye)Hata Yönetimi
-------------

[](#hata-yönetimi)

HTTP istekleri sırasında oluşan hatalar `HttpRequestException` olarak fırlatılır:

```
use EvrenOnur\SanalPos\Exceptions\HttpRequestException;

try {
    $response = SanalPosClient::sale($saleRequest, $auth);
} catch (HttpRequestException $e) {
    // HTTP bağlantı hatası, timeout vb.
    echo $e->getMessage();
    echo $e->url; // Hata oluşan URL
} catch (\InvalidArgumentException $e) {
    // Validasyon hatası (eksik/hatalı parametre)
    echo $e->getMessage();
}
```

Test
----

[](#test)

```
composer test
# veya
vendor/bin/pest
```

Lisans
------

[](#lisans)

MIT lisansı altında dağıtılmaktadır. Detaylar için [LICENSE](LICENSE) dosyasına bakınız.

Referans
--------

[](#referans)

Bu PHP paketi, [cempehlivan/CP.VPOS](https://github.com/cempehlivan/CP.VPOS) (.NET) kütüphanesinin mimari yapısı ve iş akışları temel alınarak geliştirilmiştir.

###  Health Score

47

—

FairBetter than 93% of packages

Maintenance85

Actively maintained with recent releases

Popularity26

Limited adoption so far

Community12

Small or concentrated contributor base

Maturity55

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 75.7% 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 ~9 days

Recently: every ~15 days

Total

8

Last Release

68d ago

PHP version history (2 changes)1.0.0PHP ^8.1

1.1.0PHP ^8.3

### Community

Maintainers

![](https://www.gravatar.com/avatar/1fc8601ce58b58037771714731b5909d88b0e08cb3d2e5fcf8e28799dd5376fa?d=identicon)[evrenonur](/maintainers/evrenonur)

---

Top Contributors

[![evrenonur](https://avatars.githubusercontent.com/u/49561437?v=4)](https://github.com/evrenonur "evrenonur (28 commits)")[![github-actions[bot]](https://avatars.githubusercontent.com/in/15368?v=4)](https://github.com/github-actions[bot] "github-actions[bot] (7 commits)")[![ykakkaya](https://avatars.githubusercontent.com/u/100940437?v=4)](https://github.com/ykakkaya "ykakkaya (2 commits)")

---

Tags

laravelpaymentposturkeyakbanksanalposIsbankiyzicosipaygarantiyapikredisanal-pos

###  Code Quality

TestsPest

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/evrenonur-sanalpos/health.svg)

```
[![Health](https://phpackages.com/badges/evrenonur-sanalpos/health.svg)](https://phpackages.com/packages/evrenonur-sanalpos)
```

###  Alternatives

[craftcms/cms

Craft CMS

3.6k3.6M3.1k](/packages/craftcms-cms)[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)[linkxtr/laravel-qrcode

A clean, modern, and easy-to-use QR code generator for Laravel

3720.4k](/packages/linkxtr-laravel-qrcode)

PHPackages © 2026

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