PHPackages                             mskayali/paywall - 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. mskayali/paywall

ActiveYii2-extension[Payment Processing](/categories/payments)

mskayali/paywall
================

PayWall Payment Gateway SDK for Yii2 — Supports checkout, 3D Secure, recurring, marketplace, card management, payout, and more

v1.0.0(2mo ago)00MITPHPPHP &gt;=8.1

Since Mar 4Pushed 2mo agoCompare

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

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

PayWall PHP SDK
===============

[](#paywall-php-sdk)

[![Latest Stable Version](https://camo.githubusercontent.com/30ef4edbb38b759a951ad7cf8030cb68e72040bd0c684df4e39d8ae49ecff4f7/68747470733a2f2f706f7365722e707567782e6f72672f6d736b6179616c692f70617977616c6c2f762f737461626c65)](https://packagist.org/packages/mskayali/paywall)[![License](https://camo.githubusercontent.com/21072ce2513e9e5b8a05a6cb27c92933538ceaa13c60443ac3b6e975bcaf6fd8/68747470733a2f2f706f7365722e707567782e6f72672f6d736b6179616c692f70617977616c6c2f6c6963656e7365)](https://packagist.org/packages/mskayali/paywall)

A comprehensive Yii2 extension for the **PayWall Payment Gateway** — supports checkout, 3D Secure, direct payments, recurring billing, marketplace, card management, payout, bulk payments, and more.

Requirements
------------

[](#requirements)

- PHP &gt;= 8.1
- Yii2 &gt;= 2.0

Installation
------------

[](#installation)

```
composer require mskayali/paywall
```

Quick Start
-----------

[](#quick-start)

### 1. Configure as Yii2 Component

[](#1-configure-as-yii2-component)

```
// config/web.php or config/main.php
return [
    'components' => [
        'paywall' => [
            'class' => \mskayali\paywall\PayWallClient::class,
            'baseUrl' => 'https://payment-api.paywall.com.tr',
        ],
    ],
];
```

### 2. Set API Keys

[](#2-set-api-keys)

```
// In bootstrap or EVENT_BEFORE_REQUEST
$paywall = Yii::$app->paywall;
$paywall->setApiclientpublic('YOUR_API_KEY');
$paywall->setApikeypublic('YOUR_SECRET_KEY');
$paywall->setMerchantUID('YOUR_MERCHANT_UID');
```

### 3. Make a 3D Secure Payment

[](#3-make-a-3d-secure-payment)

```
use mskayali\paywall\models\ThreeDPaymentRequest;
use mskayali\paywall\models\CurrencyCodeId;

$paymentService = Yii::$app->paywall->getPaymentServices();

$request = new ThreeDPaymentRequest();
$request->load([
    'MerchantUniqueCode' => 'ORDER-' . time(),
    'Amount' => 99.90,
    'CurrencyId' => CurrencyCodeId::TRY->value,
    'InstallmentCount' => 1,
    'CardHolderName' => 'John Doe',
    'CardNo' => '4111111111111111',
    'CardExpireMonth' => '12',
    'CardExpireYear' => '2028',
    'Cvv' => '123',
    'SuccessUrl' => 'https://example.com/success',
    'FailUrl' => 'https://example.com/fail',
], '');

$result = $paymentService->start3DPayment($request);

if ($result->success) {
    // Redirect to 3D Secure page
    return $this->redirect($result->data->Url);
}
```

Services
--------

[](#services)

The SDK provides **16 specialized services** accessible via `PayWallClient`:

ServiceGetterDescription**PaymentService**`getPaymentServices()`3D/Direct payments, installments, BIN inquiry, cancel, refund**CheckOutService**`getCheckOutServices()`Hosted checkout page generation &amp; inquiry**RecurringService**`getRecurringServices()`Subscription management (create, update, pause, delete, cards)**MemberService**`getMemberServices()`Sub-merchant CRUD, bank accounts, value date settings**CartService**`getCartServices()`Saved card management (save, list, update, delete)**BulkServices**`getBulkServices()`Storm/Tsunami bulk payments, batch cancel/refund**PayOutService**`getPayOutService()`IBAN and member payout transfers**MarketPlaceService**`getMarketPlaceServices()`Marketplace payment approval, rejection, earnings**VPosService**`getVPosServices()`Virtual POS payment listing &amp; end-of-day reports**LinkQRService**`getLinkQRServices()`Payment link &amp; QR code generation**ConnectionService**`getConnectionServices()`Provider connection management**PairService**`getPairServices()`Device pairing (sync/async)**TerminalService**`getTerminalServices()`Terminal management &amp; connectivity checks**PaywallService**`getPaywallServices()`Temp token &amp; temp card generation**ProviderService**`getProviderServices()`Payment provider listing**ProductServeice**`getProductServeices()`Product/cargo/discount/earning managementPayment Workflows
-----------------

[](#payment-workflows)

### Direct Payment (Non-3D)

[](#direct-payment-non-3d)

```
$request = new PaymentAsyncSaleRequest();
$request->load([...], '');
$result = $paymentService->startDirectPayment($request);
```

### Cancel &amp; Refund

[](#cancel--refund)

```
// Same-day = Cancel, next day = Refund, partial amount = Partial Refund
$result = $paymentService->revertPayment(
    uniqueCode: 'PAYWALL-GUID-123',
    amount: 50.00  // null or 0 = full refund
);
```

### Installment Inquiry

[](#installment-inquiry)

```
use mskayali\paywall\models\InstallmentRequest;

$request = new InstallmentRequest();
$request->load([
    'BinNumber' => '411111',
    'Amount' => 500.00,
    'CurrencyId' => CurrencyCodeId::TRY->value,
], '');
$result = $paymentService->getInstallments($request);
```

### Hosted Checkout Page

[](#hosted-checkout-page)

```
use mskayali\paywall\models\CheckoutGenerateRequest;

$request = new CheckoutGenerateRequest();
$request->load([
    'MerchantUniqueCode' => 'CHECKOUT-' . uniqid(),
    'Amount' => 250.00,
    'CurrencyId' => CurrencyCodeId::TRY->value,
    'SuccessUrl' => 'https://example.com/success',
    'FailUrl' => 'https://example.com/fail',
], '');
$result = $checkoutService->createCheckoutPage($request);
```

### Recurring / Subscription

[](#recurring--subscription)

```
use mskayali\paywall\models\RecurringCreateRequest;
use mskayali\paywall\models\SubscriptionType;
use mskayali\paywall\models\RecurringPeriodType;

$request = new RecurringCreateRequest();
$request->load([
    'SubscriptionMerchantCode' => 'SUB-' . uniqid(),
    'Amount' => 49.99,
    'CurrencyId' => CurrencyCodeId::TRY->value,
    'SubscriptionType' => SubscriptionType::UNLIMITED->value,
    'RecurringPeriodType' => RecurringPeriodType::MONTHLY->value,
    'SuccessUrl' => 'https://example.com/subscription/success',
    'FailUrl' => 'https://example.com/subscription/fail',
], '');
$result = $recurringService->createRecurring($request);
```

### Sub-Merchant (Member) Management

[](#sub-merchant-member-management)

```
use mskayali\paywall\models\Member;
use mskayali\paywall\models\MerchantTypeId;

$member = new Member();
$member->IsSubMerchant = true;
$member->MemberType = MerchantTypeId::INDIVIDUAL;
$member->MemberExternalId = 'EXT-001';
$member->MemberName = 'Acme Corp';
$member->MemberTitle = 'Acme Corporation';
$member->MemberEmail = 'info@acme.com';
$member->MemberPhone = '5551234567';
$member->MemberAddress = '123 Business St, Istanbul';
$member->ContactName = 'John';
$member->ContactLastname = 'Doe';

$result = $memberService->createMember($member);
```

Enums
-----

[](#enums)

The SDK includes PHP 8.1+ enums for type safety:

```
use mskayali\paywall\models\CurrencyCodeId;      // TRY, USD, EUR, GBP, ...
use mskayali\paywall\models\PaymentTypeId;        // SALE, CANCELLATION, REFUND
use mskayali\paywall\models\PaymentStatusId;      // CREATED, SUCCESS, FAILED, ...
use mskayali\paywall\models\MerchantTypeId;       // INDIVIDUAL, PERSONAL_COMPANY, ...
use mskayali\paywall\models\CardBrandId;          // VISA, MASTERCARD, AMEX, TROY
use mskayali\paywall\models\SubscriptionType;     // UNLIMITED, COUNT_BASED
use mskayali\paywall\models\RecurringPeriodType;  // DAILY, WEEKLY, MONTHLY, ...
use mskayali\paywall\models\FeedbackType;         // Webhook callback types
use mskayali\paywall\models\RegionCountry;        // TR, US, DE, GB, ...

// All enums support fromName() lookup:
$currency = CurrencyCodeId::fromName('TRY'); // CurrencyCodeId::TRY
```

Error Handling
--------------

[](#error-handling)

All service methods return a `DynamicModel` with:

```
$result = $paymentService->start3DPayment($request);

if ($result->success) {
    $data = $result->data;  // Response body
} else {
    $error = $result->error;
    // $error['code']    — Error code
    // $error['message'] — Error description
}
```

Testing
-------

[](#testing)

```
composer install
./vendor/bin/phpunit --testdox
```

Project Structure
-----------------

[](#project-structure)

```
├── src/
│   ├── PayWallClient.php          # Main HTTP client (extends yii\httpclient\Client)
│   ├── models/                    # ~114 request/response models + Enums
│   │   ├── BaseResponse.php       # Standard API response wrapper
│   │   ├── Enums.php              # 35+ PHP 8.1 enums
│   │   ├── Member.php             # Member model with validation
│   │   └── ...
│   └── services/                  # 16 service classes
│       ├── PaymentService.php
│       ├── MemberService.php
│       └── ...
├── tests/                         # PHPUnit test suites
├── examples/                      # Usage examples
├── composer.json
└── phpunit.xml

```

API Endpoints
-------------

[](#api-endpoints)

The PayWall API operates across multiple subdomains:

EndpointBase URLPayment API`payment-api.paywall.com.tr`Payment Private API (Cancel/Refund)`payment-private-api.paywall.com.tr`CardWall API`card-api.paywall.com.tr`Member API`member-api.paywall.com.tr`Test Environment`test-payment-api.itspaywall.com`License
-------

[](#license)

MIT License. See [LICENSE](LICENSE) for details.

###  Health Score

35

—

LowBetter than 79% of packages

Maintenance86

Actively maintained with recent releases

Popularity0

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity42

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

Unknown

Total

1

Last Release

70d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/00d27c7f2736db2bfc1de08541fe26a1d23289898a3f8f98fa47096872379202?d=identicon)[mskayali](/maintainers/mskayali)

---

Top Contributors

[![mskayali](https://avatars.githubusercontent.com/u/9249493?v=4)](https://github.com/mskayali "mskayali (1 commits)")

---

Tags

recurringyii2paymentgatewayturkeypayoutmarketplacepaywall3dsecure

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/mskayali-paywall/health.svg)

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

###  Alternatives

[payconn/common

Payconn payment processing library for PHP

132.0k6](/packages/payconn-common)

PHPackages © 2026

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