PHP code example of abutimartin / mpesa-sdk
1. Go to this page and download the library: Download abutimartin/mpesa-sdk 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/ */
abutimartin / mpesa-sdk example snippets
pesaSDK\MpesaSDK;
// Initialize SDK
$mpesa = MpesaSDK::sandbox([
'consumer_key' => 'your_consumer_key',
'consumer_secret' => 'your_consumer_secret',
'business_short_code' => '174379',
'passkey' => 'your_passkey'
]);
// STK Push
$response = $mpesa->stkPush()->push(
phoneNumber: '254712345678',
amount: 100.00,
accountReference: 'ORDER123',
transactionDescription: 'Payment',
callbackUrl: 'https://yourapp.com/callback'
);
if ($response->isSuccessful()) {
echo "Payment initiated! Checkout ID: " . $response->get('CheckoutRequestID');
}
// Using Dependency Injection
class PaymentController extends Controller
{
public function pay(Request $request, MpesaSDK $mpesa)
{
$response = $mpesa->stkPush()->push(
phoneNumber: $request->phone,
amount: $request->amount,
accountReference: 'ORDER123',
transactionDescription: 'Payment',
callbackUrl: route('mpesa.callback')
);
return response()->json($response->getData());
}
}
// Using Facade
use MpesaSDK\Laravel\MpesaFacade as Mpesa;
$response = Mpesa::requestPayment(
phoneNumber: '254712345678',
amount: 100.00,
callbackUrl: route('mpesa.callback')
);
// Sandbox
$mpesa = MpesaSDK::sandbox([
'consumer_key' => 'your_consumer_key',
'consumer_secret' => 'your_consumer_secret',
'business_short_code' => '174379',
'passkey' => 'your_passkey'
]);
// Production
$mpesa = MpesaSDK::production([
'consumer_key' => 'your_consumer_key',
'consumer_secret' => 'your_consumer_secret',
'business_short_code' => 'your_shortcode',
'passkey' => 'your_passkey',
'initiator_name' => 'your_initiator',
'security_credential' => 'your_security_credential'
]);
$mpesa = MpesaSDK::fromEnv();
// Automatic via Service Container
public function __construct(MpesaSDK $mpesa) {
$this->mpesa = $mpesa;
}
// Or via Facade
Mpesa::stkPush()->push(...);
// STK Push Status
$statusResponse = $mpesa->stkPush()->queryStatus($checkoutRequestId);
// General Transaction Status
$response = $mpesa->transactionStatus()->query(
transactionId: 'LHG31AA5TX',
queueTimeoutUrl: 'https://yourapp.com/timeout',
resultUrl: 'https://yourapp.com/result'
);
// In Controller
$status = $mpesa->stkPush()->queryStatus($request->checkout_id);
return response()->json($status->getData());
$response = $mpesa->accountBalance()->query(
queueTimeoutUrl: 'https://yourapp.com/timeout',
resultUrl: 'https://yourapp.com/result'
);
pesaSDK\Callbacks\STKPushCallback;
use MpesaSDK\Utils\Logger;
$logger = new Logger(Logger::LEVEL_INFO, 'mpesa.log');
$callback = new STKPushCallback($logger);
$callback->onSuccess(function($data) {
// Store successful transaction
file_put_contents('transactions.log',
"SUCCESS: {$data['mpesa_receipt_number']} - {$data['amount']}\n",
FILE_APPEND
);
});
$callback->onFailure(function($data) {
// Handle failed transaction
file_put_contents('transactions.log',
"FAILED: {$data['result_desc']}\n",
FILE_APPEND
);
});
$response = $callback->process();
header('Content-Type: application/json');
echo json_encode($response);
use MpesaSDK\Callbacks\STKPushCallback;
use App\Models\Transaction;
class MpesaController extends Controller
{
public function handleCallback(Request $request)
{
$callback = new STKPushCallback();
$callback->onSuccess(function($data) {
Transaction::create([
'checkout_request_id' => $data['checkout_request_id'],
'mpesa_receipt_number' => $data['mpesa_receipt_number'],
'amount' => $data['amount'],
'phone_number' => $data['phone_number'],
'status' => 'completed'
]);
\Log::info('Payment successful', $data);
});
$callback->onFailure(function($data) {
Transaction::create([
'checkout_request_id' => $data['checkout_request_id'],
'status' => 'failed',
'failure_reason' => $data['result_desc']
]);
\Log::warning('Payment failed', $data);
});
$response = $callback->process();
return response()->json($response);
}
}
$response = $mpesa->stkPush()->push(
phoneNumber: '254712345678',
amount: 100.00,
accountReference: 'ORDER123',
transactionDescription: 'Payment',
callbackUrl: 'https://yourapp.com/callback'
);
// Quick method
$response = $mpesa->requestPayment(
phoneNumber: '254712345678',
amount: 100.00,
callbackUrl: 'https://yourapp.com/callback'
);
// Controller method
public function initiatePayment(Request $request, MpesaSDK $mpesa)
{
$response = $mpesa->stkPush()->push(
phoneNumber: $request->phone,
amount: $request->amount,
accountReference: $request->reference,
transactionDescription: 'Payment',
callbackUrl: route('mpesa.callback')
);
return response()->json($response->getData());
}
// Using Facade
$response = Mpesa::requestPayment(
phoneNumber: $request->phone,
amount: $request->amount,
callbackUrl: route('mpesa.callback')
);
$response = $mpesa->b2c()->send(
phoneNumber: '254712345678',
amount: 100.00,
commandId: 'BusinessPayment',
remarks: 'Salary payment',
queueTimeoutUrl: 'https://yourapp.com/timeout',
resultUrl: 'https://yourapp.com/result'
);
$response = $mpesa->sendMoney(
phoneNumber: $request->phone,
amount: $request->amount,
remarks: 'Payment',
queueTimeoutUrl: route('mpesa.timeout'),
resultUrl: route('mpesa.result')
);
use MpesaSDK\Utils\Logger;
// Create logger
$logger = new Logger(
logLevel: Logger::LEVEL_INFO,
logFile: 'mpesa.log',
enableConsole: true
);
// Use with SDK
$mpesa = MpesaSDK::sandbox($config, null, $logger);
// Manual logging
$logger->info('Payment initiated', ['amount' => 100]);
$logger->error('Payment failed', ['error' => 'Invalid phone number']);
use MpesaSDK\Exceptions\MpesaException;
use MpesaSDK\Exceptions\ValidationException;
try {
$response = $mpesa->stkPush()->push(
phoneNumber: '254712345678',
amount: 100.00,
accountReference: 'ORDER123',
transactionDescription: 'Payment',
callbackUrl: 'https://yourapp.com/callback'
);
if (!$response->isSuccessful()) {
throw new MpesaException($response->getErrorMessage());
}
} catch (ValidationException $e) {
echo "Validation error: " . $e->getMessage();
} catch (MpesaException $e) {
echo "M-Pesa error: " . $e->getFullErrorMessage();
} catch (Exception $e) {
echo "General error: " . $e->getMessage();
}
bash
php artisan vendor:publish --tag=mpesa-config