PHPackages                             22digital/laravel-cashier-fastspring - 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. 22digital/laravel-cashier-fastspring

ActiveLibrary[Payment Processing](/categories/payments)

22digital/laravel-cashier-fastspring
====================================

Cashier Fastspring is a cashier-like laravel package which provides an interface to Fastspring subscription and payment services.

v0.4.1(6y ago)11699[2 issues](https://github.com/22digital/laravel-cashier-fastspring/issues)[2 PRs](https://github.com/22digital/laravel-cashier-fastspring/pulls)MITPHPPHP &gt;=7.1.3

Since Jul 20Pushed 1y agoCompare

[ Source](https://github.com/22digital/laravel-cashier-fastspring)[ Packagist](https://packagist.org/packages/22digital/laravel-cashier-fastspring)[ RSS](/packages/22digital-laravel-cashier-fastspring/feed)WikiDiscussions master Synced yesterday

READMEChangelogDependencies (11)Versions (12)Used By (0)

Laravel Cashier FastSpring [![Beta](https://camo.githubusercontent.com/425679ce85b8a401f57b354947172f238e1c38a1daf099d618fd150e4638e605/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7374617475732d626574612d677265656e2e737667)](https://camo.githubusercontent.com/425679ce85b8a401f57b354947172f238e1c38a1daf099d618fd150e4638e605/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7374617475732d626574612d677265656e2e737667)
========================================================================================================================================================================================================================================================================================================================================================================================================================================================

[](#laravel-cashier-fastspring-)

[![Packagist](https://camo.githubusercontent.com/1cc31d1de5e8a536fce2009d0a9d476f562673d975c1e681d39114001551fdab/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7061636b61676973742d32326469676974616c2f6c61726176656c2d2d636173686965722d2d66617374737072696e672d6632386431612e737667)](https://packagist.org/packages/22digital/laravel-cashier-fastspring)[![Build Status](https://camo.githubusercontent.com/193790a9260f34562e7af376658a42c9f080a8205e51ea4030f1b7591b464f63/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f32326469676974616c2f6c61726176656c2d636173686965722d66617374737072696e672f6261646765732f6275696c642e706e673f623d6d6173746572)](https://scrutinizer-ci.com/g/22digital/laravel-cashier-fastspring/build-status/master)[![Coverage Status](https://camo.githubusercontent.com/013a0614f128b775c062379229905236dc4ae12d28acd6925c098842df28d7b3/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f32326469676974616c2f6c61726176656c2d636173686965722d66617374737072696e672f6261646765732f636f7665726167652e706e673f623d6d6173746572)](https://scrutinizer-ci.com/g/22digital/laravel-cashier-fastspring/?branch=master)[![Style CI](https://camo.githubusercontent.com/8cc3c10f6fd24428001deda752ae9f0d334b0ec5c4719d9a56b54c69aa865daf/68747470733a2f2f6769746875622e7374796c6563692e696f2f7265706f732f3231393130323433312f736869656c643f6272616e63683d6d6173746572)](https://github.styleci.io/repos/219102431)[![Laravel 5](https://camo.githubusercontent.com/6dfd573c9b5c78acf4dfd759017ffa7101dc91f45c040e06bcc6c6dce41b2ec1/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c61726176656c2d352e782d2d362e782d677265656e2e737667)](https://laravel.com/)[![License](https://camo.githubusercontent.com/2b5df3e7836a1b93ab200769ca50ad539c7596ac4ad72b4cb1e1172b463b757d/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f32326469676974616c2f6c61726176656c2d636173686965722d66617374737072696e672e737667)](https://github.com/22digital/laravel-cashier-fastspring/blob/master/LICENSE)

[![Laravel Cashier Fastspring](/docs/images/hero-small.png)](/docs/images/hero-small.png)

Table of contents
-----------------

[](#table-of-contents)

- [Introduction](#introduction)
- [Installation](#installation)
- [Configuration](#configuration)
    - [Migrations](#migrations)
    - [Billable Model](#billable-model)
    - [API Keys](#api-keys)
    - [Creating Plans](#creating-plans)
- [Quick Start](#quick-start)
- [Usage](#usage)
    - [Subscriptions](#subscriptions)
        - [Creating Subscriptions](#creating-subscription)
        - [Checking Subscription Status](#checking-subscription-status)
        - [Changing Plans](#changing-plans)
        - [Subscription Periods](#subscription-period)
        - [Subscription Trials](#subscription-trials)
        - [Cancelling Subscriptions](#cancelling-subscriptions)
        - [Resuming Subscriptions](#resuming-subscriptions)
        - [Updating Credit Cards](#updating-credit-cards)
    - [Webhooks](#webhooks)
    - [Single Charges](#single-charges)
    - [Invoices](#invoices)
- [Contributing](#contributing)
- [Credits](#credits)
- [Licence](#licence)

Introduction
------------

[](#introduction)

Cashier Fastspring is a cashier-like laravel package which provides interface to [Fastspring](https://fastspring.com) subscription and payment services. This package handles webhooks and provides a simple API for Fastspring. Before using this package, looking at [Fastspring documentation](http://docs.fastspring.com/) is strongly recommended.

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

[](#installation)

Add `22digital/laravel-cashier-fastspring` package to your dependencies.

```
composer require "22digital/laravel-cashier-fastspring"
```

After requiring package, add service provider of this package to providers in `config/app.php`.

```
'providers' => array(
    // ...
    TwentyTwoDigital\CashierFastspring\CashierServiceProvider::class,
)
```

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

[](#configuration)

### Migrations

[](#migrations)

Cashier Fastspring package comes with database migrations. After requiring the package, you can publish it with following command.

```
php artisan vendor:publish
```

After publishing them, you can find migration files in your `database/migrations` folder. Remember that you can modify them according to your needs.

### Billable Model

[](#billable-model)

Next, add the Billable trait to your model definition. This trait provides various methods to allow you to perform common billing tasks, such as creating and checking subscriptions, getting orders etc.

```
use Laravel\Cashier\Billable;

class User extends Authenticatable
{
    use Billable;
}
```

### API Keys

[](#api-keys)

You should add Fastspring configuration to `config/services.php` file.

```
'fastspring' => [
    'model' => App\User::class,
    'username' => env('FASTSPRING_USERNAME'),
    'password' => env('FASTSPRING_PASSWORD'),
    'store_id' => env('FASTSPRING_STORE_ID'),

    // strongly recommend to set hmac secret in webhook configuration
    // to prevent webhook spoofing
    'hmac_secret' => env('FASTSPRING_HMAC_SECRET')
],
```

### Webhook Route

[](#webhook-route)

Fastspring can notify your application of a variety of events via webhooks. To handle webhooks, define a route and also set it in Fastspring settings.

```
Route::post(
    'fastspring/webhook',
    '\TwentyTwoDigital\CashierFastspring\Http\Controllers\WebhookController@handleWebhook'
)->name('fastspringWebhook');
```

#### Webhooks &amp; CSRF Protection

[](#webhooks--csrf-protection)

Fastspring webhook requests need to bypass CSRF protection. That's why be sure to list your webhook URI as an exception in your `VerifyCsrfToken` middleware.

```
protected $except = [
    'fastspring/*',
];
```

### Creating Plans

[](#creating-plans)

This package does not cover creating plans at Fastspring side or storing created plans. You should create your subscription plans at [Fastspring's Dashboard](https://dashboard.fastspring.com).

Quick Start
-----------

[](#quick-start)

Cashier Fastspring comes with built-in listeners which you can find in `src/Events` for quickstart. These listeners help you to sync subscriptions and invoices with your database.

Remember that you can create and use your listeners and database structure according to your needs. In order to customize, you can check [Usage](#usage).

In Cashier Fastspring, every webhook request fires related events. You can register listeners to webhook events in `app/providers/EventServiceProvider.php`. You can see more at [Webhooks](#webhooks).

```
protected $listen = [
    // some others
    'TwentyTwoDigital\CashierFastspring\Events\SubscriptionCanceled' => [
        'TwentyTwoDigital\CashierFastspring\Listeners\SubscriptionStateChanged'
    ],
    'TwentyTwoDigital\CashierFastspring\Events\SubscriptionDeactivated' => [
        'TwentyTwoDigital\CashierFastspring\Listeners\SubscriptionDeactivated'
    ],
    'TwentyTwoDigital\CashierFastspring\Events\SubscriptionPaymentOverdue' => [
        'TwentyTwoDigital\CashierFastspring\Listeners\SubscriptionStateChanged'
    ],
    'TwentyTwoDigital\CashierFastspring\Events\OrderCompleted' => [
        'TwentyTwoDigital\CashierFastspring\Listeners\OrderCompleted'
    ],
    'TwentyTwoDigital\CashierFastspring\Events\SubscriptionActivated' => [
        'TwentyTwoDigital\CashierFastspring\Listeners\SubscriptionActivated'
    ],
    'TwentyTwoDigital\CashierFastspring\Events\SubscriptionChargeCompleted' => [
        'TwentyTwoDigital\CashierFastspring\Listeners\SubscriptionChargeCompleted'
    ]
];
```

You should create a session for subscription payment page. You can do it with `newSubscription` method as below.

```
// we create session and return it to frontend to care
$builder = Auth::user()->newSubscription('default', $selectedPlan);
$session = $builder->create();
```

You can provide session id `$session->id` to Fastspring's [Popup Storefronts](http://docs.fastspring.com/storefronts/popup-storefronts-on-your-website) or [Web Storefronts](http://docs.fastspring.com/storefronts/web-storefronts).

Note: `newSubscription` method does not create a subscription model. After a successful payment, you can use [webhooks](#webhooks) or [browser script](http://docs.fastspring.com/integrating-with-fastspring/webhooks#Webhooks-BrowserScripts) to inform your app and create related models.

Usage
-----

[](#usage)

Cashier Fastspring comes with ready-to-use `Subscription`, `Subscription Period`, `Invoice` models and webhook handler. You can find detailed explanation below. Remember that you can easily replace these models and logic with yours.

### Subscriptions

[](#subscriptions)

Cashier Fastspring provides a `local` type of subscription which lets you to create subscriptions without interacting with Fastspring. This may help you to create plans without payment info required. If a subscription has no `fastspring_id`, it is typed as local. You can check type using `type()`, `isLocal()`, `isFastspring()` methods.

#### Creating Subscriptions

[](#creating-subscriptions)

To create a subscription, you can use `newSubscription` method of the `Billable` model. After creating session, you can provide session id `$session->id` to Fastspring's [Popup Storefronts](http://docs.fastspring.com/storefronts/popup-storefronts-on-your-website) or [Web Storefronts](http://docs.fastspring.com/storefronts/web-storefronts).

```
// we create session and return it to frontend to care
$builder = Auth::user()->newSubscription('default', $selectedPlan);
$session = $builder->create();
```

You can also provide coupon or quantity. As a hint, coupons also can be set on Fastspring's payment pages.

```
$builder = Auth::user()->newSubscription('default', $selectedPlan)
    ->withCoupon('free-ticket-to-Mars')
    ->quantity(1); // yeap no ticket for returning
$session = $builder->create();
```

If the `Billable` model is not created as Fastspring customer yet `newSubscription` model creates it automatically and saves `fastspring_id`. If you want to do this manually you can use `createAsFastspringCustomer` method.

```
$apiResponse = Auth::user()->createAsFastspringCustomer();
```

If details of a `Billable` model is updated, you can also update them at Fastspring side with `updateAsFastspringCustomer` method.

```
$apiResponse = Auth::user()->updateAsFastspringCustomer();
```

#### Checking Subscription Status

[](#checking-subscription-status)

At Fastspring side, there are 5 states for subscriptions: `active`, `overdue`, `canceled`, `deactivated`, `trial`. The only state you should give up to serve your customer is `deactivated` state. Others are just informative states. Cashier Fastspring package keeps synchronized state of subscriptions with webhooks.

You can check if you should still serve to the `Billable` model by using `subscribed` method.

```
if ($user->subscribed('default')) {
    //
}
```

You can retrieve related subscription model by using `subscription` method and use methods of `Subscription` methods to check its status.

```
$subscription = $user->subscription('default');

// check if you should serve or not
$subscription->valid();

// check if its state is active
$subscription->active();

// check if its state is deactived
$subscription->deactivated();

// check if its state is overdue
$subscription->overdue();

// alias: onTrial(). check if its state is trial
$subscription->trial();

// alias: canceled(), onGracePeriod(). check if its state is canceled
$subscription->cancelled();
```

You can use the `subscribedToPlan` method to check if the user is subscribed to a given plan.

```
if ($user->subscribedToPlan('monthly', 'default')) {
    //
}
```

#### Changing Plans

[](#changing-plans)

You can change current plan of a `Billable` model by using `swap` method as below. Before using this, it is recommended to look at [Prorating when Upgrading or Downgrading Subscription Plans](http://docs.fastspring.com/activity-events-orders-and-subscriptions/managing-active-subscriptions/prorating-when-upgrading-or-downgrading-subscription-plans).

```
$user = App\User::find(1);

$user->subscription('default')->swap('provider-plan-id', $prorate, $quantity, $coupons);
```

The `swap` method communicates with Fastspring and updates the subscription model according to response. If you plan to swap plan without prorating, plan doesn't change immediately. In that case, future plan and swap date are saved to `swap_to` and `swap_at` columns. End of the current subscription period, Fastspring sends you webhook request about subscription change. That's why if you think to use prorating, remember to set webhooks right.

#### Subscription Trials

[](#subscription-trials)

You can handle trial days of your plans at [Fastspring Dashboard](https://dashboard.fastspring.com).

#### Cancelling Subscriptions

[](#cancelling-subscriptions)

To cancel a subscription, call the `cancel` method on the subscription model.

```
$user->subscription('default')->cancel();
```

If you want to cancel a subscription immediately, you can use `cancelNow` method.

```
$user->subscription('default')->cancelNow();
```

Both methods update the subscription model according to response of Fastspring. The `cancel` method saves cancellation time to the `swap_at` column.

#### Resuming Subscriptions

[](#resuming-subscriptions)

To resume a subscription, you can use `resume` method on the subscription model. The user must be still on grace period. Otherwise, this method throws a `LogicException`.

```
$user->subscription('default')->resume();
```

This method updates the subscription model's `state` and set `swap_to`, `swap_at` columns `null` according to response.

#### Subscription Period

[](#subscription-period)

Cashier Fastspring package has also built-in subscription period model and related methods in order to help you to manage payment periods of subscription. This may help you to keep usage of particular resources of users between payment periods.

You can call `activePeriodOrCreate` method of `Subscription` model and retrieve current `SubscriptionPeriod` model which involves `id`, `start_date`, `end_date` information. If the current active period is not created yet, this method fetches it from Fastspring API and creates. If the subscription is a local subscription, it also creates a new period according to the last subscription period (if there is none, it assumes today is the start day of the subscription period).

```
$activePeriod = $user->subscription('default')->activePeriodOrCreate();

// if you don't want to create an active subscription period immediately when no exist
// you can use activePeriod method as below
// you can set a cron job for creation of new periods
// or do it in your way
$activePeriod = $user->subscription('default')->activePeriod();
```

#### Updating Credit Cards

[](#updating-credit-cards)

Fastspring does not provide any API to update credit card or any other payment information directly. You should redirect your customers to the their account management panel at Fastspring side. You can generate account management panel URL by using `accountManagementURI` method of the `Billable` model.

```
$redirectURI = $user->accountManagementURI();
```

### Webhooks

[](#webhooks)

Cashier Fastspring package provides an easy way to handle webhooks. It fires related events for each webhook request and provides request payload data as a parameter. It also handles message security if you set `FASTSPRING_HMAC_SECRET`. You can find sample listeners in `src/Listeners` folder.

Beside webhook specific events, there are also category and any events. For instance, if you want to listen all webhook requests, you can register your listener to `TwentyTwoDigital\CashierFastspring\Events\Any` event. Also, if you want to listen all subscription related webhook requests, you can use `TwentyTwoDigital\CashierFastspring\Events\SubscriptionAny` event.

You can see relation between package events and webhook requests at the table below.

Webhook RequestFired Cashier Fastspring Eventsaccount.created`TwentyTwoDigital\CashierFastspring\Events\AccountCreated`, `TwentyTwoDigital\CashierFastspring\Events\AccountAny`, `TwentyTwoDigital\CashierFastspring\Events\Any`fulfillment.failed`TwentyTwoDigital\CashierFastspring\Events\FulfillmentFailed`, `TwentyTwoDigital\CashierFastspring\Events\FulfillmentAny`, `TwentyTwoDigital\CashierFastspring\Events\Any`mailingListEntry.removed`TwentyTwoDigital\CashierFastspring\Events\MailingListEntryRemoved`, `TwentyTwoDigital\CashierFastspring\Events\MailingListEntryAny`, `TwentyTwoDigital\CashierFastspring\Events\Any`mailingListEntry.updated`TwentyTwoDigital\CashierFastspring\Events\MailingListEntryUpdated`, `TwentyTwoDigital\CashierFastspring\Events\MailingListEntryAny`, `TwentyTwoDigital\CashierFastspring\Events\Any`order.approval.pending`TwentyTwoDigital\CashierFastspring\Events\OrderApprovalPending`, `TwentyTwoDigital\CashierFastspring\Events\OrderAny`, `TwentyTwoDigital\CashierFastspring\Events\Any`order.canceled`TwentyTwoDigital\CashierFastspring\Events\OrderCanceled`, `TwentyTwoDigital\CashierFastspring\Events\OrderAny`, `TwentyTwoDigital\CashierFastspring\Events\Any`order.payment.pending`TwentyTwoDigital\CashierFastspring\Events\OrderPaymentPending`, `TwentyTwoDigital\CashierFastspring\Events\OrderAny`, `TwentyTwoDigital\CashierFastspring\Events\Any`order.completed`TwentyTwoDigital\CashierFastspring\Events\OrderCompleted`, `TwentyTwoDigital\CashierFastspring\Events\OrderAny`, `TwentyTwoDigital\CashierFastspring\Events\Any`order.failed`TwentyTwoDigital\CashierFastspring\Events\OrderFailed`, `TwentyTwoDigital\CashierFastspring\Events\OrderAny`, `TwentyTwoDigital\CashierFastspring\Events\Any`payoutEntry.created`TwentyTwoDigital\CashierFastspring\Events\PayoutEntryCreated`, `TwentyTwoDigital\CashierFastspring\Events\PayoutEntryAny`, `TwentyTwoDigital\CashierFastspring\Events\Any`return.created`TwentyTwoDigital\CashierFastspring\Events\ReturnCreated`, `TwentyTwoDigital\CashierFastspring\Events\ReturnAny`, `TwentyTwoDigital\CashierFastspring\Events\Any`subscription.activated`TwentyTwoDigital\CashierFastspring\Events\SubscriptionActivated`, `TwentyTwoDigital\CashierFastspring\Events\SubscriptionAny`, `TwentyTwoDigital\CashierFastspring\Events\Any`subscription.canceled`TwentyTwoDigital\CashierFastspring\Events\SubscriptionCanceled`, `TwentyTwoDigital\CashierFastspring\Events\SubscriptionAny`, `TwentyTwoDigital\CashierFastspring\Events\Any`subscription.charge.completed`TwentyTwoDigital\CashierFastspring\Events\SubscriptionChargeCompleted`, `TwentyTwoDigital\CashierFastspring\Events\SubscriptionAny`, `TwentyTwoDigital\CashierFastspring\Events\Any`subscription.charge.failed`TwentyTwoDigital\CashierFastspring\Events\SubscriptionChargeFailed`, `TwentyTwoDigital\CashierFastspring\Events\SubscriptionAny`, `TwentyTwoDigital\CashierFastspring\Events\Any`subscription.deactivated`TwentyTwoDigital\CashierFastspring\Events\SubscriptionDeactivated`, `TwentyTwoDigital\CashierFastspring\Events\SubscriptionAny`, `TwentyTwoDigital\CashierFastspring\Events\Any`subscription.payment.overdue`TwentyTwoDigital\CashierFastspring\Events\SubscriptionPaymentOverdue`, `TwentyTwoDigital\CashierFastspring\Events\SubscriptionAny`, `TwentyTwoDigital\CashierFastspring\Events\Any`subscription.payment.reminder`TwentyTwoDigital\CashierFastspring\Events\SubscriptionPaymentReminder`, `TwentyTwoDigital\CashierFastspring\Events\SubscriptionAny`, `TwentyTwoDigital\CashierFastspring\Events\Any`subscription.trial.reminder`TwentyTwoDigital\CashierFastspring\Events\SubscriptionTrialReminder`, `TwentyTwoDigital\CashierFastspring\Events\SubscriptionAny`, `TwentyTwoDigital\CashierFastspring\Events\Any`subscription.updated`TwentyTwoDigital\CashierFastspring\Events\SubscriptionUpdated`, `TwentyTwoDigital\CashierFastspring\Events\SubscriptionAny`, `TwentyTwoDigital\CashierFastspring\Events\Any`To listen an event, you can register listeners in `app/providers/EventServiceProvider.php`.

```
protected $listen = [
    // some others
    'TwentyTwoDigital\CashierFastspring\Events\SubscriptionCanceled' => [
        'Your\Lovely\Listener'
    ]
];
```

### Single Charges

[](#single-charges)

Not implemented yet. If you need it you can contribute to the package. Please check [Contributing](#contributing).

### Invoices

[](#invoices)

In Fastspring, invoices are generated by Fastspring. You don't need to generate official or unofficial invoices. If you are using default webhook listeners, your invoices will be sync to your database. You can get invoices URL with the `Invoice` model or over the `Billable` trait.

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

[](#contributing)

Thank you for considering contributing to the Cashier Fastspring. You can read the contribution guide lines [here](contributing.md). You can also check [issues](https://github.com/22digital/laravel-cashier-fastspring/issues) to improve this package.

Credits
-------

[](#credits)

Cashier Fastspring package is developed by Bilal Gultekin over Taylor Otwell's Cashier package. You can see all contributors [here](https://github.com/22digital/laravel-cashier-fastspring/graphs/contributors).

License
-------

[](#license)

Cashier Fastspring is open-sourced software licensed under the [MIT license](http://opensource.org/licenses/MIT).

###  Health Score

30

—

LowBetter than 64% of packages

Maintenance24

Infrequent updates — may be unmaintained

Popularity18

Limited adoption so far

Community13

Small or concentrated contributor base

Maturity54

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 93.6% 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 ~54 days

Recently: every ~1 days

Total

10

Last Release

2367d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/717118?v=4)[Justin Hartman](/maintainers/justinhartman)[@justinhartman](https://github.com/justinhartman)

---

Top Contributors

[![justinhartman](https://avatars.githubusercontent.com/u/717118?v=4)](https://github.com/justinhartman "justinhartman (44 commits)")[![bgultekin](https://avatars.githubusercontent.com/u/1005480?v=4)](https://github.com/bgultekin "bgultekin (2 commits)")[![scrutinizer-auto-fixer](https://avatars.githubusercontent.com/u/6253494?v=4)](https://github.com/scrutinizer-auto-fixer "scrutinizer-auto-fixer (1 commits)")

---

Tags

fastspringlaravellaravel-5laravel-5-packagelaravel-6laravel-6-packagelaravel-applicationlaravel-cashierlaravel-fastspringlaravel-frameworklaravel-packagelaravel-paymentlaravel-payment-gatewaylaravel-paymentslaravelbillingcashierfastspring

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/22digital-laravel-cashier-fastspring/health.svg)

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

###  Alternatives

[laravel/cashier

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

2.5k25.9M107](/packages/laravel-cashier)[laravel/cashier-paddle

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

264778.4k3](/packages/laravel-cashier-paddle)

PHPackages © 2026

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