A package for mobile money payments in Cameroun.
Only Mtn Cameroon is supported
composer require nkaurelien/momopay
(optional) Add the service provider in config\app.php
providers' => [
#...
\Nkaurelien\Momopay\Providers\MomopayServiceProvider::class,
]
(optional) Add the service facade in config\app.php
aliases' => [
#...
'MomoPay' => \Nkaurelien\Momopay\Facades\MomoPay::class
]
Run publish
php artisan vendor:publish
Run database migration
php artisan migrate
Add config to config/services.php
'mtn' => [
'currency' => env('MTN_MOMO_CURRENCY', 'XAF'),
'go_live' => env('MTN_MOMO_GO_LIVE',false),
'api_key' => env('MTN_MOMO_USER_API_KEY'),
'reference_id' => env('MTN_MOMO_ID'),
'subscription_key' => env('MTN_MOMO_KEY'),
'payment_callback_route' => env('MTN_MOMO_CALLBACK_URL','payment.momo.callback'),
'payment_callback_host' => env('MTN_MOMO_CALLBACK_HOST'),
'notification_email' => env('MTN_MOMO_NOTIFICATION_EMAIL'),
],
Configuration description
reference_id
: is the user idsubscription_key
: is the Ocp-Apim-Subscription-Keytarget_environment
: can be sanbox or mtncameroon (when you go live)
Don't forget to cache the configurations again with the command php artisan config:cache
Route::any('/payment/momo/callback', 'PaymentMomoController@callback')->name('payment.momo.callback');
Route::get('/payment/momo/transaction/{id}', 'PaymentMomoController@getPayment')->name('payment.momo.gettransaction');
First inject the repository class
private $paymentMomoRepository;
public function __construct(PaymentMomoRepository $paymentMomoRepository){ #...
Then consume repository instance to implement your payment logic
$momoRequestToPayDto = new \Nkaurelien\Momopay\Fluent\MomoRequestToPayDto;
$momoRequestToPayDto->amount = 100;
$momoRequestToPayDto->payeeNote = '';
$momoRequestToPayDto->payerMessage = '';
$momoRequestToPayDto->externalId = 'my_product_id';
$momoRequestToPayDto->payer->telephone = '2376XXXXXXXX';
# optional
$momoRequestToPayDto->currency = 'XAF'; // Use EUR when you are in sandbox mode
$refId = \Ramsey\Uuid\Uuid::uuid4()->toString();
$requestToPayResult = $this->paymentMomoRepository->requestToPay($momoRequestToPayDto, $refId);
If you prefer the facade instead of injection then do:
#...
$requestToPayResult = \Nkaurelien\Momopay\Facades\MomoPay::requestToPay($momoRequestToPayDto, $refId);
You can listen to :
- Nkaurelien\Momopay\Events\PaymentFailed is fired after a new verification
- Nkaurelien\Momopay\Events\PaymentSuccessful is fired after a new verification
- Nkaurelien\Momopay\Events\PaymentAccepted (pending) is fired after the success of request to pay or a new verification
To verify transactions do
php artisan momopay:verify-transactions # to verify all transactions
php artisan momopay:verify-transactions [referenceId] # to verify a specific transaction
- Create payment events
- Create payment exceptions class
- Create commands for scheduler and cron jobs
- Create transaction table for re-vefication
- Email notification on payment success
- Add orange money payment method