A $0 trial only runs a weak card authorization, so invalid cards slip through and only fail once the real charge fires days later. Applying a $11-off, duration=once Stripe coupon at checkout charges $1 for real on the first invoice instead, which validates the card immediately, then reverts to the full monthly price on the next invoice with no manual swap needed.
155 lines
5.3 KiB
PHP
155 lines
5.3 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
use Laravel\Cashier\Console\WebhookCommand;
|
|
use Laravel\Cashier\Invoices\DompdfInvoiceRenderer;
|
|
|
|
return [
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Stripe Keys
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| The Stripe publishable key and secret key give you access to Stripe's
|
|
| API. The "publishable" key is typically used when interacting with
|
|
| Stripe.js while the "secret" key accesses private API endpoints.
|
|
|
|
|
*/
|
|
|
|
'key' => env('STRIPE_KEY'),
|
|
|
|
'secret' => env('STRIPE_SECRET'),
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Cashier Path
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| This is the base URI path where Cashier's views, such as the payment
|
|
| verification screen, will be available from. You're free to tweak
|
|
| this path according to your preferences and application design.
|
|
|
|
|
*/
|
|
|
|
'path' => env('CASHIER_PATH', 'stripe'),
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Stripe Webhooks
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| Your Stripe webhook secret is used to prevent unauthorized requests to
|
|
| your Stripe webhook handling controllers. The tolerance setting will
|
|
| check the drift between the current time and the signed request's.
|
|
|
|
|
*/
|
|
|
|
'webhook' => [
|
|
'secret' => env('STRIPE_WEBHOOK_SECRET'),
|
|
'tolerance' => env('STRIPE_WEBHOOK_TOLERANCE', 300),
|
|
'events' => WebhookCommand::DEFAULT_EVENTS,
|
|
],
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Currency
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| This is the default currency that will be used when generating charges
|
|
| from your application. Of course, you are welcome to use any of the
|
|
| various world currencies that are currently supported via Stripe.
|
|
|
|
|
*/
|
|
|
|
'currency' => env('CASHIER_CURRENCY', 'usd'),
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Currency Locale
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| This is the default locale in which your money values are formatted in
|
|
| for display. To utilize other locales besides the default en locale
|
|
| verify you have the "intl" PHP extension installed on the system.
|
|
|
|
|
*/
|
|
|
|
'currency_locale' => env('CASHIER_CURRENCY_LOCALE', 'en'),
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Payment Confirmation Notification
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| If this setting is enabled, Cashier will automatically notify customers
|
|
| whose payments require additional verification. You should listen to
|
|
| Stripe's webhooks in order for this feature to function correctly.
|
|
|
|
|
*/
|
|
|
|
'payment_notification' => env('CASHIER_PAYMENT_NOTIFICATION'),
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Invoice Settings
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| The following options determine how Cashier invoices are converted from
|
|
| HTML into PDFs. You're free to change the options based on the needs
|
|
| of your application or your preferences regarding invoice styling.
|
|
|
|
|
*/
|
|
|
|
'invoices' => [
|
|
'renderer' => env('CASHIER_INVOICE_RENDERER', DompdfInvoiceRenderer::class),
|
|
|
|
'options' => [
|
|
// Supported: 'letter', 'legal', 'A4'
|
|
'paper' => env('CASHIER_PAPER', 'letter'),
|
|
|
|
'remote_enabled' => env('CASHIER_REMOTE_ENABLED', false),
|
|
],
|
|
],
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Stripe Logger
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| This setting defines which logging channel will be used by the Stripe
|
|
| library to write log messages. You are free to specify any of your
|
|
| logging channels listed inside the "logging" configuration file.
|
|
|
|
|
*/
|
|
|
|
'logger' => env('CASHIER_LOGGER'),
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Trial Period
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| The number of days for the trial period. Set to 0 to disable trials.
|
|
|
|
|
*/
|
|
|
|
'trial_days' => env('CASHIER_TRIAL_DAYS', 8),
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Paid First Month Coupon
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| Stripe Coupon ID applied at checkout so the first invoice comes out to
|
|
| $1 instead of the full monthly price — a real charge validates the
|
|
| card up front instead of a $0 trial authorization. Must be an
|
|
| `amount_off` coupon with `duration: once`, so it discounts only the
|
|
| first invoice and the full price bills automatically afterward.
|
|
|
|
|
*/
|
|
|
|
'first_month_coupon_id' => env('STRIPE_FIRST_MONTH_COUPON_ID'),
|
|
|
|
];
|