PHPackages                             spiderwebtr/payment-kit - 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. spiderwebtr/payment-kit

ActiveLibrary[Payment Processing](/categories/payments)

spiderwebtr/payment-kit
=======================

Çok sağlayıcılı Laravel ödeme altyapısı + test panosu (3D Secure, kart saklama, taksit) — Horizon/Pulse tarzı.

v0.0.1(today)10MITPHPPHP ^8.3

Since Jun 18Pushed todayCompare

[ Source](https://github.com/spiderwebtr/payment-kit)[ Packagist](https://packagist.org/packages/spiderwebtr/payment-kit)[ Docs](https://github.com/spiderwebtr/payment-kit)[ RSS](/packages/spiderwebtr-payment-kit/feed)WikiDiscussions main Synced today

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

PaymentKit
==========

[](#paymentkit)

Laravel için **çok sağlayıcılı ödeme altyapısı**. Sipay, Param/TurkPOS, iyzico, AHL Pay ve RubikPara'yı tek bir arayüz arkasında toplar; 3D Secure ödemeleri kendi sayfalarınızdan başlatabilir, ayrıca — Horizon/Pulse gibi ayrı bir panodan — test edip izleyebilirsiniz.

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

[](#gereksinimler)

- PHP **8.3+**
- Laravel **13+**
- Livewire **3.5+**

Kurulum
-------

[](#kurulum)

```
composer require spiderwebtr/payment-kit

# config + migration dosyalarını yayınla (tek tag ikisini birden):
php artisan vendor:publish --tag=payment-kit

php artisan migrate
```

> Yalnızca config ya da yalnızca migration için `--tag=payment-kit-config` / `--tag=payment-kit-migrations` kullanabilirsiniz. Migration'lar yayınlanırken güncel timestamp alır (uygulama migration'larıyla doğru sırada çalışır).

Pano varsayılan olarak `/payment-kit` adresinde yayınlanır (`config/payment-kit.php → path`).

Kapatma
-------

[](#kapatma)

`PAYMENT_KIT_ENABLED=false` ile paketin tüm route'ları (pano, process, callback, logo) tek anahtarla devre dışı bırakılabilir.

Erişim
------

[](#erişim)

- **Yerel ortamda** (`APP_ENV=local`) panoya doğrudan girilir.
- **Diğer ortamlarda** erişim, Laravel'in `viewPaymentKit` gate'i ile kontrol edilir (Pulse'ın `viewPulse` deseni). `AppServiceProvider::boot()` içinde tanımlayın:

```
use Illuminate\Support\Facades\Gate;

Gate::define('viewPaymentKit', fn ($user) => in_array($user->email, [
    'admin@example.com',
]));
```

Gate tanımlı değilse (yerel dışı) erişim reddedilir.

Sağlayıcı kimlik bilgileri
--------------------------

[](#sağlayıcı-kimlik-bilgileri)

`.env` üzerinden verilir (ör. `SIPAY_*`, `AHLPAY_*`, `RUBIKPARA_*`...). Ayrıntı için `config/payment-kit.php` dosyasındaki `providers` bölümüne bakın.

Kendi sayfanızdan kullanım
--------------------------

[](#kendi-sayfanızdan-kullanım)

> **API + Next.js (headless)** kuruyorsanız: adım adım entegrasyon için [docs/headless-integration.md](docs/headless-integration.md).

Pano dışında, kendi ödeme sayfanızdan (ör. bağış formu) da ödeme başlatabilirsiniz. Formunuz kart alanlarını `card_data[...]` adlarıyla göndersin; 3DS sonrası kullanıcı `returnUrl` ile verdiğiniz sayfaya döner:

```
use Spiderwebtr\PaymentKit\Facades\PaymentKit;
use Spiderwebtr\PaymentKit\Models\Payment;
use Spiderwebtr\PaymentKit\Payments\CardData;
use Spiderwebtr\PaymentKit\Payments\PaymentService;

public function store(Request $request, PaymentService $payments)
{
    $result = $payments->createTransaction(
        providerKey: 'rubikpara',
        amount: (float) $order->total_amount, // float, decimal string ya da PaymentAmount
        description: 'Bağış',
        returnUrl: fn (Payment $payment) => route('donation.thanks', $payment),
        card: CardData::fromArray((array) $request->input('card_data', [])),
        installmentCount: (int) $request->input('installment_count', 1),
    );

    return PaymentKit::redirectToProcess($result['response']); // 3DS ekranı
}
```

`returnUrl` `string|Closure|null` kabul eder:

```
returnUrl: 'https://site.test/odeme/tamam',                       // sabit URL
returnUrl: fn (Payment $payment) => route('thanks', $payment),    // ödemeye özel URL
```

Closure, **oluşturulan Payment ile** çağrılır — ödeme `createTransaction` içinde yaratıldığından, URL'i kurarken id/uuid'sine ancak bu sayede erişirsiniz (ör. `/thanks/42`). Verilmezse kullanıcı paket işlem detayına döner.

Sonuç sayfanızda ödemeyi `Payment` modelinden okuyun (`status`, `note`, `reference_id`).

### Ödeme sahibi (`owner`)

[](#ödeme-sahibi-owner)

Ödemeyi **herhangi bir modele** bağlayabilirsiniz — polymorphic ve opsiyonel. Sahip illa giriş yapmış bir kullanıcı olmak zorunda değil; **giriş yapılmamış bir ödeme bile bir `Order`'a** (ya da `Subscription`, `Invoice`, `Cart`...) bağlanabilir:

```
// Misafir ödemesi, bir siparişe bağlı:
$payments->createTransaction('rubikpara', $order->total, owner: $order, card: ...);

// Ya da giriş yapmış kullanıcıya:
$payments->createTransaction('rubikpara', 100.0, owner: $request->user(), card: ...);
```

Kayıtlı kartla ödemede sahip verilmezse otomatik olarak kartın sahibine düşer. Sorgulama:

```
Payment::forOwner($order)->get();   // bu siparişin ödemeleri
$order->morphMany(Payment::class, 'owner');  // ilişki kurmak isterseniz
```

Eventler
--------

[](#eventler)

`PaymentCompleted` / `PaymentCanceled` / `PaymentRefunded` event'leri yayınlanır. Laravel'in event auto-discovery'si (varsayılan açık) ile bir Listener'da `handle()`parametresini type-hint etmeniz dinlemek için yeterlidir:

```
namespace App\Listeners;

use Spiderwebtr\PaymentKit\Events\PaymentCompleted;

class MarkOrderPaid
{
    public function handle(PaymentCompleted $event): void
    {
        // $event->payment
    }
}
```

(Auto-discovery kapalıysa `Event::listen(PaymentCompleted::class, ...)` ile manuel kaydedin.)

Kart saklama (tokenization)
---------------------------

[](#kart-saklama-tokenization)

Kartın kendisi **sağlayıcıda** saklanır; veritabanında yalnızca sağlayıcı token'ı (şifreli) ve kartı tanımaya yetecek maskeli bilgiler (bin + son 4, marka/tip) tutulur. Her saklanan kartın bir **sahibi (owner) zorunludur** — `User` dahil herhangi bir host modeli olabilir (polymorphic). Sahipsiz kart saklanamaz (panoda misafir kullanıcı kart kaydedemez):

```
use Spiderwebtr\PaymentKit\Payments\CardVault;

$card = app(CardVault::class)->store($user, 'rubikpara', [
    'holder_name' => 'Ad Soyad',
    'number' => '5218...9752',
    'expiry_month' => 12,
    'expiry_year' => 30,
    'cvv' => '000',
], label: 'İş kartım');

// Kayıtlı karttan ödeme (kart alanları gerekmez):
$payments->createTransaction('rubikpara', '100.00', storedCard: $card);
```

Sağlayıcının desteklemesi için handler'ı `SupportsCardStorage` arayüzünü uygulamalıdır (şu an: RubikPara). Pano, destekleyen sağlayıcılarda "kartı kaydet" seçeneği ve kayıtlı kart listesi sunar.

Yeni sağlayıcı ekleme
---------------------

[](#yeni-sağlayıcı-ekleme)

Tek bir handler class'ı + DB satırı + `public/images/providers/{key}` logosu yeterlidir.

Durum
-----

[](#durum)

PaymentKit yalnızca bir test panosu değil; aynı zamanda çok sağlayıcılı bir **ödeme altyapısı / boilerplate** sunar (kendi sayfalarınızdan gerçek 3DS ödemesi, kart saklama, taksit, event'ler). Ancak henüz **stabil değildir** — API'ler değişebilir.

> ⚠️ Bu sürüm production'da kullanılmamalıdır. Stabil bir sürüme kadar yalnızca test/geliştirme ortamlarında değerlendirin.

###  Health Score

38

—

LowBetter than 83% of packages

Maintenance100

Actively maintained with recent releases

Popularity2

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity38

Early-stage or recently created project

 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

Unknown

Total

1

Last Release

0d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/7ca07bf9edf82ddb8655ee95df134e9c8c5580aab99bdd15bff1d8fda759fa66?d=identicon)[emredipi](/maintainers/emredipi)

---

Top Contributors

[![emredipi](https://avatars.githubusercontent.com/u/23154364?v=4)](https://github.com/emredipi "emredipi (47 commits)")

---

Tags

laravellivewirepaymentdashboardtokenizationinstallment3d-secure

###  Code Quality

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/spiderwebtr-payment-kit/health.svg)

```
[![Health](https://phpackages.com/badges/spiderwebtr-payment-kit/health.svg)](https://phpackages.com/packages/spiderwebtr-payment-kit)
```

###  Alternatives

[larastan/larastan

Larastan - Discover bugs in your code without running it. A phpstan/phpstan extension for Laravel

6.4k51.0M7.5k](/packages/larastan-larastan)[laravel/pulse

Laravel Pulse is a real-time application performance monitoring tool and dashboard for your Laravel application.

1.7k14.1M121](/packages/laravel-pulse)[laravel/ai

The official AI SDK for Laravel.

9782.1M157](/packages/laravel-ai)[spatie/laravel-health

Monitor the health of a Laravel application

87411.3M152](/packages/spatie-laravel-health)[tallstackui/tallstackui

TallStackUI is a powerful suite of Blade components that elevate your workflow of Livewire applications.

721160.4k12](/packages/tallstackui-tallstackui)[psalm/plugin-laravel

Psalm plugin for Laravel

3325.1M337](/packages/psalm-plugin-laravel)

PHPackages © 2026

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