PHPackages                             zevpay/zevpay-php - 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. zevpay/zevpay-php

ActiveLibrary[Payment Processing](/categories/payments)

zevpay/zevpay-php
=================

Official ZevPay PHP SDK for the Checkout REST API

v0.1.1(1mo ago)02↓100%1MITPHPPHP &gt;=8.1

Since Mar 11Pushed 1mo agoCompare

[ Source](https://github.com/zevpay/zevpay-php)[ Packagist](https://packagist.org/packages/zevpay/zevpay-php)[ Docs](https://docs.zevpaycheckout.com/sdks/php)[ RSS](/packages/zevpay-zevpay-php/feed)WikiDiscussions main Synced 1mo ago

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

ZevPay PHP SDK
==============

[](#zevpay-php-sdk)

Official PHP SDK for the [ZevPay Checkout](https://zevpaycheckout.com) REST API.

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

[](#requirements)

- PHP 8.1 or later
- [Guzzle](https://docs.guzzlephp.org/) 7.0+

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

[](#installation)

```
composer require zevpay/zevpay-php
```

Quick start
-----------

[](#quick-start)

```
use ZevPay\ZevPay;

$zevpay = new ZevPay('sk_test_your_secret_key');

// Initialize a checkout session
$session = $zevpay->checkout->initialize([
    'amount' => 500000, // ₦5,000 in kobo
    'email' => 'customer@example.com',
    'reference' => 'ORDER-123',
    'callback_url' => 'https://yoursite.com/callback',
]);

echo $session['checkout_url'];
```

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

[](#configuration)

```
$zevpay = new ZevPay('sk_live_xxx', [
    'base_url' => 'https://api.zevpaycheckout.com', // default
    'timeout' => 30,     // request timeout in seconds (default)
    'max_retries' => 2,  // retries on 5xx errors (default)
]);
```

Checkout sessions
-----------------

[](#checkout-sessions)

```
// Initialize
$session = $zevpay->checkout->initialize([
    'amount' => 500000,
    'email' => 'customer@example.com',
    'currency' => 'NGN',
    'reference' => 'ORDER-123',
    'callback_url' => 'https://yoursite.com/callback',
    'metadata' => ['order_id' => '123'],
]);

// Verify
$result = $zevpay->checkout->verify($session['session_id']);
if ($result['status'] === 'completed') {
    echo 'Payment confirmed!';
}

// Get details
$details = $zevpay->checkout->get('ses_abc123');
```

Transfers
---------

[](#transfers)

```
// Bank transfer
$transfer = $zevpay->transfers->create([
    'type' => 'bank_transfer',
    'amount' => 1000000, // ₦10,000
    'account_number' => '0123456789',
    'bank_code' => '044',
    'account_name' => 'John Doe',
    'narration' => 'Payout',
    'reference' => 'TXN-123',
]);

// PayID transfer
$transfer = $zevpay->transfers->create([
    'type' => 'payid',
    'amount' => 500000,
    'pay_id' => 'johndoe',
    'narration' => 'Payment',
]);

// List transfers
$transfers = $zevpay->transfers->list(['page' => 1, 'status' => 'completed']);

// Verify
$result = $zevpay->transfers->verify('TXN-123');

// List banks
$banks = $zevpay->transfers->listBanks();

// Resolve account
$account = $zevpay->transfers->resolveAccount([
    'account_number' => '0123456789',
    'bank_code' => '044',
]);

// Calculate charges
$charges = $zevpay->transfers->calculateCharges(['amount' => 1000000]);

// Get balance
$balance = $zevpay->transfers->getBalance();
```

Invoices
--------

[](#invoices)

```
// Create
$invoice = $zevpay->invoices->create([
    'customer_name' => 'Jane Doe',
    'customer_email' => 'jane@example.com',
    'due_date' => '2026-04-01',
    'line_items' => [
        ['description' => 'Web Design', 'quantity' => 1, 'unit_price' => 5000000],
        ['description' => 'Hosting (1yr)', 'quantity' => 1, 'unit_price' => 1200000],
    ],
    'tax_rate' => 7.5,
    'note' => 'Thank you for your business',
]);

// Send, list, cancel
$zevpay->invoices->send($invoice['public_id']);
$invoices = $zevpay->invoices->list(['status' => 'sent']);
$zevpay->invoices->cancel($invoice['public_id']);
```

Static PayIDs
-------------

[](#static-payids)

```
$payid = $zevpay->staticPayId->create([
    'pay_id' => 'mystore',
    'name' => 'My Store',
    'description' => 'Accept payments to my store',
]);

$zevpay->staticPayId->deactivate($payid['id']);
$zevpay->staticPayId->reactivate($payid['id']);
```

Dynamic PayIDs
--------------

[](#dynamic-payids)

```
$dpayid = $zevpay->dynamicPayId->create([
    'amount' => 1000000,
    'name' => 'Donation Drive',
    'expires_in_minutes' => 60,
]);

$zevpay->dynamicPayId->deactivate($dpayid['id']);
```

Virtual accounts
----------------

[](#virtual-accounts)

```
$va = $zevpay->virtualAccounts->create([
    'amount' => 1000000,
    'validity_minutes' => 60,
]);

echo $va['account_number']; // Customer pays to this
```

Wallet
------

[](#wallet)

```
$wallet = $zevpay->wallet->get();
$members = $zevpay->wallet->listMembers();
$zevpay->wallet->addMember(['pay_id' => 'johndoe']);
$zevpay->wallet->removeMember('johndoe');
```

Webhook verification
--------------------

[](#webhook-verification)

```
use ZevPay\Webhook;

$payload = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_ZEVPAY_SIGNATURE'] ?? '';
$secret = getenv('ZEVPAY_WEBHOOK_SECRET');

try {
    $event = Webhook::constructEvent($payload, $signature, $secret);

    switch ($event['event']) {
        case 'charge.success':
            // Handle successful payment
            break;
        case 'transfer.success':
            // Handle successful transfer
            break;
        case 'transfer.failed':
            // Handle failed transfer
            break;
        case 'invoice.paid':
            // Handle paid invoice
            break;
    }

    http_response_code(200);
    echo 'OK';
} catch (\ZevPay\Exceptions\ZevPayException $e) {
    http_response_code(400);
    echo 'Invalid signature';
}
```

Error handling
--------------

[](#error-handling)

```
use ZevPay\Exceptions\ValidationException;
use ZevPay\Exceptions\AuthenticationException;
use ZevPay\Exceptions\NotFoundException;
use ZevPay\Exceptions\ConflictException;
use ZevPay\Exceptions\RateLimitException;
use ZevPay\Exceptions\ApiException;

try {
    $zevpay->transfers->create([/* ... */]);
} catch (ValidationException $e) {
    // 400 — invalid parameters
    echo $e->errorCode;  // e.g. 'VALIDATION_ERROR'
    echo $e->getMessage();
    print_r($e->details); // field-level errors
} catch (AuthenticationException $e) {
    // 401 — invalid API key
} catch (NotFoundException $e) {
    // 404 — resource not found
} catch (ConflictException $e) {
    // 409 — duplicate transaction
} catch (RateLimitException $e) {
    // 429 — rate limit exceeded
    echo $e->retryAfter; // seconds to wait
} catch (ApiException $e) {
    // 500+ — server error
}
```

Amounts
-------

[](#amounts)

All amounts are in **kobo** (minor currency units):

NairaKobo₦1100₦1,000100,000₦10,0001,000,000Testing
-------

[](#testing)

```
composer test
```

License
-------

[](#license)

MIT

###  Health Score

34

—

LowBetter than 77% of packages

Maintenance89

Actively maintained with recent releases

Popularity3

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity33

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

Every ~2 days

Total

2

Last Release

58d ago

### Community

Maintainers

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

---

Top Contributors

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

---

Tags

paymentsNigeriacheckoutfintechzevpay

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/zevpay-zevpay-php/health.svg)

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

###  Alternatives

[unicodeveloper/laravel-paystack

A Laravel Package for Paystack

650975.6k11](/packages/unicodeveloper-laravel-paystack)[chargebee/chargebee-php

ChargeBee API client implementation for PHP

768.0M9](/packages/chargebee-chargebee-php)[sebdesign/laravel-viva-payments

A Laravel package for integrating the Viva Payments gateway

4845.9k](/packages/sebdesign-laravel-viva-payments)[mnastalski/przelewy24-php

Przelewy24 PHP library

52101.2k2](/packages/mnastalski-przelewy24-php)[enupal/stripe

Allows customers sign up for recurring and one-time payments with Stripe, perfect for orders, donations, subscriptions, and events. Create simple payment forms in seconds easily without coding. For Craft CMS 3.x

3416.5k1](/packages/enupal-stripe)

PHPackages © 2026

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