Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

TheOnlineThomas's avatar

Stripe is not working

I am using stripe payment gateway in my project. I am trying to display exception errors when a user entered expired card number. but instead of showing me error of exception it shows me laravel error. Note: it is not working with any kind of exception not only expired card number.

I am using the exception provided by Stripe.

public function recharge(Request $request)
{
    $this->validate($request, [
        'amount'        => 'required',

    ]);

    $amount = $request->input('amount');
    \Stripe\Stripe::setApiKey('key_here');

    try {
        $token  = $_POST['stripeToken'];

        $charge = \Stripe\Charge::create([
            'amount'      => $amount * 100,
            'currency'    => 'usd',
            'description' => 'Example charge',
            'source'      => $token,
        ]);

        $user = User::find(Auth::user()->id);
        $user->deposit($amount);

        Session::flash('success', 'Your Wallet is recharged!');
        return back();
    } catch (\Stripe\Error\Card $e) {
        // Since it's a decline, \Stripe\Error\Card will be caught
        $body = $e->getJsonBody();
        $err  = $body['error'];

        print('Status is:' . $e->getHttpStatus() . "\n");
        print('Type is:' . $err['type'] . "\n");
        print('Code is:' . $err['code'] . "\n");

        // param is '' in this case
        print('Param is:' . $err['param'] . "\n");
        print('Message is:' . $err['message'] . "\n");
    } catch (\Stripe\Error\InvalidRequest $e) {
        return "error";
    } catch (\Stripe\Error\Authentication $e) {
        return "error";
    } catch (\Stripe\Error\ApiConnection $e) {
        // Network communication with Stripe failed
        return "error";
    } catch (\Stripe\Error\Base $e) {

        return "error";
    } catch (Exception $e) {
        return "error";
    }
}

I want to display the error defined by me in the catch block.

0 likes
3 replies
Nakov's avatar

@theonlinethomas if the Exception is not caught by you, only then Laravel exception handler will be fired.

Have you tried adding dd() in the catch clauses, for example:


...
} catch (\Stripe\Error\Card $e) {
    dd($e->getMessage());
}
...

and the last one don't know if you've got the correct import, but try this instead:

catch (\Exception $e) {
    return "error";
}
1 like
tisuchi's avatar
tisuchi
Best Answer
Level 70

@theonlinethomas

You are not catching the Stripe\Exception\CardException exception. You are probably not actually catching Exception either unless you have aliased Exception at the top of your file.

Add use Exception; before the class declaration at the top or adjust Exception in the catch to \Exception.

Looks like the newer version of stripe-php library throws Exceptions from Stripe\Exception and no longer has a namespace Stripe\Error FYI.

Check more: https://stripe.com/docs/api/errors/handling

1 like
TheOnlineThomas's avatar

Thank you all.

@tisuchi It doesn't work directly. I have to tweaks the code a bit. However, it's working now. Thanks again man.

Please or to participate in this conversation.