Installation
First, make sure to add the Mollie key to your .env file. You can obtain an API key from the Mollie dashboard:
MOLLIE_KEY="test_xxxxxxxxxxx"Now pull the package in using composer:
composer require mollie/laravel-cashier-mollie "^2.0"Once you have pulled in the package:
-
Run
php artisan cashier:install. -
Add these fields to your billable model’s migration (typically the default “create_users_table” migration):
$table->string('mollie_customer_id')->nullable();$table->string('mollie_mandate_id')->nullable();$table->decimal('tax_percentage', 6, 4)->default(0); // optional$table->dateTime('trial_ends_at')->nullable(); // optional$table->text('extra_billing_information')->nullable(); // optional -
Run the migrations:
php artisan migrate -
Prepare the configuration files:
-
Configure at least one subscription plan in
config/cashier_plans.php. -
In
config/cashier_coupons.phpyou can manage your subscription coupons. By default an example coupon is enabled. Consider disabling it before deploying to production. -
The base configuration is in
config/cashier.php. Be careful while modifying this, in most cases you will not need to.
-
-
Prepare the billable model (typically the default Laravel User model):
-
Add the
Laravel\Cashier\Billabletrait. -
Optionally, override the method
mollieCustomerFields()to configure what billable model fields are stored while creating the Mollie Customer. Out of the box themollieCustomerFields()method uses the default Laravel User model fields:
public function mollieCustomerFields() {return ['email' => $this->email,'name' => $this->name,];}Learn more about storing data on the Mollie Customer here.
- Implement the
Laravel\Cashier\Order\Contracts\ProvidesInvoiceInformationinterface on your billable model. For example:
/*** Get the receiver information for the invoice.* Typically includes the name and some sort of (E-mail/physical) address.** @return array An array of strings*/public function getInvoiceInformation(){return [$this->name, $this->email];}/*** Get additional information to be displayed on the invoice. Typically a note provided by the customer.** @return string|null*/public function getExtraBillingInformation(){return null;} -
-
Schedule a periodic command to execute the
CashierRuncommand. When processing lots of orders, consider increasing the job frequency to prevent hitting Mollie’s rate limiter.use Illuminate\Support\Facades\Schedule;use Laravel\Cashier\Console\Commands\CashierRun;Schedule::command(CashierRun::class)->hourly() // run as often as you like (daily, monthly, every minute, ...)->withoutOverlapping(); // make sure to include thisYou can find more about scheduling jobs using Laravel here.
🎉 You’re now good to go :).