How to integrate Flutterwave v3 Payment Gateway in PHP

In this simple article i will have to take you through the Fluttervave document to easily implement the system into your PHP project.

So Let Get Started!

Throughout this process we create just 3 files in our project named: index, pay and process

Index.php

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <title>Rave payment Gateway</title>
        <meta name="description" content="">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="stylesheet" href="">
    </head>
    <body>
        <form action="pay.php" method="POST">

        <label>Email</label>
        <input type="email" name="email">
        <br>
        <label>Amount</label>
        <input type="number" name="amount">
        <br>
        <input type="submit" name="pay" vlaue="Send Payment">

        </form>
    </body>
</html>

 

pay.php

<?php 
if(isset($_POST['pay']))
{
    $email = $_POST['email'];
    $amount = $_POST['amount'];

    //* Prepare our rave request
    $request = [
        'tx_ref' => time(),
        'amount' => $amount,
        'currency' => 'NGN',
        'payment_options' => 'card',
        'redirect_url' => 'http://localhost/yt/rave/process.php',
        'customer' => [
            'email' => $email,
            'name' => 'Zubdev'
        ],
        'meta' => [
            'price' => $amount
        ],
        'customizations' => [
            'title' => 'Paying for a sample product',
            'description' => 'sample'
        ]
    ];

    //* Ca;; f;iterwave emdpoint
    $curl = curl_init();

    curl_setopt_array($curl, array(
    CURLOPT_URL => 'https://api.flutterwave.com/v3/payments',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => '',
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 0,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => json_encode($request),
    CURLOPT_HTTPHEADER => array(
        'Authorization: Bearer FLWSECK_TEST-eee25be1b44ef9a132a872075b3a0910-X',
        'Content-Type: application/json'
    ),
    ));

    $response = curl_exec($curl);

    curl_close($curl);
    
    $res = json_decode($response);
    if($res->status == 'success')
    {
        $link = $res->data->link;
        header('Location: '.$link);
    }
    else
    {
        echo 'We can not process your payment';
    }
}

?>

 

process.php

<?php 
    if(isset($_GET['status']))
    {
        //* check payment status
        if($_GET['status'] == 'cancelled')
        {
            // echo 'YOu cancel the payment';
            header('Location: index.php');
        }
        elseif($_GET['status'] == 'successful')
        {
            $txid = $_GET['transaction_id'];

            $curl = curl_init();
            curl_setopt_array($curl, array(
                CURLOPT_URL => "https://api.flutterwave.com/v3/transactions/{$txid}/verify",
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_ENCODING => "",
                CURLOPT_MAXREDIRS => 10,
                CURLOPT_TIMEOUT => 0,
                CURLOPT_FOLLOWLOCATION => true,
                CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
                CURLOPT_CUSTOMREQUEST => "GET",
                CURLOPT_HTTPHEADER => array(
                  "Content-Type: application/json",
                  "Authorization: Bearer FLWSECK_TEST-eee25be1b44ef9a132a872075b3a0910-X"
                ),
              ));
              
              $response = curl_exec($curl);
              
              curl_close($curl);
              
              $res = json_decode($response);
              if($res->status)
              {
                $amountPaid = $res->data->charged_amount;
                $amountToPay = $res->data->meta->price;
                if($amountPaid >= $amountToPay)
                {
                    echo 'Payment successful';

                    //* Continue to give item to the user
                }
                else
                {
                    echo 'Fraud transactio detected';
                }
              }
              else
              {
                  echo 'Can not process payment';
              }
        }
    }
?>

 

If you have any issue or problem base on this please use the comment below to nofify me i will surly get back as soon as possible.

Thank You!

Comments

Charles-Clement Avul

6 days ago Nigeria

Thanks @Zubdev this really good, please can you do a video about recurring payments please. Thanks again.

Reply

Zubdev

5 days ago Nigeria

Hello sir. I am glad you like the video.
Recurring payment is very easy and simple to implement i am going to create the video on Recurring payment soon.

Author

Seunex Da G

3 days ago Nigeria

The video 📷 for recurring payment has been created!

Clark Freeman

2 weeks ago

Hello, please your tutorial is great. I've been following you for sometime now. Am a beginner in PHP so I have no idea how to fully manipulate flutterwave integration to what I want. But I have just two questions.
1. Please how do I use recurring payment on my site?
2. How do I send payment details to database?
Please help. Thanks in advance....

Reply

Zubdev

2 weeks ago Nigeria

1. For recurring payment i kinda easy we just need to grab the card token sent by the payment system. Maybe we will plan a video tutorial about that section.
2. Read more about php MySQL to send data to database. In the tutorial there i a way we break the data down to grab all necessary detail.
Thanks for watching.

Author

Samson

2 weeks ago Uganda

This just made my year. Man thanks a lot

Reply

Zubdev

2 weeks ago Nigeria

With Love! ❤

Author

Write Your Comments