PHPackages                             the6fallenangel/variza-php-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. the6fallenangel/variza-php-sdk

ActiveLibrary[Payment Processing](/categories/payments)

the6fallenangel/variza-php-sdk
==============================

PHP SDK for the Variza payment gateway — create payment links and verify webhooks.

v0.1.0(yesterday)12↑2900%MITPHPPHP ^8.1CI passing

Since Aug 14Pushed yesterdayCompare

[ Source](https://github.com/the6fallenangel/variza-php-sdk)[ Packagist](https://packagist.org/packages/the6fallenangel/variza-php-sdk)[ RSS](/packages/the6fallenangel-variza-php-sdk/feed)WikiDiscussions main Synced today

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

[![Variza](docs/logo.webp)](docs/logo.webp)Variza PHP SDK
==============

[](#variza-php-sdk)

کیت توسعه PHP واریزا برای اتصال ساده و سریع فروشگاه‌ها و وب‌سایت‌ها به سرویس پرداخت واریزا.

[![PHP Version](https://camo.githubusercontent.com/f300b22ba00aa3a0ef67aaab5765489aef8759bc5cdb9af55c0526a00fd80962/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d382e312532422d3737374242343f7374796c653d666c61742d737175617265266c6f676f3d706870266c6f676f436f6c6f723d7768697465)](https://camo.githubusercontent.com/f300b22ba00aa3a0ef67aaab5765489aef8759bc5cdb9af55c0526a00fd80962/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d382e312532422d3737374242343f7374796c653d666c61742d737175617265266c6f676f3d706870266c6f676f436f6c6f723d7768697465)[![Tests](https://camo.githubusercontent.com/d327754e90e3745a7620104589d511d810ba063aa1b5b3dd618ca4711e0d2c0a/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f7468653666616c6c656e616e67656c2f766172697a612d7068702d73646b2f63692e796d6c3f6c6162656c3d4349267374796c653d666c61742d737175617265266c6f676f3d676974687562)](https://camo.githubusercontent.com/d327754e90e3745a7620104589d511d810ba063aa1b5b3dd618ca4711e0d2c0a/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f7468653666616c6c656e616e67656c2f766172697a612d7068702d73646b2f63692e796d6c3f6c6162656c3d4349267374796c653d666c61742d737175617265266c6f676f3d676974687562)[![Packagist Version](https://camo.githubusercontent.com/dd1a9960480a7e59d0f1212dbb629ed97bf3f6d6d3d5fafef6234665d28a278f/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f7468653666616c6c656e616e67656c2f766172697a612d7068702d73646b3f7374796c653d666c61742d737175617265266c6f676f3d7061636b6167697374)](https://camo.githubusercontent.com/dd1a9960480a7e59d0f1212dbb629ed97bf3f6d6d3d5fafef6234665d28a278f/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f7468653666616c6c656e616e67656c2f766172697a612d7068702d73646b3f7374796c653d666c61742d737175617265266c6f676f3d7061636b6167697374)[![Packagist Downloads](https://camo.githubusercontent.com/ddf6880428abf9101e5c6da1a63e51de8cc3a291960fdd13db1f8e671793b5d8/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f7468653666616c6c656e616e67656c2f766172697a612d7068702d73646b3f7374796c653d666c61742d737175617265266c6f676f3d7061636b6167697374)](https://camo.githubusercontent.com/ddf6880428abf9101e5c6da1a63e51de8cc3a291960fdd13db1f8e671793b5d8/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f7468653666616c6c656e616e67656c2f766172697a612d7068702d73646b3f7374796c653d666c61742d737175617265266c6f676f3d7061636b6167697374)[![License](https://camo.githubusercontent.com/7c562013827eb6296ca75a629d125148a46e05146b300e0e47e91e97818cbbca/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f7468653666616c6c656e616e67656c2f766172697a612d7068702d73646b3f7374796c653d666c61742d7371756172652664756d6d793d3230323630383134)](https://camo.githubusercontent.com/7c562013827eb6296ca75a629d125148a46e05146b300e0e47e91e97818cbbca/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f7468653666616c6c656e616e67656c2f766172697a612d7068702d73646b3f7374796c653d666c61742d7371756172652664756d6d793d3230323630383134)

این SDK امکانات موردنیاز برای ایجاد لینک پرداخت و دریافت و اعتبارسنجی اعلان‌های پرداخت (Webhook) را در اختیار شما قرار می‌دهد تا بتوانید پرداخت‌های کارت‌به‌کارت را به‌صورت خودکار در سیستم خود مدیریت کنید.

---

✨ ویژگی‌ها
----------

[](#-ویژگی‌ها)

- 🚀 **بدون وابستگی** — به کتابخانه‌های شخص ثالث وابسته نیست؛ در صورت در دسترس بودن cURL از آن استفاده می‌کند و در غیر این صورت به PHP Streams متکی می‌شود.
- 🔒 **اعتبارسنجی امن Webhook** — با استفاده از HMAC-SHA256 و مقایسه امن امضا (`hash_equals`).
- 🧩 **پشتیبانی از PHP 8.1** و نسخه‌های بالاتر.

---

📦 نصب
-----

[](#-نصب)

برای نصب SDK کافیست دستور زیر را اجرا کنید.

```
composer require the6fallenangel/variza-php-sdk
```

---

### ساخت لینک پرداخت

[](#ساخت-لینک-پرداخت)

ابتدا یک نمونه از `VarizaClient` با توکن API خود ایجاد کنید. سپس با ارسال اطلاعات سفارش، لینک پرداخت را دریافت کرده و کاربر را به آن هدایت کنید.

```
use The6FallenAngel\Variza\Expiry;
use The6FallenAngel\Variza\PayRequest;
use The6FallenAngel\Variza\VarizaClient;

$client = new VarizaClient(token: 'your-token');

$link = $client->pay(new PayRequest(
    amount: 50000,                    // amount in Toman (min 1000)
    returnUrl: 'https://shop.example/return',
    title: 'Order #123',              // optional
    cardLast4: '1234',                // optional — pick a specific card
    expiresIn: Expiry::OneHour,       // optional — link validity period
));

// redirect the user here
header('Location: '.$link->payUrl);
```

در مبلغ، واحد پول **تومان** است. در صورت نیاز می‌توانید برای لینک پرداخت عنوان سفارش، چهار رقم آخر کارت مقصد و مدت اعتبار لینک را نیز مشخص کنید. پس از ایجاد لینک، کافی است کاربر را به `payUrl` هدایت کنید.

### مدت اعتبار لینک پرداخت

[](#مدت-اعتبار-لینک-پرداخت)

برای تعیین مدت اعتبار لینک می‌توانید از مقدارهای آماده کلاس `Expiry` استفاده کنید:

ثابتمقدارتوضیح`Expiry::ThirtyMinutes``30m`۳۰ دقیقه`Expiry::OneHour``1h`۱ ساعت`Expiry::TwoHours``2h`۲ ساعت`Expiry::SixHours``6h`۶ ساعت`Expiry::OneDay``1d`۱ روز`Expiry::ThreeDays``3d`۳ روز`Expiry::OneWeek``1w`۱ هفته`Expiry::Never``never`بدون انقضا---

🔔 وب‌هوک
--------

[](#-وب‌هوک)

پس از تأیید موفق پرداخت، واریزا نتیجه پرداخت را از طریق یک درخواست `POST` به آدرس Webhook شما ارسال می‌کند.

بدنه درخواست به‌صورت JSON خام ارسال می‌شود و برای اطمینان از صحت درخواست، هدر `X-Webhook-Signature` نیز همراه آن قرار می‌گیرد. SDK امکان اعتبارسنجی این امضا را با استفاده از Webhook Secret در اختیار شما قرار می‌دهد.

```
use The6FallenAngel\Variza\VarizaPaymentEvent;
use The6FallenAngel\Variza\VarizaWebhookVerifier;

$body = file_get_contents('php://input');                 // raw body — exactly as sent
$signature = $_SERVER['HTTP_X_WEBHOOK_SIGNATURE'] ?? '';

if (! VarizaWebhookVerifier::verify($body, $signature, 'your-webhook-secret')) {
    http_response_code(400);
    exit;
}

$event = VarizaPaymentEvent::fromJson($body);

if ($event->isPaymentPaid()) {
    // mark the order paid using $event->attemptCode (idempotent)
}

http_response_code(200);
```

> 💡 روش جایگزین: به‌جای `verify()` می‌توانید از `VarizaWebhookVerifier::assertValid()` استفاده کنید که در صورت نامعتبر بودن امضا، استثنای `InvalidSignatureException` پرتاب می‌کند.

### ⚠️ نکته مهم درباره Webhook

[](#️-نکته-مهم-درباره-webhook)

پردازش Webhook باید به‌صورت **idempotent** انجام شود؛ یعنی اگر یک رویداد بیش از یک بار دریافت شد، نباید باعث ثبت دوباره پرداخت یا تغییر اشتباه وضعیت سفارش شود.

واریزا در صورت دریافت پاسخ نامعتبر از سمت شما یا عدم دریافت پاسخ موفق، رویداد را دوباره ارسال می‌کند. تلاش‌های مجدد با فاصله‌های ۳۰، ۶۰، ۱۸۰ و ۶۰۰ ثانیه انجام می‌شوند و یک رویداد حداکثر ۵ بار ارسال خواهد شد.

به همین دلیل توصیه می‌شود پس از دریافت و اعتبارسنجی Webhook، در سریع‌ترین زمان ممکن پاسخ **HTTP 200** را برگردانید و پردازش‌های سنگین را به صف یا Job منتقل کنید.

---

🚨 مدیریت خطاها
--------------

[](#-مدیریت-خطاها)

وضعیت HTTPاستثناتوضیح`422``ValidationException`خطای اعتبارسنجی درخواست`429``RateLimitException`محدودیت نرخ درخواستسایر`ApiException`سایر خطاهای API```
use The6FallenAngel\Variza\Exception\RateLimitException;
use The6FallenAngel\Variza\Exception\ValidationException;

try {
    $client->pay($request);
} catch (ValidationException $e) {
    // invalid input fields
} catch (RateLimitException $e) {
    // rate limited — wait a bit
}
```

تمام این Exceptionها از `VarizaException` و در نهایت از `RuntimeException` ارث می‌برند و اطلاعاتی مانند کد وضعیت HTTP، خطاهای API و بدنه پاسخ را در اختیار شما قرار می‌دهند.

---

🧪 توسعه و اجرای تست‌ها
----------------------

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

برای دریافت وابستگی‌های پروژه:

```
composer install
```

برای اجرای تست‌ها:

```
vendor/bin/phpunit
```

تست‌های پروژه به‌صورت خودکار در CI روی نسخه‌های مختلف PHP (8.1 تا 8.4) اجرا می‌شوند.

---

📄 مجوز
------

[](#-مجوز)

این پروژه تحت مجوز **MIT** منتشر شده است.

مستندات کامل API و راهنمای اتصال به واریزا را می‌توانید در صفحه مستندات فنی واریزا مشاهده کنید. برای آشنایی بیشتر با واریزا و قابلیت‌های آن به [variza.ir](https://variza.ir) مراجعه کنید.

---

🇬🇧 English
----------

[](#-english)

**Variza PHP SDK** is the PHP kit for connecting your stores and websites to the Variza payment service — create payment links and receive/verify payment webhooks to automate card-to-card payments in your system.

### ✨ Features

[](#-features)

- 🚀 **Zero dependencies** — no third-party libraries; uses cURL when available, falls back to PHP Streams otherwise.
- 🔒 **Secure webhook verification** — HMAC-SHA256 with timing-safe comparison (`hash_equals`).
- 🧩 **Supports PHP 8.1** and above.

### 📦 Installation

[](#-installation)

```
composer require the6fallenangel/variza-php-sdk
```

### Create a payment link

[](#create-a-payment-link)

Create a `VarizaClient` with your API token, send the order details, and redirect the customer to the returned link.

```
use The6FallenAngel\Variza\Expiry;
use The6FallenAngel\Variza\PayRequest;
use The6FallenAngel\Variza\VarizaClient;

$client = new VarizaClient(token: 'your-token');

$link = $client->pay(new PayRequest(
    amount: 50000,                    // amount in Toman (min 1000)
    returnUrl: 'https://shop.example/return',
    title: 'Order #123',              // optional
    cardLast4: '1234',                // optional — pick a specific card
    expiresIn: Expiry::OneHour,       // optional — link validity period
));

// redirect the user here
header('Location: '.$link->payUrl);
```

The amount is in **Toman**. You can optionally set an order title, the last four digits of the destination card, and the link validity period. Once created, redirect the customer to `payUrl`.

### Payment link expiry

[](#payment-link-expiry)

ConstantValueDescription`Expiry::ThirtyMinutes``30m`30 minutes`Expiry::OneHour``1h`1 hour`Expiry::TwoHours``2h`2 hours`Expiry::SixHours``6h`6 hours`Expiry::OneDay``1d`1 day`Expiry::ThreeDays``3d`3 days`Expiry::OneWeek``1w`1 week`Expiry::Never``never`Never expires### Webhook

[](#webhook)

After a successful payment, Variza sends the result to your webhook URL via a `POST` request. The body is sent as raw JSON, along with an `X-Webhook-Signature` header. The SDK verifies the signature using your Webhook Secret.

```
use The6FallenAngel\Variza\VarizaPaymentEvent;
use The6FallenAngel\Variza\VarizaWebhookVerifier;

$body = file_get_contents('php://input');                 // raw body — exactly as sent
$signature = $_SERVER['HTTP_X_WEBHOOK_SIGNATURE'] ?? '';

if (! VarizaWebhookVerifier::verify($body, $signature, 'your-webhook-secret')) {
    http_response_code(400);
    exit;
}

$event = VarizaPaymentEvent::fromJson($body);

if ($event->isPaymentPaid()) {
    // mark the order paid using $event->attemptCode (idempotent)
}

http_response_code(200);
```

> 💡 Alternative: use `VarizaWebhookVerifier::assertValid()` instead of `verify()` to throw an `InvalidSignatureException` on an invalid signature.

#### ⚠️ Important webhook notes

[](#️-important-webhook-notes)

Webhook handling must be **idempotent** — receiving the same event more than once must not double-register a payment or wrongly change the order status.

If Variza receives an invalid response or no successful response, it re-delivers the event with retries at 30, 60, 180, and 600 seconds, up to 5 times. Return **HTTP 200** as soon as possible after receiving and verifying a webhook, and move heavy processing to a queue or job.

### Error handling

[](#error-handling)

HTTP StatusExceptionDescription`422``ValidationException`Request validation error`429``RateLimitException`Request rate limit reachedother`ApiException`Other API errors```
use The6FallenAngel\Variza\Exception\RateLimitException;
use The6FallenAngel\Variza\Exception\ValidationException;

try {
    $client->pay($request);
} catch (ValidationException $e) {
    // invalid input fields
} catch (RateLimitException $e) {
    // rate limited — wait a bit
}
```

All exceptions extend `VarizaException`, which in turn extends `RuntimeException`, and carry the HTTP status code, API errors, and the response body.

### Development &amp; tests

[](#development--tests)

```
composer install
vendor/bin/phpunit
```

Tests run automatically in CI across PHP 8.1 – 8.4.

### License

[](#license)

Released under the **MIT** license. See the Variza developer docs for full API documentation, and visit [variza.ir](https://variza.ir) to learn more.

###  Health Score

37

—

LowBetter than 81% of packages

Maintenance100

Actively maintained with recent releases

Popularity5

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity32

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

1d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/75077212?v=4)[Alireza Mohammadi](/maintainers/the6fallenangel)[@the6fallenangel](https://github.com/the6fallenangel)

---

Top Contributors

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

---

Tags

card-to-cardcomposere-commercepackagistpaymentpayment-linkpayment-sdkphpphp-sdksdkwebhooksdkpaymentwebhookpayment linkvarizacard-to-card

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/the6fallenangel-variza-php-sdk/health.svg)

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

###  Alternatives

[yandex-money/yandex-money-sdk-php

Yandex.Money API SDK for PHP

106169.0k2](/packages/yandex-money-yandex-money-sdk-php)[cryptonator/merchant-php-sdk

Cryptonator.com Merchant API SDK for PHP

2714.6k](/packages/cryptonator-merchant-php-sdk)

PHPackages © 2026

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