PHPackages                             scwar/laravel-monnify-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. [Payment Processing](/categories/payments)
4. /
5. scwar/laravel-monnify-sdk

ActiveLibrary[Payment Processing](/categories/payments)

scwar/laravel-monnify-sdk
=========================

A comprehensive Laravel package for Monnify payment gateway integration

1.1.0(3mo ago)06MITPHPPHP ^8.1CI passing

Since Jan 7Pushed 3mo agoCompare

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

READMEChangelogDependencies (5)Versions (5)Used By (0)

Laravel Monnify SDK
===================

[](#laravel-monnify-sdk)

[![Latest Version](https://camo.githubusercontent.com/3540b4620b5adf3c081f6a58d33916e14a7148761f60a7c5e45571f17bb8af58/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f73637761722f6c61726176656c2d6d6f6e6e6966792d73646b2e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/scwar/laravel-monnify-sdk)[![Total Downloads](https://camo.githubusercontent.com/056e7e5c93c3052497a89b9da3c1593b6f9ba16d97faf04e21b3df0824284291/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f73637761722f6c61726176656c2d6d6f6e6e6966792d73646b2e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/scwar/laravel-monnify-sdk)[![License](https://camo.githubusercontent.com/f719b470122f5117b30c40d15a43cace4742445efe843a309ce901d83da5d311/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f73637761722f6c61726176656c2d6d6f6e6e6966792d73646b2e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/scwar/laravel-monnify-sdk)

A comprehensive Laravel package for integrating with the Monnify payment gateway. This package provides a clean, fluent interface for handling transactions, invoices, subaccounts, and webhooks.

Features
--------

[](#features)

- ✅ Complete Monnify API coverage (Transactions, Invoices, Subaccounts)
- ✅ Automatic token management with caching
- ✅ Webhook handling with signature verification
- ✅ Laravel Events for transaction status changes
- ✅ Database migrations for storing transactions/invoices locally
- ✅ Type-safe DTOs for all API responses
- ✅ Facade support for clean, expressive API
- ✅ Comprehensive exception handling
- ✅ Full test coverage structure

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

[](#requirements)

- PHP &gt;= 8.1 (PHP 8.2+ required for Laravel 12)
- Laravel &gt;= 10.0, &gt;= 11.0, or &gt;= 12.0
- Guzzle HTTP Client

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

[](#installation)

Install the package via Composer:

```
composer require scwar/laravel-monnify-sdk
```

### Publish Configuration

[](#publish-configuration)

Publish the configuration file:

```
php artisan vendor:publish --tag=monnify-config
```

This will create a `config/monnify.php` file in your application.

### Publish Migrations

[](#publish-migrations)

Publish the database migrations:

```
php artisan vendor:publish --tag=monnify-migrations
```

Run the migrations:

```
php artisan migrate
```

### Environment Variables

[](#environment-variables)

Add the following environment variables to your `.env` file:

```
MONNIFY_API_KEY=your_api_key
MONNIFY_SECRET_KEY=your_secret_key
MONNIFY_CONTRACT_CODE=your_contract_code
MONNIFY_WEBHOOK_SECRET=your_webhook_secret
MONNIFY_BASE_URL=https://api.monnify.com
MONNIFY_REDIRECT_URL=https://your-app.com/payment/callback
```

For sandbox/testing, use:

```
MONNIFY_BASE_URL=https://sandbox.monnify.com
```

Configuration
-------------

[](#configuration)

The configuration file is located at `config/monnify.php`. You can customize:

- API credentials
- Base URL (sandbox/production)
- Webhook secret key
- Cache configuration
- Database table names
- Route prefix and middleware
- Default transaction/invoice settings

Usage
-----

[](#usage)

### Using the Facade

[](#using-the-facade)

The package provides a facade for easy access:

```
use Scwar\Monnify\Facades\Monnify;
```

### Transactions

[](#transactions)

#### Initialize a Transaction

[](#initialize-a-transaction)

```
use Scwar\Monnify\Facades\Monnify;

$transaction = Monnify::transaction()->initialize([
    'amount' => 1000.00,
    'customerName' => 'John Doe',
    'customerEmail' => 'john@example.com',
    'paymentReference' => 'unique-payment-reference',
    'paymentDescription' => 'Payment for order #123',
    'currencyCode' => 'NGN',
    'redirectUrl' => 'https://your-app.com/payment/callback',
    'metadata' => [
        'order_id' => 123,
        'user_id' => 456,
    ],
]);

// Get the checkout URL
$checkoutUrl = $transaction->checkoutUrl;

// Redirect user to checkout
return redirect($checkoutUrl);
```

#### Get Transaction Status

[](#get-transaction-status)

```
$transaction = Monnify::transaction()->getStatus('transaction-reference');

if ($transaction->status === 'PAID') {
    // Transaction is successful
}
```

#### Verify Transaction

[](#verify-transaction)

```
$transaction = Monnify::transaction()->verify('transaction-reference');
```

#### Refund Transaction

[](#refund-transaction)

```
$refund = Monnify::transaction()->refund(
    transactionReference: 'transaction-reference',
    amount: 1000.00,
    refundReason: 'Customer requested refund',
    customerNote: 'Refund processed'
);
```

#### Query Transaction History

[](#query-transaction-history)

```
$transactions = Monnify::transaction()->queryHistory([
    'page' => 0,
    'size' => 20,
    'fromDate' => '2024-01-01',
    'toDate' => '2024-01-31',
]);
```

### Invoices

[](#invoices)

#### Create an Invoice

[](#create-an-invoice)

```
$invoice = Monnify::invoice()->create([
    'amount' => 5000.00,
    'invoiceReference' => 'unique-invoice-reference',
    'description' => 'Invoice for services',
    'currencyCode' => 'NGN',
    'contractCode' => config('monnify.contract_code'),
    'customerEmail' => 'customer@example.com',
    'customerName' => 'Jane Doe',
    'expiryDate' => now()->addDays(7)->toIso8601String(),
    'lineItems' => [
        [
            'lineItemId' => 'item-1',
            'name' => 'Service Fee',
            'quantity' => 1,
            'unitPrice' => 5000.00,
        ],
    ],
]);

// Get the checkout URL
$checkoutUrl = $invoice->checkoutUrl;
```

#### Get Invoice Details

[](#get-invoice-details)

```
$invoice = Monnify::invoice()->getDetails('invoice-reference');
```

#### Cancel Invoice

[](#cancel-invoice)

```
Monnify::invoice()->cancel('invoice-reference');
```

#### List Invoices

[](#list-invoices)

```
$invoices = Monnify::invoice()->list([
    'page' => 0,
    'size' => 20,
]);
```

### Subaccounts

[](#subaccounts)

#### Create Subaccount

[](#create-subaccount)

```
$subaccount = Monnify::subaccount()->create([
    'subAccountCode' => 'SUB_001',
    'subAccountName' => 'Main Subaccount',
    'email' => 'subaccount@example.com',
    'splitPercentage' => 10.0,
]);

// Get the subaccount code
$subaccountCode = $subaccount['subAccountCode'];
```

#### Update Subaccount

[](#update-subaccount)

```
Monnify::subaccount()->update('SUB_001', [
    'subAccountName' => 'Updated Name',
    'splitPercentage' => 15.0,
]);
```

#### Delete Subaccount

[](#delete-subaccount)

```
Monnify::subaccount()->delete('SUB_001');
```

#### Get Subaccount Details

[](#get-subaccount-details)

```
$subaccount = Monnify::subaccount()->getDetails('SUB_001');
```

#### List Subaccounts

[](#list-subaccounts)

```
$subaccounts = Monnify::subaccount()->list([
    'page' => 0,
    'size' => 20,
]);
```

Webhooks
--------

[](#webhooks)

The package automatically sets up webhook routes. By default, the webhook endpoint is:

```
POST /api/monnify/webhook

```

You can customize this in the configuration file.

### Webhook Events

[](#webhook-events)

The package automatically handles the following webhook events:

- `SUCCESSFUL_TRANSACTION` - Fires `TransactionCompleted` event
- `FAILED_TRANSACTION` - Fires `TransactionFailed` event
- `OVERPAYMENT` - Fires `TransactionFailed` event
- `PARTIAL_OVERPAYMENT` - Fires `TransactionFailed` event
- `INVOICE_UPDATE` - Updates invoice record

### Listening to Events

[](#listening-to-events)

You can listen to the events in your `EventServiceProvider`:

```
use Scwar\Monnify\Events\TransactionCompleted;
use Scwar\Monnify\Events\TransactionFailed;
use Scwar\Monnify\Events\WebhookReceived;

protected $listen = [
    TransactionCompleted::class => [
        // Your listeners
    ],
    TransactionFailed::class => [
        // Your listeners
    ],
    WebhookReceived::class => [
        // Your listeners
    ],
];
```

Example listener:

```
use Scwar\Monnify\Events\TransactionCompleted;

class SendPaymentConfirmation
{
    public function handle(TransactionCompleted $event)
    {
        $transaction = $event->transaction;

        // Send confirmation email
        // Update order status
        // etc.
    }
}
```

### Webhook Signature Verification

[](#webhook-signature-verification)

The package automatically verifies webhook signatures using HMAC SHA512. Make sure to set `MONNIFY_WEBHOOK_SECRET` in your `.env` file.

Models
------

[](#models)

The package provides Eloquent models for transactions and invoices:

### MonnifyTransaction

[](#monnifytransaction)

```
use Scwar\Monnify\Models\MonnifyTransaction;

// Get all successful transactions
$transactions = MonnifyTransaction::successful()->get();

// Get transactions for a customer
$transactions = MonnifyTransaction::forCustomer('customer@example.com')->get();

// Check transaction status
$transaction = MonnifyTransaction::where('transaction_reference', 'ref-123')->first();

if ($transaction->isSuccessful()) {
    // Transaction is paid
}
```

### MonnifyInvoice

[](#monnifyinvoice)

```
use Scwar\Monnify\Models\MonnifyInvoice;

// Get all paid invoices
$invoices = MonnifyInvoice::paid()->get();

// Get invoices for a customer
$invoices = MonnifyInvoice::forCustomer('customer@example.com')->get();

// Check invoice status
$invoice = MonnifyInvoice::where('invoice_reference', 'inv-123')->first();

if ($invoice->isPaid()) {
    // Invoice is paid
}

if ($invoice->isExpired()) {
    // Invoice has expired
}
```

Exceptions
----------

[](#exceptions)

The package provides custom exceptions:

- `Scwar\Monnify\Exceptions\MonnifyException` - Base exception
- `Scwar\Monnify\Exceptions\AuthenticationException` - Authentication errors
- `Scwar\Monnify\Exceptions\RequestException` - API request errors

Example:

```
use Scwar\Monnify\Exceptions\AuthenticationException;
use Scwar\Monnify\Exceptions\RequestException;

try {
    $transaction = Monnify::transaction()->initialize([...]);
} catch (AuthenticationException $e) {
    // Handle authentication error
} catch (RequestException $e) {
    // Handle request error
    $response = $e->getResponse();
}
```

Testing
-------

[](#testing)

Run the tests:

```
composer test
```

Or using PHPUnit directly:

```
vendor/bin/phpunit
```

API Documentation
-----------------

[](#api-documentation)

For complete API documentation, visit the [Monnify Developer Documentation](https://developers.monnify.com/api).

Contributing
------------

[](#contributing)

Contributions are welcome! Please feel free to submit a Pull Request.

License
-------

[](#license)

This package is open-sourced software licensed under the [MIT license](LICENSE.md).

Support
-------

[](#support)

For issues and questions, please open an issue on [GitHub](https://github.com/scwar/laravel-monnify-sdk/issues).

Changelog
---------

[](#changelog)

Please see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently.

###  Health Score

36

—

LowBetter than 82% of packages

Maintenance78

Regular maintenance activity

Popularity6

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity46

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 80% 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

Total

2

Last Release

115d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/720d627b5dea688ff1163348e6e339ef43a32e2560a633661886e245df35f24a?d=identicon)[scwar](/maintainers/scwar)

---

Top Contributors

[![kellslte](https://avatars.githubusercontent.com/u/29720486?v=4)](https://github.com/kellslte "kellslte (8 commits)")[![github-actions[bot]](https://avatars.githubusercontent.com/in/15368?v=4)](https://github.com/github-actions[bot] "github-actions[bot] (2 commits)")

---

Tags

laravelsdkpaymentgatewayNigeriamonnify

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/scwar-laravel-monnify-sdk/health.svg)

```
[![Health](https://phpackages.com/badges/scwar-laravel-monnify-sdk/health.svg)](https://phpackages.com/packages/scwar-laravel-monnify-sdk)
```

###  Alternatives

[lokielse/omnipay-unionpay

UnionPay gateway for Omnipay payment processing library

11358.1k2](/packages/lokielse-omnipay-unionpay)[evryn/laravel-toman

A simple stable Laravel package to handle popular payment gateways in Iran including ZarinPal and IDPay.

1079.9k](/packages/evryn-laravel-toman)[sebdesign/laravel-viva-payments

A Laravel package for integrating the Viva Payments gateway

4845.9k](/packages/sebdesign-laravel-viva-payments)[henryejemuta/laravel-monnify

A laravel package to seamlessly integrate monnify api within your laravel application

132.1k](/packages/henryejemuta-laravel-monnify)[tsaiyihua/laravel-linepay

linepay library for laravel

102.9k](/packages/tsaiyihua-laravel-linepay)

PHPackages © 2026

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