SDKs
PHP SDK
Official PHP SDK for lomi. payments API.
PHP SDK
Official PHP SDK for the lomi. payments API. Works with Laravel, Symfony, WordPress, and any PHP 8.0+ application.
Due to our monorepo structure, the PHP SDK is not available on Packagist. Install directly from GitHub using Composer.
Installation
Add to your composer.json:
{
"repositories": [
{
"type": "vcs",
"url": "https://github.com/lomiafrica/lomi./"
}
],
"require": {
"lomi/lomi-sdk": "dev-main#apps/sdks/php"
}
}Then run:
composer installQuick start
<?php
require_once 'vendor/autoload.php';
use Lomi\Configuration;
use Lomi\ApiClient;
use Lomi\Api\CustomersApi;
$config = Configuration::getDefaultConfiguration()
->setApiKey('X-API-KEY', getenv('LOMI_API_KEY'));
// For sandbox/testing
// $config->setHost('https://sandbox.api.lomi.africa');
$apiClient = new ApiClient($config);Examples
List customers
<?php
use Lomi\Api\CustomersApi;
$customersApi = new CustomersApi($apiClient);
$customers = $customersApi->listCustomers();
foreach ($customers->getData() as $customer) {
echo $customer->getId() . ': ' . $customer->getName() . "\n";
}Create a customer
<?php
use Lomi\Api\CustomersApi;
use Lomi\Model\CustomersCreate;
$customersApi = new CustomersApi($apiClient);
$customerData = new CustomersCreate([
'name' => 'Aminata Touré',
'email' => 'aminata@example.com',
'phone_number' => '+2210712345678'
]);
$customer = $customersApi->createCustomer($customerData);
echo 'Created customer: ' . $customer->getId();Create a checkout session
<?php
use Lomi\Api\CheckoutSessionsApi;
use Lomi\Model\CheckoutSessionsCreate;
$checkoutApi = new CheckoutSessionsApi($apiClient);
$sessionData = new CheckoutSessionsCreate([
'amount' => 5000, // 5,000 F CFA
'currency' => 'XOF',
'success_url' => 'https://yoursite.com/success',
'cancel_url' => 'https://yoursite.com/cancel',
'metadata' => ['order_id' => 'order_123']
]);
$session = $checkoutApi->createCheckoutSession($sessionData);
// Redirect customer to checkout
header('Location: ' . $session->getUrl());
exit;List transactions
<?php
use Lomi\Api\TransactionsApi;
$transactionsApi = new TransactionsApi($apiClient);
$transactions = $transactionsApi->listTransactions();
foreach ($transactions->getData() as $tx) {
echo sprintf(
"%s: %d %s - %s\n",
$tx->getId(),
$tx->getAmount(),
$tx->getCurrency(),
$tx->getStatus()
);
}Create a payment link
<?php
use Lomi\Api\PaymentLinksApi;
use Lomi\Model\PaymentLinksCreate;
$paymentLinksApi = new PaymentLinksApi($apiClient);
$linkData = new PaymentLinksCreate([
'amount' => 10000,
'currency' => 'XOF',
'description' => 'Premium subscription',
'reusable' => true
]);
$link = $paymentLinksApi->createPaymentLink($linkData);
echo 'Share this link: ' . $link->getUrl();Error handling
<?php
use Lomi\Api\CustomersApi;
use Lomi\ApiException;
$customersApi = new CustomersApi($apiClient);
try {
$customer = $customersApi->retrieveCustomer('invalid_id');
} catch (ApiException $e) {
echo 'API Error: ' . $e->getCode() . "\n";
echo 'Message: ' . $e->getMessage() . "\n";
echo 'Response: ' . $e->getResponseBody() . "\n";
}Laravel integration
Service Provider
<?php
// app/Providers/LomiServiceProvider.php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Lomi\Configuration;
use Lomi\ApiClient;
class LomiServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->singleton(ApiClient::class, function () {
$config = Configuration::getDefaultConfiguration()
->setApiKey('X-API-KEY', config('services.lomi.api_key'));
return new ApiClient($config);
});
}
}Config
<?php
// config/services.php
return [
// ...
'lomi' => [
'api_key' => env('LOMI_API_KEY'),
'webhook_secret' => env('LOMI_WEBHOOK_SECRET'),
],
];Webhook Controller
<?php
// app/Http/Controllers/LomiWebhookController.php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class LomiWebhookController extends Controller
{
public function handle(Request $request)
{
$signature = $request->header('x-lomi-signature');
$secret = config('services.lomi.webhook_secret');
$payload = $request->getContent();
$expectedSignature = hash_hmac('sha256', $payload, $secret);
if (!hash_equals($expectedSignature, $signature)) {
return response()->json(['error' => 'Invalid signature'], 400);
}
$event = $request->all();
switch ($event['type']) {
case 'PAYMENT_SUCCEEDED':
// Handle payment
break;
}
return response()->json(['received' => true]);
}
}Routes
<?php
// routes/web.php
use App\Http\Controllers\LomiWebhookController;
Route::post('/webhook/lomi', [LomiWebhookController::class, 'handle'])
->withoutMiddleware(['web', 'csrf']);WordPress integration
<?php
// In your plugin or theme functions.php
add_action('rest_api_init', function () {
register_rest_route('lomi/v1', '/webhook', [
'methods' => 'POST',
'callback' => 'handle_lomi_webhook',
'permission_callback' => '__return_true',
]);
});
function handle_lomi_webhook(WP_REST_Request $request) {
$signature = $request->get_header('x-lomi-signature');
$secret = get_option('lomi_webhook_secret');
$payload = $request->get_body();
$expected = hash_hmac('sha256', $payload, $secret);
if (!hash_equals($expected, $signature)) {
return new WP_Error('invalid_signature', 'Invalid signature', ['status' => 400]);
}
$event = $request->get_json_params();
if ($event['type'] === 'PAYMENT_SUCCEEDED') {
// Handle payment
}
return ['received' => true];
}Available APIs
| API Class | Methods |
|---|---|
CustomersApi | listCustomers, createCustomer, retrieveCustomer, updateCustomer, deleteCustomer |
CheckoutSessionsApi | listCheckoutSessions, createCheckoutSession, retrieveCheckoutSession, updateCheckoutSession, deleteCheckoutSession |
TransactionsApi | listTransactions, retrieveTransaction |
PaymentLinksApi | listPaymentLinks, createPaymentLink, retrievePaymentLink, updatePaymentLink, deletePaymentLink |
ProductsApi | listProducts, createProduct, retrieveProduct, updateProduct, deleteProduct |
SubscriptionsApi | listSubscriptions, createSubscription, retrieveSubscription, updateSubscription, deleteSubscription |
RefundsApi | listRefunds, createRefund, retrieveRefund |
PayoutsApi | listPayouts, createPayout, retrievePayout |
BeneficiaryPayoutsApi | listBeneficiaryPayouts, createBeneficiaryPayout, retrieveBeneficiaryPayout |
PaymentRequestsApi | listPaymentRequests, createPaymentRequest, retrievePaymentRequest |
DiscountCouponsApi | listDiscountCoupons, createDiscountCoupon, retrieveDiscountCoupon, updateDiscountCoupon, deleteDiscountCoupon |
WebhookDeliveryLogsApi | listWebhookDeliveryLogs, retrieveWebhookDeliveryLog |
WebhooksApi | listWebhooks, createWebhook, retrieveWebhook, updateWebhook, deleteWebhook |
Need help?
- API Reference - Full API documentation
- GitHub Issues - Report bugs
- Discord - Community support