PHP code example of monnify / monnify-laravel
1. Go to this page and download the library: Download monnify/monnify-laravel 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/ */
monnify / monnify-laravel example snippets
use Monnify\MonnifyLaravel\Facades\Monnify;
// In your checkout controller
$response = Monnify::transactions()->initialise([
'amount' => 5000.00,
'customerEmail' => '[email protected] ',
'paymentReference' => 'ORDER-' . uniqid(), // must be unique per transaction
'currencyCode' => 'NGN',
'contractCode' => config('monnify.contract_code'),
'redirectUrl' => route('payment.callback'),
]);
return redirect($response['body']['responseBody']['checkoutUrl']);
// In your callback controller
public function callback(Request $request)
{
$reference = $request->query('paymentReference');
$result = Monnify::transactions()->statusByReference($reference, 'payment');
$status = $result['body']['responseBody']['paymentStatus'] ?? null;
if ($status === 'PAID') {
// Payment confirmed server-side — safe to fulfil the order
}
}
[
'status' => 200, // HTTP status code from Monnify
'body' => [ ... ], // The parsed response data from Monnify
]
[
'status' => 400,
'error' => [ ... ], // Error details returned by Monnify
]
$response = Monnify::transactions()->initialise($data);
if ($response['status'] === 200) {
$checkoutUrl = $response['body']['responseBody']['checkoutUrl'];
return redirect($checkoutUrl);
}
// Something went wrong
logger()->error('Monnify error', $response['error'] ?? []);
use Exception;
use Monnify\MonnifyLaravel\Facades\Monnify;
try {
$response = Monnify::transactions()->initialise($data);
} catch (InvalidArgumentException $e) {
// A json(['message' => 'Payment service unavailable'], 503);
}
$signature = $request->header('monnify-signature');
$expected = hash_hmac('sha512', $request->getContent(), config('monnify.secret_key'));
if (! hash_equals($expected, $signature)) {
return response()->json(['message' => 'Invalid signature'], 401);
}
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class MonnifyWebhookController extends Controller
{
public function handle(Request $request)
{
// Verify the signature
$signature = $request->header('monnify-signature');
$expected = hash_hmac('sha512', $request->getContent(), config('monnify.secret_key'));
if (! hash_equals($expected, $signature)) {
return response()->json(['message' => 'Invalid signature'], 401);
}
$eventType = $request->input('eventType');
$eventData = $request->input('eventData');
// Return 200 immediately, then process — prevents Monnify from resending
// due to a timeout caused by slow downstream logic.
match ($eventType) {
'SUCCESSFUL_TRANSACTION' => ProcessPayment::dispatch($eventData),
'SUCCESSFUL_DISBURSEMENT' => ProcessDisbursement::dispatch($eventData),
'FAILED_DISBURSEMENT' => HandleFailedDisbursement::dispatch($eventData),
'SUCCESSFUL_REFUND' => ProcessRefund::dispatch($eventData),
'SETTLEMENT' => ProcessSettlement::dispatch($eventData),
default => null,
};
return response()->json(['message' => 'Webhook received'], 200);
}
}
// routes/web.php
Route::post('/webhooks/monnify', [MonnifyWebhookController::class, 'handle'])
->name('monnify.webhook');
// Laravel 11+ — bootstrap/app.php
->withMiddleware(function (Middleware $middleware) {
$middleware->validateCsrfTokens(except: [
'webhooks/monnify',
]);
})
// Laravel 10 and below — app/Http/Middleware/VerifyCsrfToken.php
protected $except = [
'webhooks/monnify',
];
use Monnify\MonnifyLaravel\Facades\Monnify;
Monnify::transactions()->initialise($data);
Monnify::transactions()->payWithBankTransfer($data);
Monnify::transactions()->chargeCard($data);
Monnify::transactions()->authorizeOTP($data);
Monnify::transactions()->authorizeThreeDSCard($data);
Monnify::transactions()->all($parameters);
Monnify::transactions()->status($transactionReference);
Monnify::transactions()->statusByReference($reference, $referenceType);
$response = Monnify::transactions()->initialise([
'amount' => 5000.00,
'customerName' => 'Jane Doe',
'customerEmail' => '[email protected] ',
'paymentReference' => 'ORDER-' . uniqid(), // must be unique per transaction, you can also change the prefix from ORDER- to anything else.
'paymentDescription' => 'Payment for Order #1042',
'currencyCode' => 'NGN',
'contractCode' => config('monnify.contract_code'),
'redirectUrl' => 'https://yoursite.com/payment/callback', //this tells the package where to redirect on successful completion
'paymentMethods' => ['CARD', 'ACCOUNT_TRANSFER'], // optional
]);
// Redirect the customer to Monnify's checkout page
return redirect($response['body']['responseBody']['checkoutUrl']);
$response = Monnify::transactions()->payWithBankTransfer([
'transactionReference' => 'MONNIFY_TXN_REF', // from initialise() response
'bankCode' => '058', // optional — specific bank
]);
$response = Monnify::transactions()->chargeCard([
'transactionReference' => 'MONNIFY_TXN_REF',
'collectionChannel' => 'API_NOTIFICATION',
'card' => [
'number' => '4111111111111111',
'pin' => '1234',
'expiryMonth' => '10',
'expiryYear' => '2029',
'cvv' => '123',
],
]);
$response = Monnify::transactions()->authorizeOTP([
'transactionReference' => 'MONNIFY_TXN_REF',
'collectionChannel' => 'API_NOTIFICATION',
'tokenId' => 'TOKEN_ID_FROM_CHARGE_RESPONSE',
'token' => '123456',
]);
$response = Monnify::transactions()->authorizeThreeDSCard([
'transactionReference' => 'MONNIFY_TXN_REF',
'collectionChannel' => 'API_NOTIFICATION',
'card' => [
'number' => '4111111111111111',
'pin' => '1234',
'expiryMonth' => '10',
'expiryYear' => '31',
'cvv' => '100',
],
'apiKey' => config('monnify.api_key'),
'deviceInformation' => [
// Collect these from the customer's browser using JavaScript
'httpBrowserLanguage' => 'en-US', // navigator.language
'httpBrowserJavaEnabled' => false, // navigator.javaEnabled()
'httpBrowserJavaScriptEnabled' => true, // always true if JS is running
'httpBrowserColorDepth' => '24', // screen.colorDepth
'httpBrowserScreenHeight' => '900', // screen.height
'httpBrowserScreenWidth' => '1440', // screen.width
'httpBrowserTimeDifference' => '-60', // new Date().getTimezoneOffset()
'userAgentBrowserValue' => 'Mozilla/5.0', // navigator.userAgent
],
]);
$response = Monnify::transactions()->all([
'page' => 0,
'size' => 20,
'paymentStatus' => 'PAID', // optional filter
'customerEmail' => '[email protected] ', // optional filter
]);
// By Monnify transaction reference
$response = Monnify::transactions()->status('MONNIFY_TXN_REF');
// By your own payment or transaction reference
$response = Monnify::transactions()->statusByReference('ORDER-123', 'payment');
// $referenceType is either 'transaction' (default) or 'payment'
Monnify::customerReservedAccount()->createGeneralAccount($data);
Monnify::customerReservedAccount()->createInvoiceAccount($data);
Monnify::customerReservedAccount()->get($accountReference);
Monnify::customerReservedAccount()->addLinkedAccounts($accountReference, $data);
Monnify::customerReservedAccount()->updateBVN($accountReference, $bvn);
Monnify::customerReservedAccount()->updateKYCInfo($accountReference, $data);
Monnify::customerReservedAccount()->allowedPaymentSource($accountReference, $data);
Monnify::customerReservedAccount()->updateSplitConfig($accountReference, $data);
Monnify::customerReservedAccount()->deallocateAccount($accountReference);
Monnify::customerReservedAccount()->transactions($accountReference, $parameters);
$response = Monnify::customerReservedAccount()->createGeneralAccount([
'accountReference' => 'CUSTOMER-001', // your unique reference for this account
'accountName' => 'Jane Doe',
'currencyCode' => 'NGN',
'contractCode' => config('monnify.contract_code'),
'customerEmail' => '[email protected] ',
'customerName' => 'Jane Doe',
'getAllAvailableBanks' => true,
// 'preferredBanks' => ['035', '058'], // optional — pick specific banks
// 'bvn' => '12345678901', // optional
]);
$response = Monnify::customerReservedAccount()->createInvoiceAccount([
'contractCode' => config('monnify.contract_code'),
'accountName' => 'Jane Doe',
'currencyCode' => 'NGN',
'accountReference' => 'INVOICE-ACCT-001',
'customerEmail' => '[email protected] ',
'reservedAccountType' => 'INVOICE',
// 'customerName' => 'Jane Doe', // optional
// 'bvn' => '12345678901', // optional
]);
$response = Monnify::customerReservedAccount()->get('CUSTOMER-001');
$response = Monnify::customerReservedAccount()->addLinkedAccounts('CUSTOMER-001', [
'getAllAvailableBanks' => true,
// 'preferredBanks' => ['044'], // optional
]);
$response = Monnify::customerReservedAccount()->updateBVN('CUSTOMER-001', '12345678901');
$response = Monnify::customerReservedAccount()->updateKYCInfo('CUSTOMER-001', [
'bvn' => '12345678901',
'nin' => '00000000000', // optional if bvn is provided
]);
$response = Monnify::customerReservedAccount()->allowedPaymentSource('CUSTOMER-001', [
'restrictPaymentSource' => true,
'allowedPaymentSources' => [
'bvns' => ['12345678901', '09876543210'],
],
]);
$response = Monnify::customerReservedAccount()->updateSplitConfig('CUSTOMER-001', [
[
'subAccountCode' => 'MFY_SUB_305040939040',
'feePercentage' => 10.50,
'splitPercentage' => 30.00,
'feeBearer' => true,
],
]);
$response = Monnify::customerReservedAccount()->transactions('CUSTOMER-001', [
'page' => 0,
'size' => 10,
]);
$response = Monnify::customerReservedAccount()->deallocateAccount('CUSTOMER-001');
Monnify::invoice()->create($data);
Monnify::invoice()->get($invoiceReference);
Monnify::invoice()->all();
Monnify::invoice()->cancel($invoiceReference);
Monnify::invoice()->attachReservedAccount($data);
$response = Monnify::invoice()->create([
'amount' => 15000.00,
'customerName' => 'Jane Doe',
'customerEmail' => '[email protected] ',
'expiryDate' => '2025-12-31 23:59:59',
'invoiceReference' => 'INV-' . uniqid(),
'description' => 'Subscription - Pro Plan',
'currencyCode' => 'NGN',
'contractCode' => config('monnify.contract_code'),
// 'redirectUrl' => 'https://yoursite.com/invoice/callback', // optional
// 'incomeSplitConfig' => [], // optional
]);
$response = Monnify::invoice()->get('INV-6630abc');
$response = Monnify::invoice()->all();
$response = Monnify::invoice()->cancel('INV-6630abc');
$response = Monnify::invoice()->attachReservedAccount([
'amount' => 15000.00,
'invoiceReference' => 'INV-6630abc',
'accountReference' => 'CUSTOMER-001',
'description' => 'Subscription - Pro Plan',
'currencyCode' => 'NGN',
'contractCode' => config('monnify.contract_code'),
'customerEmail' => '[email protected] ',
'customerName' => 'Jane Doe',
'expiryDate' => '2025-12-31 23:59:59',
]);
Monnify::transfer()->single($data, $asynchronous);
Monnify::transfer()->authoriseSingle($data);
Monnify::transfer()->resendOTP($reference);
Monnify::transfer()->singleStatus($reference);
Monnify::transfer()->bulk($data);
Monnify::transfer()->authoriseBulk($data);
Monnify::transfer()->bulkResendOTP($reference);
Monnify::transfer()->bulkStatus($batchReference, $pageSize, $pageNumber);
Monnify::transfer()->bulkBatchSummary($batchReference);
Monnify::transfer()->bulkTransaction($batchReference, $pageSize, $pageNumber);
Monnify::transfer()->all($type, $pageSize, $pageNumber);
Monnify::transfer()->search($sourceAccountNumber, $pageSize, $pageNumber);
Monnify::transfer()->walletBalance($accountNumber);
$response = Monnify::transfer()->single([
'amount' => 5000.00,
'reference' => 'TXN-' . uniqid(), // your unique reference
'narration' => 'Salary - May 2025',
'destinationBankCode' => '058',
'destinationAccountNumber'=> '0123456789',
'destinationAccountName' => 'John Doe',
'currency' => 'NGN',
'sourceAccountNumber' => config('monnify.account_number'),
], $asynchronous = false);
$response = Monnify::transfer()->authoriseSingle([
'reference' => 'TXN-abc123',
'authorizationCode' => '123456', // OTP sent to your registered email
]);
$response = Monnify::transfer()->resendOTP('TXN-abc123');
$response = Monnify::transfer()->singleStatus('TXN-abc123');
$response = Monnify::transfer()->bulk([
'title' => 'May 2025 Salaries',
'batchReference' => 'BATCH-' . uniqid(),
'narration' => 'Monthly salary payment',
'sourceAccountNumber' => config('monnify.account_number'),
'onValidationFailure' => 'CONTINUE', // CONTINUE or BREAK
'notificationInterval'=> 25, // notify after every 25% of transactions
'transactionList' => [
[
'amount' => 50000.00,
'reference' => 'SAL-EMP001',
'narration' => 'Salary - John',
'destinationBankCode' => '058',
'destinationAccountNumber' => '0123456789',
'currency' => 'NGN',
],
[
'amount' => 75000.00,
'reference' => 'SAL-EMP002',
'narration' => 'Salary - Mary',
'destinationBankCode' => '033',
'destinationAccountNumber' => '9876543210',
'currency' => 'NGN',
],
],
]);
$response = Monnify::transfer()->authoriseBulk([
'reference' => 'BATCH-abc123',
'authorizationCode' => '123456',
]);
$response = Monnify::transfer()->bulkResendOTP('BATCH-abc123');
$response = Monnify::transfer()->bulkStatus('BATCH-abc123', $pageSize = 10, $pageNumber = 0);
$response = Monnify::transfer()->bulkBatchSummary('BATCH-abc123');
// List single transfers
$response = Monnify::transfer()->all('single', $pageSize = 10, $pageNumber = 0);
// List bulk transfers
$response = Monnify::transfer()->all('bulk', $pageSize = 10, $pageNumber = 0);
$response = Monnify::transfer()->search(
config('monnify.account_number'),
$pageSize = 10,
$pageNumber = 0
);
$response = Monnify::transfer()->walletBalance(config('monnify.account_number'));
Monnify::wallet()->create($data);
Monnify::wallet()->get($customerEmail, $pageSize, $pageNumber);
Monnify::wallet()->balance($accountNumber);
Monnify::wallet()->transactions($accountNumber, $pageSize, $pageNumber);
$response = Monnify::wallet()->create([
'customerEmail' => '[email protected] ',
'customerName' => 'Jane Doe',
'bvnDetails' => [
'bvn' => '22222222226',
'bvnDateOfBirth' => '1994-09-07',
],
]);
$response = Monnify::wallet()->get('[email protected] ', $pageSize = 10, $pageNumber = 0);
$response = Monnify::wallet()->balance('0123456789');
$response = Monnify::wallet()->transactions('0123456789', $pageSize = 10, $pageNumber = 0);
Monnify::verificationAPI()->bankAccount($accountNumber, $bankCode);
Monnify::verificationAPI()->bvnInformation($data);
Monnify::verificationAPI()->matchBVNAndBankAccount($bvn, $bankCode, $accountNumber);
Monnify::verificationAPI()->nin($nin);
$response = Monnify::verificationAPI()->bankAccount('0123456789', '058');
$accountName = $response['body']['responseBody']['accountName'];
$response = Monnify::verificationAPI()->bvnInformation([
'bvn' => '12345678901',
'name' => 'Jane Doe',
'dateOfBirth' => '1990-01-15', // YYYY-MM-DD
'mobileNo' => '08012345678',
]);
$response = Monnify::verificationAPI()->matchBVNAndBankAccount(
'12345678901', // BVN
'058', // bank code
'0123456789' // account number
);
$response = Monnify::verificationAPI()->nin('00000000000');
Monnify::subAccount()->create($data);
Monnify::subAccount()->all();
Monnify::subAccount()->update($data);
Monnify::subAccount()->delete($subAccountCode);
$response = Monnify::subAccount()->create([
[
'bankCode' => '058',
'accountNumber' => '0123456789',
'email' => '[email protected] ',
'currencyCode' => 'NGN',
'defaultSplitPercentage' => 20.00,
],
]);
$response = Monnify::subAccount()->all();
$response = Monnify::subAccount()->update([
'subAccountCode' => 'MFY_SUB_305040939040',
'bankCode' => '033',
'accountNumber' => '9876543210',
'email' => '[email protected] ',
'currencyCode' => 'NGN',
'defaultSplitPercentage' => 25.00,
]);
$response = Monnify::subAccount()->delete('MFY_SUB_305040939040');
Monnify::refund()->initialise($data);
Monnify::refund()->status($refundReference);
Monnify::refund()->all($pageSize, $pageNumber);
$response = Monnify::refund()->initialise([
'transactionReference' => 'MONNIFY_TXN_REF', // original transaction
'refundReference' => 'REFUND-' . uniqid(), // your unique refund reference
'refundReason' => 'Customer request',
'refundAmount' => 5000.00,
'customerNote' => 'Refund processed within 3 business days',
// 'destinationAccountNumber' => '0123456789', // optional — defaults to original payer
// 'destinationAccountBankCode' => '058', // optional
]);
$response = Monnify::refund()->status('REFUND-abc123');
$response = Monnify::refund()->all($pageSize = 10, $pageNumber = 0);
Monnify::settlements()->transactions($settlementReference, $pageSize, $pageNumber);
Monnify::settlements()->getByTransaction($transactionReference);
$response = Monnify::settlements()->transactions('SETTLEMENT-REF', $pageSize = 10, $pageNumber = 0);
$response = Monnify::settlements()->getByTransaction('MONNIFY_TXN_REF');
Monnify::limitProfile()->all();
Monnify::limitProfile()->create($data);
Monnify::limitProfile()->update($limitProfileCode, $data);
Monnify::limitProfile()->reserveAccount($data);
Monnify::limitProfile()->updateReserveAccount($accountReference, $limitProfileCode);
$response = Monnify::limitProfile()->all();
$response = Monnify::limitProfile()->create([
'limitProfileName' => 'Tier 1 - Unverified',
'singleTransactionLimit'=> 50000.00,
'dailyTransactionLimit' => 200000.00,
'dailyTransactionVolume'=> 5,
]);
$response = Monnify::limitProfile()->update('LIMIT-PROFILE-CODE', [
'limitProfileName' => 'Tier 1 - Upgraded',
'singleTransactionLimit'=> 100000.00,
'dailyTransactionLimit' => 500000.00,
'dailyTransactionVolume'=> 10,
]);
$response = Monnify::limitProfile()->reserveAccount([
'accountReference' => 'CUSTOMER-001',
'limitProfileCode' => 'LIMIT-PROFILE-CODE',
'contractCode' => config('monnify.contract_code'),
'accountName' => 'Jane Doe',
]);
$response = Monnify::limitProfile()->updateReserveAccount('CUSTOMER-001', 'LIMIT-PROFILE-CODE');
Monnify::payCodeAPI()->create($data);
Monnify::payCodeAPI()->get($payCodeReference);
Monnify::payCodeAPI()->getUnMasked($payCodeReference);
Monnify::payCodeAPI()->history($parameters);
Monnify::payCodeAPI()->delete($payCodeReference);
$response = Monnify::payCodeAPI()->create([
'amount' => 10000.00,
'paycodeReference' => 'PAYCODE-' . uniqid(),
'beneficiaryName' => 'John Doe',
'clientId' => 'YOUR_CLIENT_ID',
'expiryDate' => '2025-12-31',
]);
// Masked (safe to display)
$response = Monnify::payCodeAPI()->get('PAYCODE-abc123');
// Unmasked (full code — handle with care)
$response = Monnify::payCodeAPI()->getUnMasked('PAYCODE-abc123');
$response = Monnify::payCodeAPI()->history([
'transactionReference' => '', // optional
'beneficiaryName' => '', // optional
'transactionStatus' => 'PAID', // optional
'from' => '2025-01-01',
'to' => '2025-05-31',
]);
$response = Monnify::payCodeAPI()->delete('PAYCODE-abc123');
Monnify::directDebitMandate()->create($data);
Monnify::directDebitMandate()->get($mandateReference);
Monnify::directDebitMandate()->debit($data);
Monnify::directDebitMandate()->status($paymentReference);
Monnify::directDebitMandate()->cancel($mandateCode);
$response = Monnify::directDebitMandate()->create([
'contractCode' => config('monnify.contract_code'),
'mandateReference' => 'MANDATE-' . uniqid(),
'customerName' => 'Jane Doe',
'customerPhoneNumber' => '08012345678',
'customerEmailAddress' => '[email protected] ',
'customerAddress' => '12 Example Street, Lagos',
'customerAccountNumber' => '0123456789',
'customerAccountBankCode'=> '058',
'mandateDescription' => 'Monthly subscription fee',
'mandateStartDate' => '2025-06-01T00:00:00',
'mandateEndDate' => '2026-06-01T00:00:00',
// 'autoRenew' => false, // optional
// 'customerCancellation'=> true, // optional — allow customer to cancel
// 'customerAccountName' => 'Jane Doe', // optional
]);
$response = Monnify::directDebitMandate()->get('MANDATE-abc123');
$response = Monnify::directDebitMandate()->debit([
'mandateCode' => 'MONNIFY_MANDATE_CODE', // from create response
'amount' => 5000.00,
'paymentReference' => 'PAY-' . uniqid(),
'narration' => 'June 2025 subscription',
'customerEmail' => '[email protected] ',
]);
$response = Monnify::directDebitMandate()->status('PAY-abc123');
$response = Monnify::directDebitMandate()->cancel('MONNIFY_MANDATE_CODE');
Monnify::recurringPayment()->chargeCardToken($data);
$response = Monnify::recurringPayment()->chargeCardToken([
'cardToken' => 'MNFY_TOKEN_FROM_REQUERY', // stored from requery after first charge
'amount' => 5000.00,
'customerEmail' => '[email protected] ',
'paymentReference' => 'RECUR-' . uniqid(),
'contractCode' => config('monnify.contract_code'),
'apiKey' => config('monnify.api_key'),
// 'customerName' => 'Jane Doe', // optional
// 'paymentDescription' => 'Monthly plan', // optional
// 'currencyCode' => 'NGN', // optional
]);
Monnify::billsPayment()->categories($pageSize, $pageNumber);
Monnify::billsPayment()->billers($categoryCode, $pageSize, $pageNumber);
Monnify::billsPayment()->products($billerCode, $pageSize, $pageNumber);
Monnify::billsPayment()->validateCustomer($data);
Monnify::billsPayment()->vend($data);
Monnify::billsPayment()->requery($vendReference);
$response = Monnify::billsPayment()->categories();
// Example categories: ELECTRICITY, CABLE_TV, AIRTIME, DATA, BETTING, EDUCATION
// All billers
$response = Monnify::billsPayment()->billers();
// Billers in a specific category
$response = Monnify::billsPayment()->billers('ELECTRICITY');
$response = Monnify::billsPayment()->products('IKEDC');
// Returns the available payment packages/plans for that biller
$validation = Monnify::billsPayment()->validateCustomer([
'productCode' => 'IKEDC_PREPAID', // from products() response
'customerId' => '1234567890', // meter number / decoder ID / betting ID
]);
$customerName = $validation['body']['responseBody']['customerName'];
$
$response = Monnify::billsPayment()->vend([
'productCode' => 'IKEDC_PREPAID',
'customerId' => '1234567890',
'vendAmount' => 5000.00,
'vendReference' => 'BILL-' . uniqid(), // your unique reference for this transaction
// Include this only if validateCustomer() returned
$response = Monnify::billsPayment()->requery('BILL-abc123');
use Monnify\MonnifyLaravel\Facades\Monnify;
// 1. Validate the customer's meter number
$validation = Monnify::billsPayment()->validateCustomer([
'productCode' => 'IKEDC_PREPAID',
'customerId' => '45210012345',
]);
if ($validation['status'] !== 200) {
return response()->json(['message' => 'Invalid meter number'], 422);
}
$validationBody = $validation['body']['responseBody'];
$validationReference = $validationBody['validationReference'] ?? null;
// 2. Process the payment
$vend = Monnify::billsPayment()->vend([
'productCode' => 'IKEDC_PREPAID',
'customerId' => '45210012345',
'vendAmount' => 5000.00,
'vendReference' => 'BILL-' . uniqid(),
'validationReference' => $validationReference,
]);
$status = $vend['body']['responseBody']['vendStatus'];
// 3. Handle IN_PROGRESS status
if ($status === 'IN_PROGRESS') {
// The vend is still processing. In production, dispatch a queued job
// that calls requery() after a short delay instead of blocking here.
$vend = Monnify::billsPayment()->requery($vend['body']['responseBody']['vendReference']);
$status = $vend['body']['responseBody']['vendStatus'];
}
if ($status === 'SUCCESSFUL') {
$token = $vend['body']['responseBody']['token']; // electricity token to give the customer
return response()->json(['token' => $token]);
}
return response()->json(['message' => 'Bill payment failed'], 400);
Monnify::helper()->banks(); // All banks supported by Monnify
Monnify::helper()->banksWithUSSD(); // Banks that support USSD payment collection
bash
php artisan vendor:publish --provider="Monnify\MonnifyLaravel\MonnifyServiceProvider"