1. Go to this page and download the library: Download nyawach/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/ */
//Please specify the environment pesapal is running on: production or sandbox
'pesapal_env'=>env('PESAPAL_ENV'),
/*
* The application consumer key
*
*/
'consumer_key'=>env('PESAPAL_CONSUMER_KEY'),
/*
* The application consumer Secret
*/
'consumer_secret'=>env('PESAPAL_CONSUMER_SECRET'),
/*
* It is a good practise to guard your routes. We will use
* unique string to guard our callback and IPN Urls. Provide a random string to
* to guard the endpoints
*/
'pesapal_guard'=>env('PESAPAL_GUARD'),
/*
* After registering the IPN URL(s). Pesapal provides an IPN ID.
* Copy that ID and save in you .env file. For a transaction to go through
* it must have an ipn_id
*/
'pesapal_ipn_id'=>env('PESAPAL_IPN_ID')
use Nyawach\LaravelPesapal\Facades\LaravelPesapal;
class PesapalController extends Controller
{
public function registerIpn(){
$postData=array();
//Sample Notification URL guarded by unique string
$postData["url"]='https://mywebsite/getNotification/'.config('pesapal.pesapal_guard');
/* IPN Notification type.
* This will tell Pesapal how to send the notification. As a POST or GET request
*/
$postData["ipn_notification_type"]='POST';
return LaravelPesapal::registerIpn($postData);
}
}
use Nyawach\LaravelPesapal\Facades\LaravelPesapal;
use Nyawach\LaravelPesapal\Models\Pesapal;
class PesapalController extends Controller
{
//submit an order request
public function submitOrder(){
$postData = array();
$postData["language"] = "EN"; //nullable
$postData["currency"] = "KES"; //This represents the currency you want to charge your customers. ISO formats
$postData["amount"] = number_format(1,2); //must be float value and cters long country code in [ISO 3166-1]
$postData["billing_address"]["first_name"] = "John";
$postData["billing_address"]["middle_name"] = "Doe";
$postData["billing_address"]["last_name"] = "Musa";
$postData["billing_address"]["line_1"] = "";//nullable
$postData["billing_address"]["line_2"] = "";
$postData["billing_address"]["city"] = "Nairobi";//nullable
$postData["billing_address"]["state"] = "Kenya";//nullable
$postData["billing_address"]["postal_code"] = "";//nullable
$postData["billing_address"]["zip_code"] = "";//nullable
$postData["callback_url"] = "https://www.myapplication.com/response-page/".config('pesapal.pesapal_guard');//ensure you guard your callback url
$postData["notification_id"] = config('pesapal.pesapal_ipn_id'); //IPN_id from your .env file
$postData["terms_and_conditions_id"] = "";
//return $postData;
$order=LaravelPesapal::getMerchantOrderURL($postData);
/*
* Save the transaction details to the database then later update
* based on transaction status
* Then render the iframe to present the user with a payment
* interface
*/
$transaction=new Pesapal();
$transaction->tracking_id=$order->order_tracking_id;
$transaction->language=$postData['language'];
$transaction->currency=$postData['currency'];
$transaction->amount=$postData['amount'];
$transaction->merchant_reference=$postData['id'];
$transaction->description=$postData["description"];
$transaction->phone_number=$postData["billing_address"]["phone_number"] ;
$transaction->email=$postData["billing_address"]["email_address"];
$transaction->country_code=$postData["billing_address"]["country_code"];
$transaction->first_name=$postData["billing_address"]["first_name"];
$transaction->middle_name=$postData["billing_address"]["middle_name"];
$transaction->last_name=$postData["billing_address"]["last_name"];
$transaction->billing_address_line_1=$postData["billing_address"]["line_1"];
$transaction->billing_address_line_2=$postData["billing_address"]["line_2"];
$transaction->city=$postData["billing_address"]["city"];
$transaction->state=$postData["billing_address"]["state"];
$transaction->postal_code=$postData["billing_address"]["postal_code"];
$transaction->zip_code=$postData["billing_address"]["zip_code"];
$transaction->save();
//You only need to save fields that are important to you
return $order;
}
}
use Nyawach\LaravelPesapal\Facades\LaravelPesapal;
use \Nyawach\LaravelPesapal\Models\Pesapal;
class PesapalController extends Controller{
//callback url function
public function pesapalCallback(Request $request){
$transaction_status=LaravelPesapal::getTransactionStatus($request->OrderTrackingId)
/*
* Based on the transaction status_code you can update the transaction details as
* failed or complete. If the transaction is not complete
* you can redirect the users to attempt the payment again.
*/
//if the transaction is complete
if ($transaction_status->status_code===1){
$order=Pesapal::where('tracking_id',$request->OrderTrackingId)->firstOrFail();
//check if the amounts match
if ($order->amount==$transaction_status->amount){
$order->status=$transaction_status->status_code
$order->payment_method=$transaction_status->payment_method
$order->save()
//redirect user to another page. Maybe thank you page
}else{
// do something else if the amounts do not match
}
}else{
//do something else such redirecting users to attempt the payment again
}
}
}
use Nyawach\LaravelPesapal\Facades\LaravelPesapal;
class PesapalController{
public function refundPayments(){
/*
* confirmation_code:This refers to payment confirmation code that was returned by the processor
* amount: Amount to be refunded.
* username: Identity of the user who has initiated the refund.
* remarks: A brief description on the reason for the refund.
*/
$postData=array();
$postData['confirmation_code']='AA11BB22' //
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.