1. Go to this page and download the library: Download uzhlaravel/maishapay 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/ */
use Uzhlaravel\Maishapay\Maishapay;
use Uzhlaravel\Maishapay\Models\MaishapayTransaction;
use Uzhlaravel\Maishapay\DataTransferObjects\MobileMoney;
use Uzhlaravel\Maishapay\Exceptions\MaishapayException;
// you can use it as a parameter to a controller method
protected $maishapay;
public function __construct(Maishapay $maishapay)
{
$this->maishapay = $maishapay;
}
// for MOBILEMONEY payment type
// validating the request data
$validatedData = $request->validate([
'amount' => 'lidatedData['amount'],
'currency' => $validatedData['currency'],
'customer_full_name' => $validatedData['customerFullName'],
'customer_email' => $validatedData['customerEmailAddress'],
'wallet_id' => $validatedData['walletID'],
'channel' => $validatedData['channel'],
'transaction_reference'=> 'TXN_' . uniqid(),
'status' => 'PENDING'
]);
//then do the transactin
$mobileMoney = new MobileMoney(
amount: $validatedData['amount'],
currency: $validatedData['currency'],
customerFullName: $validatedData['customerFullName'],
customerEmailAddress: $validatedData['customerEmailAddress'],
provider: $validatedData['provider'],
walletId: $validatedData['walletID'],
transactionReference: $transaction->transaction_reference,
callbackUrl: route('pricing')
);
// Process mobile money payment
$response = $this->maishapay->processMobileMoneyPayment($mobileMoney);
// Parse the response
$responseData = $response->json();
// or you can use implemetation directly in your controller method
$maishapay = new Uzhlaravel\Maishapay\Maishapay();
$response = $this->maishapay->processMobileMoneyPayment($mobileMoney);
...(other code)
use Uzhlaravel\Maishapay\EnhancedMaishapayService;
use Uzhlaravel\Maishapay\Models\MaishapayTransaction;
use Uzhlaravel\Maishapay\DataTransferObjects\MobileMoney;
use Uzhlaravel\Maishapay\Exceptions\MaishapayException;
// you can use it as a parameter to a controller method
protected $maishapay;
public function __construct(
private EnhancedMaishapayService $enhancedMaishapayService,
)
{
}
// validating the request data
$validatedData = $request->validate([
'amount' => 'customerFullName'],
customerEmailAddress: $validatedData['customerEmailAddress'],
provider: $validatedData['provider'],
walletId: $validatedData['walletID'],
transactionReference: $transaction->transaction_reference,
callbackUrl: route('pricing')
);
// Process mobile money payment
$response = $this->enhancedMaishapayService->processMobileMoneyPaymentWithLogging($mobileMoney);
// Parse the response
$responseData = $response->json();
// or you can use implemetation directly in your controller method
$maishapay = new Uzhlaravel\Maishapay\Maishapay();
$response = $this->maishapay->processMobileMoneyPayment($mobileMoney);
...(other code)
//importing the class
use Uzhlaravel\Maishapay\Maishapay;
use Uzhlaravel\Maishapay\Models\MaishapayTransaction;
use Uzhlaravel\Maishapay\DataTransferObjects\MobileMoney;
use Uzhlaravel\Maishapay\Exceptions\MaishapayException;
// you can use it as a parameter to a controller method
// for BANK payment type V2
// validating the request data
$validatedData = $request->validate([
'amount' => 'ent_type' => 'CARD',
'provider' => $validatedData['provider'], //visa or mastercard
'amount' => $validatedData['amount'],
'currency' => $validatedData['currency'],
'customer_full_name' => $validatedData['customerFullName'],
'customer_phone' => $validatedData['customerPhoneNumber'],
'customer_email' => $validatedData['customerEmailAddress'],
'channel' => $validatedData['channel'],
'transaction_reference'=> 'TXN_' . uniqid(),
'status' => 'PENDING'
]);
$cardPayment = new CardPayment(
amount: $validatedData['amount'],
currency: $validatedData['currency'],
customerEmailAddress: $validatedData['customerEmailAddress'],
customerPhoneNumber: $validatedData['customerPhoneNumber'],
provider: $validatedData['provider'],
customerFullName: $validatedData['customerFullName'],
transactionReference: $transaction->transaction_reference,
callbackUrl: route('your-callback-route') // if different from the one in your .env file
);
$response = $this->maishapay->processCardPayment($cardPayment);
$responseData = $response->json();
//make sure to redirect to the payment page :
return redirect($responseData['paymentPage']);
(other code)
//importing the class
use Uzhlaravel\Maishapay\Services\EnhancedMaishapayService ;
use Uzhlaravel\Maishapay\DataTransferObjects\CardPayment;
use Uzhlaravel\Maishapay\Exceptions\MaishapayException;
private EnhancedMaishapayService $enhancedMaishapayService;
$cardPayment = new CardPayment(
amount: $validatedData['amount'],
currency: $validatedData['currency'],
customerEmailAddress: $validatedData['customerEmailAddress'],
customerPhoneNumber: $validatedData['customerPhoneNumber'],
provider: $validatedData['provider'],
customerFullName: $validatedData['customerFullName'],
transactionReference: $transaction->transaction_reference,
callbackUrl: route('your-callback-route') // if different from the one in your .env file
);
$response = $this->enhancedMaishapayService->processCardPaymentWithLogging($cardPayment,true);
$responseData = $response->json();
//make sure to redirect to the payment page :
use Uzhlaravel\Maishapay\Maishapay;
use Uzhlaravel\Maishapay\DataTransferObjects\BusinessToCustomer;
use Uzhlaravel\Maishapay\Exceptions\MaishapayException;
// Inject via constructor or resolve from container
public function __construct(Maishapay $maishapay)
{
$this->maishapay = $maishapay;
}
// Validate request
$validatedData = $request->validate([
'amount' => ' transfer
]);
$b2c = new BusinessToCustomer(
amount: $validatedData['amount'],
currency: $validatedData['currency'],
customerFullName: $validatedData['customer_full_name'],
customerEmailAddress: $validatedData['customer_email'],
provider: $validatedData['provider'],
walletId: $validatedData['wallet_id'],
motif: $validatedData['motif'],
callbackUrl: route('your-callback-route') // optional
);
try {
$response = $this->maishapay->processB2CPayment($b2c);
$responseData = $response->json();
// handle success
} catch (MaishapayException $e) {
// handle error
}
use Uzhlaravel\Maishapay\Services\EnhancedMaishapayService;
use Uzhlaravel\Maishapay\DataTransferObjects\BusinessToCustomer;
use Uzhlaravel\Maishapay\Exceptions\MaishapayException;
public function __construct(private EnhancedMaishapayService $enhancedMaishapayService)
{
}
$b2c = new BusinessToCustomer(
amount: '5000',
currency: 'CDF',
customerFullName: 'Jane Doe',
customerEmailAddress: '[email protected]',
provider: 'AIRTEL',
walletId: '0999000000',
motif: 'Monthly commission payout',
);
$result = $this->enhancedMaishapayService->processB2CPaymentWithLogging($b2c);
// Unlike collection, a B2C transfer resolves synchronously: the API returns
// the final status (SUCCESS or FAILED) in the same response, and the logged
// transaction is updated accordingly straight away.
if ($result['success']) {
$transaction = $result['transaction']; // MaishapayTransaction model (SUCCESS)
$apiResponse = $result['response'];
} else {
// $result['status'] is FAILED when the operator declined the transfer,
// or $result['error'] is set when the request itself could not be sent.
$status = $result['status'] ?? null;
$error = $result['error'] ?? null;
}
$b2c = BusinessToCustomer::create([
'amount' => '5000',
'currency' => 'CDF',
'provider' => 'MTN',
'wallet_id' => '0810000000',
// The following are all optional for B2C:
'customer_full_name' => 'Jane Doe',
'customer_email_address'=> '[email protected]',
'motif' => 'Refund for order #1234',
'callback_url' => 'https://yourapp.com/maishapay/callback',
]);
$response = $this->maishapay->processB2CPayment($b2c);
use Uzhlaravel\Maishapay\Models\MaishapayTransaction;
// All B2C transactions
$b2cTransactions = MaishapayTransaction::b2c()->get();
// B2C stats via EnhancedMaishapayService
$stats = $this->enhancedMaishapayService->getTransactionStats();
// $stats['b2c'] => total B2C transaction count
use Uzhlaravel\Maishapay\Facades\Maishapay;
// By your merchant reference (returns the raw Illuminate HTTP Response)
$response = Maishapay::checkTransactionStatus('MP_ABC123_1700000000');
// ...or by the MaishaPay transaction ID
$response = Maishapay::checkTransactionById(12345);
$status = $response->json('transactionStatus'); // e.g. "SUCCESS", "PENDING", "FAILED"
use Uzhlaravel\Maishapay\Services\EnhancedMaishapayService;
$service = app(EnhancedMaishapayService::class);
// Live status from the endpoint, normalized to PENDING|SUCCESS|FAILED|CANCELLED
$status = $service->getTransactionStatus('MP_ABC123_1700000000');
// Or get the status plus the raw payload
['status' => $status, 'response' => $payload] =
$service->fetchTransactionStatus('MP_ABC123_1700000000');
$transaction = $service->refreshTransactionStatus('MP_ABC123_1700000000');
if ($transaction?->isSuccessful()) {
// fulfil the order
}