1. Go to this page and download the library: Download bryceandy/laravel_pesapal library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
bryceandy / laravel_pesapal example snippets
/**
* Create a form and send the appropriate values. You may as
* well send url parameters where a view will be returned.
*/
[
'amount' => 'Required, input should be numbers only',
'currency' => 'Required, values can be TZS,KES,UGX or USD',
'description' => 'Required, short description of the payment',
'type' => 'Required, "MERCHANT" or "ORDER"',
'reference' => 'Required, should be auto-generated and unique for every transaction',
'first_name' => 'Optional',
'last_name' => 'Optional',
'email' => 'Required if there is no phone number',
'phone_number' => 'Required if there is no email,
namespace App\Http\Controllers;
use Bryceandy\Laravel_Pesapal\Facades\Pesapal;
use Bryceandy\Laravel_Pesapal\Payment;
class CallbackController extends Controller
{
public function index()
{
$transaction = Pesapal::getTransactionDetails(
request('pesapal_merchant_reference'), request('pesapal_transaction_tracking_id')
);
// Store the paymentMethod, trackingId and status in the database
Payment::modify($transaction);
$status = $transaction['status'];
// also $status = Pesapal::statusByTrackingIdAndMerchantRef(request('pesapal_merchant_reference'), request('pesapal_transaction_tracking_id'));
// also $status = Pesapal::statusByMerchantRef(request('pesapal_merchant_reference'));
return view('your_callback_view', compact('status')); // Display this status to the user. Values are (PENDING, COMPLETED, INVALID, or FAILED)
}
}
// For Laravel 7.*
Route::get('pesapal-ipn-listener', 'IpnController');
// For Laravel 8.* onwards
Route::get('pesapal-ipn-listener', \App\Http\Controllers\IpnController::class);
namespace App\Http\Controllers;
use Bryceandy\Laravel_Pesapal\Facades\Pesapal;
use Bryceandy\Laravel_Pesapal\Payment;
use Illuminate\Support\Facades\Mail;
class IpnController extends Controller
{
public function __invoke()
{
$transaction = Pesapal::getTransactionDetails(
request('pesapal_merchant_reference'), request('pesapal_transaction_tracking_id')
);
// Store the paymentMethod, trackingId and status in the database
Payment::modify($transaction);
// If there was a status change and the status is not 'PENDING'
if(request('pesapal_notification_type') == "CHANGE" && request('pesapal_transaction_tracking_id') != ''){
//Here you can do multiple things to notify your user that the changed status of their payment
// 1. Send an email or SMS (if your user doesnt have an email)to your user
$payment = Payment::whereReference(request('pesapal_merchant_reference'))->first();
Mail::to($payment->email)->send(new PaymentProcessed(request('pesapal_transaction_tracking_id'), $transaction['status']));
// PaymentProcessed is an example of a mailable email, it does not come with the package
// 2. You may also create a Laravel Event & Listener to process a Notification to the user
// 3. You can also create a Laravel Notification or dispatch a Laravel Job. Possibilities are endless!
// Finally output a response to Pesapal
$response = 'pesapal_notification_type=' . request('pesapal_notification_type').
'&pesapal_transaction_tracking_id=' . request('pesapal_transaction_tracking_id').
'&pesapal_merchant_reference=' . request('pesapal_merchant_reference');
ob_start();
echo $response;
ob_flush();
exit; // This is mandatory. If you dont exit, Pesapal will not get your response.
}
}
}