knox / mpesa-rest
Laravel Package implementation of the MPESA REST API
Installs: 1 708
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 2
Forks: 4
Open Issues: 0
Requires
- guzzlehttp/guzzle: ^6.0|^7.0
README
Laravel Package for the MPESA REST API
Installation
Add this package using Composer
From the command line inside your project directory, simply type:
composer require knox/mpesa-rest
Update your config
NB: from laravel 5.5 due to autodiscovery the below can be skipped
Add the service provider to the providers array in config/app.php:
Knox\MPESA\MpesaServiceProvider::class
Add the facade to the aliases array in config/app.php:
'MPESA' => Knox\MPESA\Facades\MPESA::class
Publish the package configuration
Publish the configuration file and migrations by running the provided console command:
php artisan vendor:publish --provider="Knox\MPESA\MpesaServiceProvider"
Setup
Environmental Variables
MPESA_ENV='live' for production and 'test' for sandbox
MPESA_VERSION='v1' or 'v2'
MPESA_CONSUMER_KEY=consumer key
MPESA_CONSUMER_SECRET=consumer secret
MPESA_IDENTIFIER=shortcode shortcode or till
MPESA_SHORT_CODE=shortcode
MPESA_PASSKEY=passkey
MPESA_INITIATOR_NAME=initiator username
MPESA_INITIATOR_PASSWORD=initiator password
MPESA_B2C_TIMEOUT_URL=url in your site
MPESA_B2C_RESULT_URL=url in your site
MPESA_B2B_TIMEOUT_URL=url in your site
MPESA_B2B_RESULT_URL=url in your site
MPESA_STK_CALLBACK_URL=url in your site
MPESA_C2B_VALIDATION_URL=url in your site
MPESA_C2B_CONFIRMATION_URL=url in your site
MPESA_ACCOUNT_BALANCE_TIMEOUT_URL=url in your site
MPESA_ACCOUNT_BALANCE_CONFIRMATION_URL=url in your site
MPESA_REVERSAL_TIMEOUT_URL=url in your site
MPESA_REVERSAL_CONFIRMATION_URL=url in your site
MPESA_TRANSACTION_STATUS_TIMEOUT_URL=url in your site
MPESA_TRANSACTION_STATUS_CONFIRMATION_URL=url in your site
MPESA_IDENTITY_CALLBACK_URL=url in your site
Usage
At the top of your controller include the facade
use MPESA;
Registration of C2B Urls
If you haven't registered the mpesa url callbacks then use the below
use MPESA; use Illuminate\Http\Request; class PaymentsController extends Controller { public function registerURL(){ $mpesa = MPESA::registerC2bUrl(); } }
Posible Operations
<!-- @param(phone_number, amount, payment_type, @remarks) -->
mpesa = MPESA::b2c('254700123456',10,'PromotionPayment', 'No Remarks');
<!-- @param(short_code, amount, command, sender_identifier, receiver_identifier, @remarks, @account = '') -->
mpesa = MPESA::b2b('600000',100,'BusinessPayBill',4,4, 'No Remarks',123456);
<!-- @param(short_code, amount, command, sender_identifier, receiver_identifier, @remarks, @account = '') -->
mpesa = MPESA::b2b('600000',100,'BusinessBuyGoods',4,4, 'No Remarks');
<!-- @param() -->
mpesa = MPESA::registerC2bUrl();
<!-- @param(phone, amount, command, account, @short_code) -->
mpesa = MPESA::c2bSimulate('254700123456',100,'CustomerPayBillOnline','123456');
mpesa = MPESA::c2bSimulate('254700123456',1000,'CustomerBuyGoodsOnline');
<!-- @param(@remarks) -->
mpesa = MPESA::getAccountBalance();
<!-- @param(transaction, amount, receiver = null, receiver_identifier = 11, @remarks, @occassion) -->
mpesa = MPESA::doReversal('ND893KKHX1', 100, 602984, 4);
<!-- @param(phone, amount, account, @description) -->
mpesa = MPESA::stkPush('254700123456', 1000, 'Account 123');
<!-- @param(checkout_request_id) -->
mpesa = MPESA::stkQuery('ws_CO_14092017184227664');
<!-- @param(transaction, party = '', identifier_type = '4', @remarks, @occassion) -->
mpesa = MPESA::getTransactionStatus('ND893KKHX1', null,4);
Example response handler
public function c2bConfirmation(Request $request)
{
$response = json_decode($request->getContent(), true);
$mpesa_transaction_id = $response['TransID'];
$date_time = Carbon::parse($response['TransTime']);
$amount = $response['TransAmount'];
$account = strtoupper(preg_replace('/\s+/', '', $response['BillRefNumber']));
$merchant_transaction_id = $response['ThirdPartyTransID'];
$phone = $response['MSISDN'];
$payer = preg_replace('!\s+!', ' ', ucwords(strtolower($response['FirstName'] . ' ' . $response['MiddleName'] . ' ' . $response['LastName'])));
}
All Done
Feel free to report any issues