PHPackages                             isapp/laravel-cashier-revolut - 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. isapp/laravel-cashier-revolut

ActiveLibrary[Payment Processing](/categories/payments)

isapp/laravel-cashier-revolut
=============================

Revolut payment gateway driver for Laravel Cashier — charges, subscriptions, checkout and webhooks via the Revolut Merchant API

v1.3.0(3w ago)023MITPHPPHP ^8.2CI passing

Since Jul 20Pushed 1mo agoCompare

[ Source](https://github.com/isap-ou/laravel-cashier-revolut)[ Packagist](https://packagist.org/packages/isapp/laravel-cashier-revolut)[ Docs](https://github.com/isap-ou/laravel-cashier-revolut)[ RSS](/packages/isapp-laravel-cashier-revolut/feed)WikiDiscussions main Synced 2w ago

READMEChangelog (1)Dependencies (35)Versions (6)Used By (0)

isapp/laravel-cashier-revolut
=============================

[](#isapplaravel-cashier-revolut)

Revolut Merchant API driver for [`isapp/laravel-cashier-support`](https://github.com/isap-ou/laravel-cashier-support). Add the support package's `Billable` trait to your model and use the standard Cashier API — everything routes through Revolut.

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

[](#requirements)

PHP `^8.2`, Laravel **11, 12 or 13**, and `isapp/laravel-cashier-support`.

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

[](#installation)

```
composer require isapp/laravel-cashier-revolut
php artisan vendor:publish --tag=cashier-revolut-config
php artisan vendor:publish --tag=cashier-revolut-migrations
php artisan migrate
```

Set the driver as the default and configure your keys:

```
// config/cashier-support.php
'default' => env('CASHIER_DRIVER', 'revolut'),
```

```
REVOLUT_SECRET_KEY=sk_...
REVOLUT_SANDBOX=true
REVOLUT_WEBHOOK_SECRET=wsk_...
```

Usage
-----

[](#usage)

```
use Isapp\CashierSupport\Billable;

class User extends Illuminate\Database\Eloquent\Model
{
    use Billable;
}
```

```
$user->createAsCustomer();
$user->charge(1500, $savedPaymentMethodId, ['currency' => 'eur']);
$user->refund($orderId, ['amount' => 500]);

$user->newSubscription('default', $planVariationId)->trialDays(14)->create($savedPaymentMethodId);
$user->cancelSubscription('default');

$session = $user->checkout('plan', ['amount' => 1500, 'currency' => 'eur']);
return $session; // Responsable — redirects to the hosted checkout
```

Money is always **integer minor units** (cents).

What Revolut supports
---------------------

[](#what-revolut-supports)

CapabilitySupportedCharges, Refunds, Customers✅Subscriptions (create, cancel, trials)✅ (native Subscriptions API)Payment methods (list, delete)✅Checkout (widget)✅Webhooks✅Subscription pause / resume / swap❌ `UnsupportedOperationException`Add payment method server-side❌ (only via the checkout widget)Unsupported operations throw `UnsupportedOperationException` rather than being faked — check `Cashier::supports(Capability::…)` before calling.

Checkout Widget
---------------

[](#checkout-widget)

`checkout()` creates a Revolut order and returns a `RevolutCheckoutSession`carrying the order `token` for the [Revolut Checkout Widget](https://developer.revolut.com/docs/sdks/merchant-web-sdk/initialize-widget/revolut-checkout)and the hosted `url`. The session is `Responsable`, so you can `return` it from a controller to redirect to the hosted page.

Webhooks
--------

[](#webhooks)

Register a webhook with Revolut (prints the signing secret to store in `REVOLUT_WEBHOOK_SECRET`):

```
php artisan cashier-revolut:webhook https://your-app.test/webhook/revolut
```

Incoming webhooks are verified (HMAC-SHA256 over `v1.{timestamp}.{body}`) and dispatched as the support package's `WebhookReceived` / `WebhookHandled` events carrying a normalized `WebhookPayload`. Listen to those to react to gateway activity.

Architecture
------------

[](#architecture)

- `RevolutGateway` implements the support `GatewayProvider` contract by composing operation concerns; it is registered as the `revolut` driver via `Cashier::extend()`.
- `Http/RevolutConnector` (injected `Http\Client\Factory`, no facades) produces the preconfigured `PendingRequest`: version header, idempotency key, transient-only retries with backoff, call logging, and failures raised as `RevolutApiException`. The same connector backs the app-facing `Http::revolut()` macro.
- `Http/Requests` and `Http/Responses` are `spatie/laravel-data` objects that map between snake\_case Revolut payloads and the support DTOs.

Extending
---------

[](#extending)

**Override the gateway.** `RevolutGateway` is not final and its concern methods can be overridden. Subclass it and re-register the driver — your application's service providers boot after this package's, so the registration wins:

```
// AppServiceProvider::boot()
Cashier::extend('revolut', fn ($app) => $app->make(MyRevolutGateway::class));
```

Or register the subclass side-by-side (`Cashier::extend('revolut-b2b', ...)`) and select it per model via `cashierDriver()`.

**Swap the building blocks.** `RevolutConnector` and `RevolutWebhookHandler` are container singletons — decorate or replace them without touching the gateway. The `Http::revolut()` macro resolves the connector from the container, so a re-binding changes both the gateway and the macro:

```
$this->app->extend(RevolutConnector::class, fn ($connector) => new TracedConnector($connector));
```

**Macros.** The `Cashier` facade is macroable (see the cashier-support README) for app-level helpers that don't warrant a subclass.

Quality
-------

[](#quality)

```
composer test      # phpunit (Http::fake)
composer analyse   # phpstan (larastan) level 8
composer format    # laravel pint
```

License
-------

[](#license)

MIT.

###  Health Score

42

—

FairBetter than 88% of packages

Maintenance93

Actively maintained with recent releases

Popularity10

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity50

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

Total

5

Last Release

24d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/9bfb1eae1e3e43813da6740e5eaa39307a95db7561c2d27e7e8aa24233cdcbeb?d=identicon)[andrii-trush](/maintainers/andrii-trush)

---

Top Contributors

[![andrii-trush](https://avatars.githubusercontent.com/u/14265776?v=4)](https://github.com/andrii-trush "andrii-trush (7 commits)")

---

Tags

laravelbillingpaymentssubscriptionscashierrevolutmerchant-api

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Code StyleLaravel Pint

Type Coverage Yes

### Embed Badge

![Health badge](/badges/isapp-laravel-cashier-revolut/health.svg)

```
[![Health](https://phpackages.com/badges/isapp-laravel-cashier-revolut/health.svg)](https://phpackages.com/packages/isapp-laravel-cashier-revolut)
```

###  Alternatives

[laravel/cashier

Laravel Cashier provides an expressive, fluent interface to Stripe's subscription billing services.

2.6k31.8M160](/packages/laravel-cashier)[psalm/plugin-laravel

Psalm plugin for Laravel

3345.4M354](/packages/psalm-plugin-laravel)[laravel/mcp

Rapidly build MCP servers for your Laravel applications.

79227.1M227](/packages/laravel-mcp)[api-platform/laravel

API Platform support for Laravel

58190.1k21](/packages/api-platform-laravel)[laravel/pulse

Laravel Pulse is a real-time application performance monitoring tool and dashboard for your Laravel application.

1.7k16.3M154](/packages/laravel-pulse)[aedart/athenaeum

Athenaeum is a mono repository; a collection of various PHP packages

265.2k](/packages/aedart-athenaeum)

PHPackages © 2026

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