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