PHP code example of prevailexcel / laravel-fincra
1. Go to this page and download the library: Download prevailexcel/laravel-fincra 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/ */
prevailexcel / laravel-fincra example snippets
'providers' => [
...
PrevailExcel\Fincra\FincraServiceProvider::class,
...
]
'aliases' => [
...
'Fincra' => PrevailExcel\Fincra\Facades\Fincra::class,
...
]
return [
/**
* Public Key From Fincra Dashboard
*/
'publicKey' => getenv('FINCRA_PUBLIC_KEY'),
/**
* Secret Key From Fincra Dashboard
*/
'secretKey' => getenv('FINCRA_SECRET_KEY'),
/**
* Business ID From Fincra Dashboard
*/
'businessId' => getenv('FINCRA_BUSINESS_ID'),
/**
* Webhook Secret for verifying webhooks
*/
'webhookSecret' => getenv('FINCRA_WEBHOOK_SECRET'),
/**
* Environment: sandbox or live
*/
'env' => env('FINCRA_ENV', 'sandbox'),
/**
* Fincra Sandbox URL
*/
'sandboxUrl' => env('FINCRA_SANDBOX_URL', 'https://sandboxapi.fincra.com'),
/**
* Fincra Live URL
*/
'liveUrl' => env('FINCRA_LIVE_URL', 'https://api.fincra.com'),
];
Route::post('/pay', [PaymentController::class, 'redirectToGateway'])->name('pay');
Route::callback(PaymentController::class, 'handleGatewayCallback');
Route::webhook(WebhookController::class, 'handleWebhook');
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use PrevailExcel\Fincra\Facades\Fincra;
class PaymentController extends Controller
{
/**
* Display checkout widget
*/
public function redirectToGateway()
{
try {
return Fincra::payWithWidget();
} catch (\Exception $e) {
return redirect()->back()->withMessage([
'msg' => $e->getMessage(),
'type' => 'error'
]);
}
}
/**
* Handle callback from widget
*/
public function handleGatewayCallback()
{
$paymentDetails = fincra()->getPaymentData();
// Process payment details
// Mark order as paid, send email, etc.
dd($paymentDetails);
}
}
public function redirectToGateway()
{
try {
$data = [
'amount' => request()->amount,
'currency' => 'NGN',
'customer' => [
'name' => request()->name,
'email' => request()->email,
'phoneNumber' => request()->phoneNumber,
],
'paymentMethods' => ['card', 'bank_transfer', 'payattitude'],
'feeBearer' => 'customer',
'reference' => uniqid('ref_'),
'redirectUrl' => route('payment.callback'),
];
return Fincra::checkoutRedirect($data)->redirectNow();
// Or for API, return the link:
// return Fincra::checkoutRedirect($data, true);
} catch (\Exception $e) {
return back()->with('error', $e->getMessage());
}
}
// Create Temporary Virtual Account
$data = [
'currency' => 'NGN',
'accountType' => 'individual',
'accountName' => 'John Doe',
'bvn' => '12345678901', // Required for Nigerian accounts
'meansOfId' => [
[
'type' => 'identityCard',
'number' => 'A1234567890',
]
],
];
$virtualAccount = Fincra::createVirtualAccount($data);
// Create Permanent Virtual Account
$data['isPermanent'] = true;
$permanentAccount = Fincra::createVirtualAccount($data);
// Get all virtual accounts
$accounts = Fincra::getVirtualAccounts();
// Get single virtual account
$account = Fincra::getVirtualAccount($virtualAccountId);
// Get virtual account requests
$requests = Fincra::getVirtualAccountRequests();
$data = [
'sourceCurrency' => 'NGN',
'destinationCurrency' => 'NGN',
'amount' => 10000,
'business' => config('fincra.businessId'),
'description' => 'Payment for services',
'beneficiary' => [
'firstName' => 'John',
'lastName' => 'Doe',
'email' => '[email protected]',
'phoneNumber' => '+2348012345678',
'accountHolderName' => 'John Doe',
'accountNumber' => '1234567890',
'type' => 'individual',
'bankCode' => '058', // GTBank
'country' => 'NG',
],
'paymentDestination' => 'bank_account',
];
$payout = Fincra::initiatePayout($data);
// Get all payouts
$payouts = Fincra::getPayouts();
// Get single payout
$payout = Fincra::getPayout($payoutId);
// Get payout by reference
$payout = Fincra::getPayoutByReference($reference);
// Create beneficiary
$data = [
'firstName' => 'John',
'lastName' => 'Doe',
'email' => '[email protected]',
'phoneNumber' => '+2348012345678',
'accountHolderName' => 'John Doe',
'bank' => [
'name' => 'GTBank',
'code' => '058',
'accountNumber' => '1234567890',
],
'type' => 'individual',
'currency' => 'NGN',
'paymentDestination' => 'bank_account',
'destinationAddress' => 'Lagos, Nigeria',
];
$beneficiary = Fincra::createBeneficiary($data);
// Get all beneficiaries
$beneficiaries = Fincra::getBeneficiaries();
// Get single beneficiary
$beneficiary = Fincra::getBeneficiary($beneficiaryId);
// Update beneficiary
$updated = Fincra::updateBeneficiary($beneficiaryId, $data);
// Delete beneficiary
$deleted = Fincra::deleteBeneficiary($beneficiaryId);
$verification = Fincra::verifyBvn($bvn);
$data = [
'accountNumber' => '1234567890',
'bankCode' => '058',
];
$verification = Fincra::verifyBankAccount($data);
$verification = Fincra::verifyIban($iban);
$binInfo = Fincra::resolveBin($bin);
// Get balance
$balance = Fincra::getBalance();
// Get balance by currency
$balance = Fincra::getBalance('NGN');
// Get all transactions
$transactions = Fincra::getTransactions();
// Get single transaction
$transaction = Fincra::getTransaction($transactionId);
// Create conversion quote
$data = [
'sourceCurrency' => 'NGN',
'destinationCurrency' => 'USD',
'amount' => 100000,
];
$quote = Fincra::createConversion($data);
// Get conversion rate
$rate = Fincra::getConversionRate('NGN', 'USD');
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class WebhookController extends Controller
{
public function handleWebhook()
{
// Verify and get webhook data
fincra()->getWebhookData()->processData(function ($data) {
// Process the webhook data
logger('Fincra Webhook:', $data);
$event = $data['event'] ?? null;
switch ($event) {
case 'charge.successful':
// Handle successful charge
$this->handleSuccessfulCharge($data);
break;
case 'charge.failed':
// Handle failed charge
$this->handleFailedCharge($data);
break;
case 'payout.successful':
// Handle successful payout
$this->handleSuccessfulPayout($data);
break;
case 'virtual_account.credited':
// Handle virtual account credit
$this->handleVirtualAccountCredit($data);
break;
}
// Dispatch queued jobs for heavy operations
// ProcessPaymentJob::dispatch($data);
});
// Acknowledge receipt
return response()->json(['status' => 'success'], 200);
}
protected function handleSuccessfulCharge($data)
{
// Your logic here
}
}
protected $except = [
'fincra/webhook',
];
Fincra::payWithWidget(?array $data);
Fincra::checkoutRedirect(?array $data, bool $returnLink = false);
Fincra::verifyPayment(?string $reference);
Fincra::getPaymentData();
Fincra::createVirtualAccount(array $data);
Fincra::getVirtualAccounts();
Fincra::getVirtualAccount(string $id);
Fincra::getVirtualAccountRequests();
Fincra::updateVirtualAccount(string $id, array $data);
Fincra::deleteVirtualAccount(string $id);
Fincra::initiatePayout(array $data);
Fincra::getPayouts();
Fincra::getPayout(string $id);
Fincra::getPayoutByReference(string $reference);
Fincra::cancelPayout(string $id);
Fincra::createBeneficiary(array $data);
Fincra::getBeneficiaries();
Fincra::getBeneficiary(string $id);
Fincra::updateBeneficiary(string $id, array $data);
Fincra::deleteBeneficiary(string $id);
Fincra::verifyBvn(string $bvn);
Fincra::verifyBankAccount(array $data);
Fincra::verifyIban(string $iban);
Fincra::resolveBin(string $bin);
Fincra::getBalance(?string $currency);
Fincra::getTransactions();
Fincra::getTransaction(string $id);
Fincra::createConversion(array $data);
Fincra::getConversions();
Fincra::getConversionRate(string $from, string $to);
Fincra::getWebhookData();
Fincra::getBanks(?string $country);
Fincra::getCurrencies();
Fincra::getCountries();
bash
php artisan vendor:publish --provider="PrevailExcel\Fincra\FincraServiceProvider"