Laravel

How to do payments with stripe checkout

How to do payments with stripe checkout

Payments gateways are very useful components of any e-commerce store. One of the popular payment gateways is Stripe. it’s becoming more popular nowadays.

Stripe’s simple definition is :

We bring together everything that’s required to build websites and apps that accept payments and send payouts globally. Stripe’s products power payments for online and in-person retailers, subscription businesses, software platforms and marketplaces, and everything in between. ~ Stripe

To begin this laravel tutorial, I hope you already have fresh laravel repo.

Stripe Configuration with Laravel

Run the following command to install stripe :

				
					composer require stripe/stripe-php
				
			

if you don’t have a Stripe account, you’ll want to set that up and add your API keys. Add the following to your .env file.

				
					STRIPE_KEY=your-stripe-key
STRIPE_SECRET=your-stripe-secret
				
			

Publish Migrations Files From Stripe

				
					php artisan vendor:publish --tag="cashier-migrations" 
				
			

And Run migrations by hitting the following command

				
					php artisan migrate 
				
			

Setup Stripe Controller

Now create a stripe controller by hitting the following command:

				
					php artisan make:controller StripeController
namespace App\Http\Controllers;
use Illuminate\Contracts\View\Factory;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Stripe\Checkout\Session;
use Stripe\Exception\ApiErrorException;
/**
 * Class FeaturedCompanySubscriptionController
 */
class StripeControlle extends AppBaseController
{
    public function createSession(Request $request)
    {
        setStripeApiKey();
        $session = Session::create([
            'payment_method_types' => ['card'],
            'customer_email'       => $userEmail,
            'line_items'           => [
                [
                    'price_data'  => [
                        'product_data' => [
                            'name' => 'Make '.$company->user->first_name.' as featured Company',
                        ],
                        'unit_amount'  => 100 * 100,
                        'currency'     => 'USD',
                    ],
                    'quantity'    => 1,
                    'description' => '',
                ],
            ],
            'client_reference_id'  => '1234',
            'mode'                 => 'payment',
            'success_url'          => url('payment-success').'?session_id={CHECKOUT_SESSION_ID}',
            'cancel_url'           => url('failed-payment?error=payment_cancelled'),
        ]);
        $result = [
            'sessionId' => $session['id'],
        ];
        return $this->sendResponse($result, 'Session created successfully.');
    }
    public function paymentSuccess(Request $request)
    {
        $sessionId = $request->get('session_id');
        // 
    }

    public function handleFailedPayment()
    {
        // 
    }
}
				
			

Define Routes

				
					Route::post('stripe-charge', 'StripeController@createSession');
Route::get('payment-success', 'StripeController@paymentSuccess');
Route::get('failed-payment',  'StripeController@handleFailedPayment');
				
			

Setup From View file

Here we are going to create stripe session from the backend and redirect to the stripe checkout page once we will receive the sessionId from the backend.

Assume that makePaymentURL is something like “APP_URL/stripe-charge”.

Now let’s say when you hit the submit form of stripe it will call MakePaymentURL and that URL returns your session ID which we will use to redirect to the stripe checkout page.

				
					 $(document).on('click', '#makePayment', function () {

        $(this).addClass('disabled');
        $.post(makePaymentURL, payloadData).done((result) => {
            let sessionId = result.data.sessionId;
            stripe.redirectToCheckout({
                sessionId: sessionId,
            }).then(function (result) {
                $(this).html('Make Featured').removeClass('disabled');
                manageAjaxErrors(result);
            });
        }).catch(error => {
            $(this).html('Make Featured').removeClass('disabled');
            manageAjaxErrors(error);
        });
    });
				
			

That’s it, after entering proper details into stripe you will get a success callback to a related route, where you can perform related actions.

Share On: