Laravel package for TZ Mpesa USSD Push integration
tumainimosha/laravel-mpesa-push is a Laravel package for laravel package for tz mpesa ussd push integration.
It currently has 10 GitHub stars and 709 downloads on Packagist (latest version 0.3.1).
Install it with composer require tumainimosha/laravel-mpesa-push.
Discover more Laravel packages by tumainimosha
or browse all Laravel packages to compare alternatives.
Last updated
Install via composer
composer require tumainimosha/laravel-mpesa-push
Publish config file to customize the default package config.
php artisan vendor:publish --provider="Tumainimosha\MpesaPush\MpesaPushServiceProvider" --tag="config"
php artisan vendor:publish --provider="Tumainimosha\MpesaPush\MpesaPushServiceProvider" --tag="migrations"
php artisan migrate
Configure your api username and password in .env file as follows
TZ_MPESA_PUSH_SSL_CERT_PASSWORD=secret
TZ_MPESA_PUSH_USERNAME=123123
TZ_MPESA_PUSH_PASSWORD=VeryStrongPasswd
TZ_MPESA_PUSH_BUSINESS_NAME=FooCompany
TZ_MPESA_PUSH_BUSINESS_NUMBER=123123
Other configuration can be found in the config file published by this package. The options are well commented 😊
use Tumainimosha\MpesaPush\MpesaPush;
...
public function testPush() {
// Resolve service object
$push = MpesaPush::instance();
$customerMsisdn = '<substitute valid mpesa-tz number>';
$amount = 250;
$txnId = str_random('20');
$responseCode = $push->postRequest($customerMsisdn, $amount, $txnId);
// Check for response code
// Valid response codes
// '0' - Success (note: response code is string '0' not numeric 0)
// 'Duplicate' - Duplicate transaction ID
// Others - fail
}
Out of the box, this package stores transactions in table mpesa_push_transactions, and updates their status on receiving callback.
However, you may need to do further actions on your app after receiving callback, by listening to event MpesaCallbackReceived::class fired at callback.
You need to implement your own event listener to listen for this event and do any additional steps after receiving callback.
The event has public attribute $transaction which contains the transaction parameters including status
// EventServiceProvider.php
protected $listen = [
...
\Tumainimosha\MpesaPush\Events\MpesaCallbackReceived::class => [
\App\Listeners\MpesaCallbackReceivedHandler::class,
],
];
// MpesaCallbackReceivedHandler.php
public function handle(MpesaCallbackReceived $event)
{
$transaction = $event->transaction;
// do your custom logic here
}
The service offers fluent setters to change config values at runtime if your use case requires.
Such a use case could be when you have multiple accounts on the same project, and you fetch your config values from DB.
// $account here could be a Model fetched from db with account attributes
$pushService = MpesaPush::instance();
$pushService->setUsername($account->username)
->setPassword($account->password)
->setBusinessName($account->business_name)
->setBusinessNumber($account->business_number)
->setCommand($account->command);
$pushService->postRequest($customerMsisdn, $amount, $txnId);
Run the tests with:
vendor/bin/phpunit
Please see CONTRIBUTING for details.
** Help needed with improving documentation and unit testing. Pull Requests are welcome.
If you discover any security-related issues, please email [email protected] instead of using the issue tracker.
The MIT License (MIT). Please see License File for more information.