patricio
patricio

Reputation: 350

Laravel: Stripe No API key provided. (HINT: set your API key using Stripe::setApiKey()

Yes, I know, there is an exact same question there but the "solution" is not approved nor specified as it should.

So: 1) I installed the stripe library v.3.0 by php composer.phar require stripe/etc

and it installed ok, (otherwise I wouldn't have actually received that error)

2) I have the public test key in the blade Form in the Head section alright

3) Then at the controller I included inside the public function that receives the data from the Form the following: (no problem not my real secret key)

$token = Input::get('stripeToken');
Stripe::setApiKey("sk_test_1VJeJsdfsdgdgVbJODDDD");

3) I also put it in the .env file as

STRIPE_API_SECRET='sk_test_1VJeJsvj7l2ft2eXXsevDD'

and made a call from the config/services.php as

'stripe' => [
        'model'  => App\User::class,
        'key'    => '',
        'secret' => env('STRIPE_API_SECRET'),
    ],

but I keep getting that error.

The other same question at SO says that it has "solved" it by:

the solution was to put the stripe api key into AppServiceProvider, into register() class.

That is completely vague, inaccurate and don't know what he is talking about.

Anyone knows? thank you very much

Upvotes: 9

Views: 18826

Answers (6)

Jan Żankowski
Jan Żankowski

Reputation: 8951

Comprehensive answer, solving it for the entire application:

.env file:

STRIPE_KEY=pk_live_exampleexampleexampleexampleexampleexampleexample
STRIPE_SECRET=sk_live_exampleexampleexampleexampleexampleexampleexample

config\services.php file:

'stripe' => [
    [...]
    'key' => env('STRIPE_KEY'),
    'secret' => env('STRIPE_SECRET'),
],

app\Providers\AppServiceProvider.php file:

public function boot()
{
    [...]
    Stripe::setApiKey(config('services.stripe.secret'));
    [...]
}

Afterwards, you can also run, on command line:

php artisan config:clear

Explanation:

  • I use the boot() method instead of register() suggested in other answers for reasons explained here.
  • php artisan config:clear is not always necessary, but makes sure you're not using cached configuration, preventing the app picking up the changes added above.

Upvotes: 0

jewishmoses
jewishmoses

Reputation: 1138

Try to clear cache

php artisan config:cache

https://laravel.com/docs/7.x/configuration#configuration-caching

Upvotes: 3

Mike O'Connor
Mike O'Connor

Reputation: 31

I ran into the same issue, and worked around it by setting the key manually in my controller constructor like so:

class SubscriptionController extends Controller {

    public function __construct() {
        Stripe::setApiKey(env('STRIPE_SECRET'));
    }

    public function getPlans() {
        dd(Plan::all());
    }
}

Upvotes: 3

Set public static $apiKey='sk_test_your api key'; from stripe.php

Upvotes: 0

Alix Axel
Alix Axel

Reputation: 154623

If you look at the Billable code:

/**
 * Get the Stripe API key.
 *
 * @return string
 */
public static function getStripeKey()
{
    return static::$stripeKey ?: getenv('STRIPE_SECRET');
}

/**
 * Set the Stripe API key.
 *
 * @param  string  $key
 * @return void
 */
public static function setStripeKey($key)
{
    static::$stripeKey = $key;
}

It wants either the static variable or the STRIPE_SECRET environment variable to be defined.

The other answer is a bit vague, but offers a solution. In your AppServiceProvider:

public function register()
{
    \App\Models\User::setStripeKey(\Config::get('services.stripe.secret'));
}

Upvotes: 2

markashworth
markashworth

Reputation: 1169

I had a similar problem and it was because 'stripe' was configured twice in config/services/php. Are you really sure that config/services.php only has one instance of 'stripe' in there?

Here's my example config/services.php, that's working with Stripe, for reference:

<?php
return [
'mandrill' => [
    'secret' => env('MANDRILL_SECRET'),
],

'ses' => [
    'key'    => env('SES_KEY'),
    'secret' => env('SES_SECRET'),
    'region' => 'us-east-1',
],

'stripe' => [
    'model'  => 'App\Models\User',
    'key'    => env('STRIPE_API_PUBLIC'),
    'secret' => env('STRIPE_API_SECRET'),
],
];

Upvotes: 0

Related Questions