Learn how to integrate Stripe payment gateway in CodeIgniter 4 A payment gateway is a crucial component of any e-commerce site or application that requires payment processing. The
CodeIgniter 4 Stripe payment gateway integration is one of the simplest and most powerful solutions available. The Stripe payment gateway API offers a streamlined way to integrate a credit card payment option on a website. With the Stripe API, users can make online payments using their credit or debit cards. A credit card checkout system can easily be implemented on a web application using the Stripe payment gateway in CodeIgniter 4.
Table Of Content
1 Prerequisites
1.) PHP version of 8.2
2.) Composer
3.) Mysql
4.) Stripe Business Account
2 Introduction
In this tutorial, we show you
how to integrate the Stripe payment gateway in CodeIgniter 4 and accept credit card payments on a website with the Stripe API.
3 Create / Install a Codeigniter 4 Project
3.1 Install Codeigniter 4 Project
First, make sure your computer has a composer.
Use the following command to install new Codeigniter Project.
composer create-project codeigniter4/appstarter ci-4-stripe-app
Then, navigate to your project directory:
cd ci-4-stripe-app
Rename the env file to .env and set the development mode in the .env file also configure mysql:
# CI_ENVIRONMENT = production CI_ENVIRONMENT = development
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=ci4_stripe DB_USERNAME=root DB_PASSWORD=
4 Install the Stripe Library
To install the Stripe library in CodeIgniter 4, run:
composer require stripe/stripe-php
Add your Stripe API keys in the
.env file, which you can find on your Stripe account dashboard under
Developers > API Keys .
# STRIPE stripe.key = 'pk_test_XXXXXX' stripe.secret = 'sk_test_XXXXXX'
6 Create A Model and Migration
Set up a migration for the
payments table and a model to manage the data.
php spark make:model PaymentModel
Edit
app/Models/PaymentModel.php to configure fields for managing payment data.
<?php namespace App\Models; use CodeIgniter\Model; class PaymentModel extends Model { protected $table = 'payments'; protected $primaryKey = 'id'; protected $allowedFields = ['charge_id','transaction_id','amount','card_id','card_last_four','card_exp_month','card_exp_year','postal_code','created_at']; }
Create a migration file for the
payments table:
php spark make:migration AddPayment
Edit the migration file to define the table structure:
<?php namespace App\Database\Migrations; use CodeIgniter\Database\Migration; class AddPayment extends Migration { public function up() { $this->forge->addField([ 'id' => [ 'type' => 'BIGINT', 'constraint' => 255, 'unsigned' => true, 'auto_increment' => true ], 'charge_id' => [ 'type' => 'VARCHAR', 'constraint' => '255', ], 'transaction_id' => [ 'type' => 'VARCHAR', 'constraint' => '255', ], 'amount' => [ 'type' => 'VARCHAR', 'constraint' => '255', ], 'card_id' => [ 'type' => 'VARCHAR', 'constraint' => '255', ], 'card_last_four' => [ 'type' => 'VARCHAR', 'constraint' => '255', ], 'card_exp_month' => [ 'type' => 'VARCHAR', 'constraint' => '255', ], 'card_exp_year' => [ 'type' => 'VARCHAR', 'constraint' => '255', ], 'postal_code' => [ 'type' => 'VARCHAR', 'constraint' => '255', ], 'created_at' => [ 'type' => 'TIMESTAMP', 'null' => true ], 'updated_at' => [ 'type' => 'TIMESTAMP', 'null' => true ], ]); $this->forge->addPrimaryKey('id'); $this->forge->createTable('payments'); } public function down() { $this->forge->dropTable('payments'); } }
Run the migration:
php spark migrate
7 Create New Controller (StripeController)
Generate a
StripeController to handle payment logic:
php spark make:controller StripeController
Add
index and
createCharge methods to manage payment processes.
<?php namespace App\Controllers; use App\Controllers\BaseController; use Stripe; use App\Models\PaymentModel; class StripeController extends BaseController { public function index() { return view('index'); } public function createCharge() { Stripe\Stripe::setApiKey(getenv('stripe.secret')); $charge= Stripe\Charge::create ([ "amount" => 10 * 100, "currency" => "cad", "source" => $this->request->getVar('stripeToken'), "description" => "Get Sample Code - Stripe Test Card Payment" ]); $model = new PaymentModel(); $data = [ 'charge_id' => $charge->id, 'transaction_id' => $charge->balance_transaction, 'amount' => number_format(($charge->amount)/100,2), 'card_id' => $charge->source->id, 'card_last_four' => $charge->source->last4, 'card_exp_month' => $charge->source->exp_month, 'card_exp_year' => $charge->source->exp_year, 'postal_code' => $charge->source->address_zip, 'created_at' => date('Y-m-d H:i:s'), ]; $model->save($data); return redirect()->back()->with('success', 'Card Payment Successful!'); } } ?>
8 Create Index View File
Create an
index.php file in
app/Views to display the payment form.
<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous"> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script> </head> <body> <div class="container"> <div class="row justify-content-center"> <div class="col-4"> <div class="card"> <div class="card-body"> <?php if (session()->getFlashdata('success')) { ?> <div style="color: green; border: 2px green solid; text-align: center; padding: 5px;margin-bottom: 10px;"> <?php echo session()->getFlashdata('success');?> </div> <?php } ?> <form id='checkout-form' method='post' action="<?php echo base_url('/stripe/create-charge'); ?>"> <input type='hidden' name='stripeToken' id='stripe-token-id'> <label for="card-element" class="mb-5">Checkout Forms</label> <br> <div id="card-element" class="form-control" ></div> <button id='pay-btn' class="btn btn-success mt-3" type="button" style="margin-top: 20px; width: 100%;padding: 7px;" onclick="createToken()">PAY $10 </button> <form> </div> </div> </div> </div> </div> <script src="https://js.stripe.com/v3/" ></script> <script> var stripe = Stripe("<?php echo getenv('stripe.key') ?>"); var elements = stripe.elements(); var cardElement = elements.create('card'); cardElement.mount('#card-element'); function createToken() { document.getElementById("pay-btn").disabled = true; stripe.createToken(cardElement).then(function(result) { if(typeof result.error != 'undefined') { document.getElementById("pay-btn").disabled = false; alert(result.error.message); } // creating token success if(typeof result.token != 'undefined') { document.getElementById("stripe-token-id").value = result.token.id; document.getElementById('checkout-form').submit(); } }); } </script> </body> </html>
9 Define a Route
Define the routes for
StripeController in
app/Config/Routes.php to map URL paths to the payment processing methods.
use CodeIgniter\Router\RouteCollection; $routes->get('/', 'Home::index'); $routes->get('/stripe', 'StripeController::index'); $routes->post('/stripe/create-charge', 'StripeController::createCharge');
10 Folder Structure
11 Run Web Server to Test the App
Use this command to start the server and test the application:
php spark serve
Visit the URL http://localhost:8080/index.php/stripe
12 Conclusion
This example code makes it straightforward to
integrate the CodeIgniter 4 Stripe payment gateway , enabling easy credit card processing on your site.
Reference URL
Tags