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

ActiveLibrary[Payment Processing](/categories/payments)

rmscms/payment
==============

Modular payment gateway toolkit for RMS platform

v1.0.2(5mo ago)00MITPHPPHP ^8.2

Since Nov 18Pushed 5mo agoCompare

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

READMEChangelogDependencies (1)Versions (4)Used By (0)

RMS Payment
===========

[](#rms-payment)

پکیج `rmscms/payment` یک لایه‌ی ماژولار برای مدیریت درگاه‌های بانکی در اکوسیستم RMS است. هدف این لایه، جداسازی منطق پیچیده‌ی پرداخت از پروژه‌های مختلف (Shop، Core و …) و فراهم کردن یک API یکپارچه برای «شروع تراکنش» و «تأیید نهایی» است.

امکانات فعلی
------------

[](#امکانات-فعلی)

- ساختار روشن برای ثبت درگاه‌های متعدد (۲۰+ بانک داخلی).
- DTOهای مشخص برای درخواست و پاسخ: `PaymentRequest`, `InitializationResult`, `VerificationResult`.
- Driver Manager بر پایه‌ی `Illuminate\Support\Manager` برای resolve کردن درگاه‌ها.
- پشتیبانی از هر دو حالت «Redirect» و «Form POST» هنگام هدایت کاربر به بانک.
- Gateway پیش‌فرض Sandbox برای توسعه و تست.
- Driver آماده برای زرین‌پال (محیط واقعی و صندوق تست) همراه با لاگ‌گیری در دیتابیس و پشتیبانی از قابلیت‌هایی مثل کارت مشخص، currency و متد verify.
- Facade به نام `Payment` برای استفاده‌ی سریع (متدهای `start`, `verify`, `gateways`).
- مدل `PaymentTransaction` با وضعیت‌های مرحله‌ای (initialized, sent, returned, success, failed) برای ذخیره‌ی کامل لاگ تراکنش‌ها.

نصب
---

[](#نصب)

```
composer require rmscms/payment
```

سپس برای راه‌اندازی کامل جداول و منوهای ادمین، دستور نصب را اجرا کنید:

```
php artisan payment:install
```

این دستور کانفیگ را پابلیش می‌کند، مایگریشن‌های پکیج را اجرا می‌کند، درایور پیش‌فرض را نصب/همگام‌سازی می‌کند و منوی پرداخت را به سایدبار ادمین اضافه می‌کند. در صورت نیاز می‌توانید درایور مشخصی را نصب کنید:

```
php artisan payment:install --driver=zarinpal
```

یا اگر در محیط Monorepo هستید:

1. فولدر را در `packages/rms/payment` قرار دهید.
2. در `composer.json` ریشه مسیر آن را به لیست repositories اضافه کنید: ```
    {
      "repositories": [
        {
          "type": "path",
          "url": "packages/rms/payment",
          "options": { "symlink": true }
        }
      ]
    }
    ```
3. Autoload پروژه را به‌روزرسانی کنید: ```
    "autoload": {
      "psr-4": {
        "RMS\\Payment\\": "packages/rms/payment/src/"
      }
    }
    ```
4. `composer dump-autoload`

### آماده‌سازی Playground سندباکس (پروژه‌ی `rms2-packages`)

[](#آماده‌سازی-playground-سندباکس-پروژه‌ی-rms2-packages)

1. پس از نصب، فایل کانفیگ را منتشر کنید: ```
    php artisan vendor:publish --provider="RMS\Payment\PaymentServiceProvider" --tag=payment-config
    ```
2. مایگریشن‌های هسته را اجرا کنید: ```
    php artisan migrate --path=packages/rms/payment/database/migrations
    ```
3. برای هر Driver که مسیر Migration دارد، دستور اختصاصی‌اش را بزنید (مثلاً زرین‌پال): ```
    php artisan payment:install-driver zarinpal
    ```
4. در `.env` مقدارهای زیر را ست کنید تا به سندباکس زرین‌پال متصل شوید: ```
    PAYMENT_GATEWAY=zarinpal
    PAYMENT_ZARINPAL_MERCHANT=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
    PAYMENT_ZARINPAL_SANDBOX=true
    PAYMENT_ZARINPAL_DESCRIPTION="پرداخت سندباکس فروشگاه"

    ```
5. حالا می‌توانید از مسیر `http://localhost:8000/payment/sandbox` فرم تست را باز کنید. این صفحه:
    - فرم ساخت تراکنش تستی با مبلغ دلخواه دارد.
    - امکان انتخاب Driver (بر اساس `PAYMENT_GATEWAY`) را فراهم می‌کند؛ برای تست آفلاین، مقدار `.env` را روی `sandbox` بگذارید.
    - بعد از `Start`، به درگاه تستی داخلی (`/payment/sandbox/gateway`) هدایت می‌شوید و می‌توانید سناریوی موفق/ناموفق را انتخاب کنید.
    - هر تراکنش در جدول `payment_transactions` با وضعیت و پیام دقیق (status\_detail) لاگ می‌شود و در لیست پایین صفحه قابل مشاهده است.
    - Callback روی آدرس `payment/sandbox/callback` فراخوانی می‌شود و خروجی `Payment::verify()` به‌صورت کامل نمایش داده می‌شود.

تنظیمات
-------

[](#تنظیمات)

فایل پیکربندی در `config/payment.php` منتشر می‌شود. مهم‌ترین کلیدها:

```
return [
    'default' => env('PAYMENT_GATEWAY', 'sandbox'),
    'currency' => 'IRT',
    'amount_scale' => 1,
    'callback_url' => '/payment/callback',
    'certificates_path' => storage_path('payment/certs'),
    'admin' => [
        'enabled' => env('PAYMENT_ADMIN_ENABLED', true),
        'prefix' => env('PAYMENT_ADMIN_PREFIX', 'payment'),
        'route_name' => 'payment',
    ],
    'gateways' => [
        'sandbox' => [
            'driver' => RMS\Payment\Gateways\SandboxGateway::class,
            'merchant_id' => env('PAYMENT_SANDBOX_MERCHANT'),
            'secret_key' => env('PAYMENT_SANDBOX_SECRET'),
            'mode' => 'form',
            'title' => 'Sandbox Gateway',
            'migrations' => [
                // 'packages/rms/payment/database/migrations'
            ],
        ],
        'zarinpal' => [
            'driver' => RMS\Payment\Gateways\ZarinpalGateway::class,
            'merchant_id' => env('PAYMENT_ZARINPAL_MERCHANT'),
            'sandbox' => env('PAYMENT_ZARINPAL_SANDBOX', true),
            'description' => env('PAYMENT_ZARINPAL_DESCRIPTION', 'پرداخت اینترنتی'),
            'default_currency' => 'IRT',
            'title' => 'زرین‌پال',
            'migrations' => [
                'packages/rms/payment/database/migrations',
            ],
        ],
        // بانک‌های دیگر...
    ],
];
```

### پنل مدیریت درگاه‌ها و تراکنش‌ها

[](#پنل-مدیریت-درگاه‌ها-و-تراکنش‌ها)

- با افزودن جدول `payment_drivers` می‌توانید عنوان، توضیحات، لوگو و وضعیت فعال/غیرفعال هر درگاه را نگه دارید.
- مسیرهای ادمین به صورت پیش‌فرض روی `admin/payment/*` فعال هستند و می‌توانید با مقادیر `PAYMENT_ADMIN_ENABLED` و `PAYMENT_ADMIN_PREFIX` آنها را کنترل کنید.
- دو صفحه‌ی آماده در پنل ادمین اضافه شده است:
    1. **Drivers**: مدیریت اطلاعات و وضعیت هر درگاه (CRUD کامل + همگام‌سازی با کانفیگ).
    2. **Transactions**: گزارش تراکنش‌ها با فیلتر، اکسپورت و نمایش Payload کامل هر رکورد.
- برای هماهنگی سریع درگاه‌ها با فایل کانفیگ، دکمه‌ی «Sync from config» در لیست درگاه‌ها اضافه شده است.

نحوه استفاده
------------

[](#نحوه-استفاده)

```
use RMS\Payment\DTO\PaymentRequest;
use RMS\Payment\Facades\Payment;

$request = new PaymentRequest(
    orderId: 'ORDER-10023',
    amount: 250000,
    currency: 'IRT',
    callbackUrl: route('payments.callback'),
    customerName: 'Ali Customer',
    customerMobile: '09120000000',
    description: 'پرداخت سفارش 10023',
    metadata: ['email' => 'customer@example.com']
);

$init = Payment::start($request); // InitializationResult

if ($init->successful) {
    return redirect()->away($init->redirectUrl);
}
```

در مرحله‌ی بازگشت از بانک:

```
$result = Payment::verify($request->all());

if ($result->successful) {
    // ثبت سفارش قطعی
} else {
    // نمایش خطا و لغو تراکنش
}
```

توسعه‌ی درگاه جدید
------------------

[](#توسعه‌ی-درگاه-جدید)

1. یک کلاس جدید بسازید که `RMS\Payment\Contracts\Gateway` را پیاده‌سازی کند.
2. آن را در `config/payment.php` ثبت کنید: ```
    'gateways' => [
        'zarinpal' => [
            'driver' => App\Payment\Gateways\ZarinpalGateway::class,
            'merchant_id' => env('ZARINPAL_MERCHANT'),
            'sandbox' => false,
        'mode' => 'form',
        'cert_path' => storage_path('payment/certs/zarinpal'),
            'migrations' => [
                'database/migrations/payment/zarinpal',
            ],
        ],
    ],
    ```
3. (اختیاری) برای حالت دو مرحله‌ای می‌توانید متد `verify` را به گونه‌ای بنویسید که هم توکن اولیه و هم نتیجه‌ی callback را بررسی کند.
4. اگر بانک نیاز به ذخیره‌ی کد رهگیری یا فیلدهای اختصاصی دارد، داخل Migration پروژه‌ی مصرف‌کننده جدول `payment_transactions` (یا مشابه) ایجاد کنید و `reference_id`, `transaction_id`, `card_mask` و سایر متادیتا را ذخیره نمایید.
5. برای بانک‌هایی که RSA 2048 یا گواهی اختصاصی می‌خواهند، فایل‌های `.key` و `.cer` را داخل مسیری که در `certificates_path` مشخص شده قرار دهید و داخل Driver خودتان از همان مسیر بخوانید.

نصب Driverها
------------

[](#نصب-driverها)

اگر در کانفیگ هر Driver مسیری برای Migration تعریف کنید، با دستور زیر می‌توانید آنها را اجرا کنید:

```
php artisan payment:install-driver        # استفاده از درایور پیش‌فرض
php artisan payment:install-driver zarinpal
```

دستور بالا ابتدا مایگریشن‌های پایه‌ی پکیج را اجرا می‌کند، سپس اگر درایور مسیر اختصاصی داشته باشد آن را نیز migrate می‌کند و در نهایت رکورد مربوط به درگاه را در جدول `payment_drivers` به‌روز/ایجاد می‌کند. اگر درایوری Migration نداشته باشد، فقط مرحله‌ی همگام‌سازی انجام می‌شود.

وضعیت‌های ذخیره‌شده در جدول `payment_transactions`
--------------------------------------------------

[](#وضعیت‌های-ذخیره‌شده-در-جدول-payment_transactions)

- `initialized`: رکورد ایجاد شده ولی هنوز کاربر به درگاه هدایت نشده (مرحله ساخت توکن).
- `sent`: لینک یا فرم درگاه به کاربر داده شده است.
- `returned`: کاربر از درگاه برگشته و callback فراخوانی شده است.
- `success`: تراکنش با موفقیت وریفای شده و ref\_id دریافت شده است.
- `failed`: به دلیل خطای بانکی یا لغو کاربر پرداخت ناموفق بوده است.

درایور زرین‌پال این وضعیت‌ها را به صورت خودکار به‌روزرسانی می‌کند و Message خطا را بر اساس کدهای رسمی زرین‌پال نگه می‌دارد. در صورت نوشتن درایور جدید کافی است از متدهای `PaymentTransaction` (`markSent`, `markReturned`, `markSuccess`, `markFailed`) استفاده کنید تا همهٔ بانک‌ها گزارش یکپارچه داشته باشند.

نقشه‌ی راه
----------

[](#نقشه‌ی-راه)

- افزودن Trait برای درگاه‌های RESTful (ارسال درخواست HTTP، مدیریت امضا و …).
- پشتیبانی از کیف پول و تسویه‌ی درون‌سیستمی.
- Eventهای `PaymentInitialized`, `PaymentVerified`.
- تست‌های خودکار برای هر Driver.
- ابزار Scaffold برای ایجاد Driver جدید به‌همراه Migration و تنظیمات.

با این ساختار، اتصال هر بانک جدید صرفاً پیاده‌سازی یک کلاس است و پروژه‌ی اصلی فقط با `PaymentClient` تعامل خواهد داشت.

یکپارچه‌سازی در پنل ادمین
-------------------------

[](#یکپارچه‌سازی-در-پنل-ادمین)

- پس از نصب و migrate، دو کنترلر ادمین آماده در اختیار دارید:
    - `RMS\Payment\Http\Controllers\Admin\PaymentDriversController` با روت پایه `admin/payment/drivers`
    - `RMS\Payment\Http\Controllers\Admin\PaymentTransactionsController` با روت پایه `admin/payment/transactions`
- اگر از قالب پیش‌فرض RMS استفاده می‌کنید کافی است در سایدبار پروژه (مثلاً `resources/views/vendor/cms/admin/layout/sidebar.blade.php`) لینک‌های زیر را اضافه کنید:

```

```

- با این کار ادمین می‌تواند وضعیت درگاه‌ها را فعال/غیرفعال کند و گزارش تراکنش‌ها را ببیند؛ کارت‌های آماری نیز بر اساس همان فیلترهای جدول به‌روزرسانی می‌شوند.

### ????? ???? ???? ??? ????? (shop-test)

[](#-----shop-test)

???? ?????? ????? ?????? ????? ???? ??? ?? ????? ???? ???????? ?? ??????? shop-test ??????? ??? ?? ???? ????:

`

1) ????? ???? ?????? ???? API ? ????? Blade
===========================================

[](#1-----api---blade)

cd C:\\laragon\\www\\rms2-packages\\shop-test php artisan serve --port=8000

2) ????? ??????? ???? ??????? public ? ????? /shop/\*
=====================================================

[](#2-----public---shop)

php -S 127.0.0.1:8001 -t public

3) (???????) Vite dev server ???? ?????????? ?????
==================================================

[](#3--vite-dev-server---)

npm run dev -- --host 127.0.0.1 --port 5173 `

- ????  ??? ????? ?????? ?? ????? ??????.
- ????  ???? ??????? ?? ???? ?????? ??? ??????????? ??????? ?? ?? ????? ???? ???????? ??? ??????? ??? ???? ????? ????? ????? (??? /shop/products/{slug}) ????? ???????? API ?? ???? ??? ?????? ? timeout ?? ??????.
- ???? ??? ???????? ? Callback ???? ???????? ????????? ?? ?? ????? ???? ???? ??????? ???? ?????.

###  Health Score

33

—

LowBetter than 75% of packages

Maintenance70

Regular maintenance activity

Popularity0

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity49

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 ~3 days

Total

3

Last Release

176d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/d2f66ffa1fad090692a590599112faa3451ceaac3a99e46de5a3f4a7a1f1872b?d=identicon)[spyp](/maintainers/spyp)

---

Top Contributors

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

### Embed Badge

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

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

###  Alternatives

[laraveldaily/laravel-invoices

Missing invoices for Laravel

1.5k1.3M4](/packages/laraveldaily-laravel-invoices)[musahmusah/laravel-multipayment-gateways

A Laravel Package that makes implementation of multiple payment Gateways endpoints and webhooks seamless

852.2k1](/packages/musahmusah-laravel-multipayment-gateways)[karson/mpesa-php-sdk

172.2k](/packages/karson-mpesa-php-sdk)

PHPackages © 2026

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