1. Go to this page and download the library: Download elqora/pay 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/ */
elqora / pay example snippets
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Elqora\Pay\Manager\DriverResolver;
use Elqora\Pay\Manager\GatewayManager;
use Elqora\Pay\Manager\GatewayRegistry;
class AppServiceProvider extends ServiceProvider
{
public function register(): void
{
$this->app->singleton(GatewayRegistry::class, fn () => new GatewayRegistry());
$this->app->singleton(DriverResolver::class, fn ($app) =>
new DriverResolver($app->make(GatewayRegistry::class))
);
$this->app->singleton(GatewayManager::class, fn ($app) =>
new GatewayManager($app->make(DriverResolver::class))
);
}
}
use Elqora\Pay\Pay;
use Elqora\Pay\Payload\Common\Amount;
use Elqora\Pay\Payload\Common\Currency;
use Elqora\Pay\Payload\Common\Money;
use Elqora\Pay\Payload\Common\Reference;
use Elqora\Pay\Payload\Requests\PaymentInitiateRequest;
// Resolve driver singleton or via manager
$driver = Pay::via('stripe', $configBag);
$request = new PaymentInitiateRequest(
reference: new Reference('order_9901'),
money: new Money(Amount::from(5000), new Currency('USD')),
customerEmail: '[email protected]',
customerName: 'Jane Doe'
);
$result = $driver->initiatePayment($request);
if ($result->status->value === 'pending' && $result->interaction !== null) {
// Interaction automatically serializes to canonical flat wire format for frontend execution
$wirePayload = $result->interaction->toArray();
/*
[
'type' => 'redirect',
'url' => 'https://checkout.stripe.com/pay/cs_test_123',
'target' => '_self'
]
*/
}
use Elqora\Pay\Payload\Common\BankAccountDestination;
use Elqora\Pay\Payload\Common\IdempotencyKey;
use Elqora\Pay\Payload\Common\Money;
use Elqora\Pay\Payload\Common\PayoutDestination;
use Elqora\Pay\Payload\Common\PayoutSource;
use Elqora\Pay\Payload\Common\PayoutSourceType;
use Elqora\Pay\Payload\Common\Reference;
use Elqora\Pay\Payload\Requests\PayoutRequest;
// 1. Create a strongly-typed destination payload
$bankDestination = new PayoutDestination(
payload: new BankAccountDestination(
accountNumber: '0123456789',
accountName: 'John Doe',
bankCode: '058',
routingNumber: '123456',
providerData: ['nibss_code' => '000013']
)
);
// 2. Define explicit payout source (Virtual Account, Provider Balance, or Balance Account)
$source = new PayoutSource(
type: PayoutSourceType::virtual_account,
sourceId: 'va_987654'
);
// 3. Initiate Payout with explicit IdempotencyKey
$payoutRequest = new PayoutRequest(
reference: new Reference('payout_7711'),
money: Money::from(25000, 'NGN'),
destination: $bankDestination,
source: $source,
idempotencyKey: new IdempotencyKey('idemp_po_7711'),
narration: 'Monthly vendor settlement'
);
$payoutResult = $driver->initiatePayout($payoutRequest);
echo $payoutResult->status->value; // "processing" | "succeeded" | "
use Elqora\Pay\Payload\Common\BulkPayoutItem;
use Elqora\Pay\Payload\Common\MobileMoneyDestination;
use Elqora\Pay\Payload\Common\Money;
use Elqora\Pay\Payload\Common\PayoutDestination;
use Elqora\Pay\Payload\Common\Reference;
use Elqora\Pay\Payload\Requests\BulkPayoutRequest;
$item1 = new BulkPayoutItem(
itemId: 'item_01',
money: Money::from(1500, 'GHS'),
destination: (new PayoutDestination(
payload: new MobileMoneyDestination(phoneNumber: '+233241234567', operator: 'mtn')
))->payload
);
$bulkRequest = new BulkPayoutRequest(
reference: new Reference('batch_2026_07'),
items: [$item1],
title: 'Payroll Batch'
);
$bulkResult = $driver->initiateBulkPayout($bulkRequest);
echo $bulkResult->totalCount; // Total items in batch
echo $bulkResult->successCount; // Successfully processed items
use Elqora\Pay\Payload\Common\BankAccountDestination;
use Elqora\Pay\Payload\Requests\PayoutDestinationResolveRequest;
$resolveRequest = new PayoutDestinationResolveRequest(
destination: new BankAccountDestination(
accountNumber: '0123456789',
bankCode: '058'
)
);
$resolution = $driver->resolvePayoutDestination($resolveRequest);
if ($resolution->resolved) {
echo $resolution->accountName; // "Verified Account Name"
}
use Elqora\Pay\Payload\Common\Country;
use Elqora\Pay\Payload\Common\CustomerIdentity;
use Elqora\Pay\Payload\Common\IdentityIdentifier;
use Elqora\Pay\Payload\Common\Reference;
use Elqora\Pay\Payload\Common\VirtualAccountPurpose;
use Elqora\Pay\Payload\Common\VirtualAccountUsage;
use Elqora\Pay\Payload\Requests\VirtualAccountCreateRequest;
$customer = new CustomerIdentity(
providerCustomerId: 'cus_8899',
name: 'Alice Smith',
email: '[email protected]',
phone: '+2348012345678',
identifiers: [
new IdentityIdentifier(type: 'bvn', value: '22113344556', country: new Country('NG')),
new IdentityIdentifier(type: 'nin', value: '11223344556', country: new Country('NG')),
]
);
$vaRequest = new VirtualAccountCreateRequest(
reference: new Reference('va_req_100'),
ownerKey: 'usr_4455',
purpose: VirtualAccountPurpose::collection,
usage: VirtualAccountUsage::reusable,
customer: $customer
);
$provisionResult = $driver->createVirtualAccount($vaRequest);
echo $provisionResult->status->value; // "active" | "pending"
use Elqora\Pay\Payload\Requests\LedgerQuery;
use Elqora\Pay\Payload\Requests\TransferRequest;
// 1. Get Balance Snapshot
$balance = $driver->getBalance('bal_account_01');
echo $balance->balances->available->toArray()['amount']; // Cleared funds
// 2. Query Accounting Ledger Page
$ledgerPage = $driver->getLedger(new LedgerQuery(accountId: 'bal_account_01', limit: 20));
foreach ($ledgerPage->items as $transaction) {
echo $transaction->direction->value; // "credit" | "debit"
echo $transaction->type->value; // "payment", "payout", "fee", "transfer"
echo $transaction->bookedAt; // Booking ISO timestamp
}
// 3. Internal Account Movement (No outward banking fees)
$transferResult = $driver->transfer(new TransferRequest(
reference: new Reference('xfer_3322'),
sourceAccountId: 'bal_01',
destinationAccountId: 'bal_02',
money: Money::from(500, 'USD')
));
use Elqora\Pay\Payload\Common\CardControls;
use Elqora\Pay\Payload\Common\Currency;
use Elqora\Pay\Payload\Common\Money;
use Elqora\Pay\Payload\Common\Reference;
use Elqora\Pay\Payload\Requests\VirtualCardControlsRequest;
use Elqora\Pay\Payload\Requests\VirtualCardCreateRequest;
// 1. Issue Virtual Card
$card = $driver->createCard(new VirtualCardCreateRequest(
reference: new Reference('card_req_01'),
cardholderName: 'Alice Smith',
currency: new Currency('USD'),
controls: new CardControls(
perTransactionLimit: Money::from(10000, 'USD'),
dailyLimit: Money::from(50000, 'USD'),
allowedMccs: ['5732', '5812']
)
));
// 2. Freeze Card
$frozenCard = $driver->freezeCard($card->id);
// 3. Request PCI-isolated Reveal Token for PAN/CVV display
$revealSession = $driver->createCardRevealSession($card->id);
echo $revealSession->ephemeralToken; // Token used by frontend iframe
use Elqora\Pay\Support\ArrayEventLockStore;
use Elqora\Pay\Support\WebhookDeduplicator;
$deduplicator = new WebhookDeduplicator(new ArrayEventLockStore()); // Or host PSR-16 cache
$result = $deduplicator->executeOnce(
driverKey: 'stripe',
eventId: 'evt_3M2e512eZvKYlo2C0',
callback: function () use ($orderId) {
// Business logic runs exactly once
Order::fulfill($orderId);
return true;
},
ttlSeconds: 86400 // Lock for 24 hours
);
use Elqora\Pay\Contracts\PaymentGatewayCardIssuingContract;
use Elqora\Pay\Contracts\PaymentGatewayManifestProviderContract;
use Elqora\Pay\Contracts\PaymentGatewayPayDriverContract;
use Elqora\Pay\Contracts\PaymentGatewayPayoutsContract;
use Elqora\Pay\Drivers\AbstractPaymentGatewayDriver;
final class StripeDriver extends AbstractPaymentGatewayDriver implements
PaymentGatewayPayDriverContract,
PaymentGatewayPayoutsContract,
PaymentGatewayCardIssuingContract,
PaymentGatewayManifestProviderContract
{
public function driverKey(): string
{
return 'stripe';
}
// Implement contract methods accepting DTOs and returning response DTOs
}
Pay::register('stripe', StripeDriver::class);
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.