lomi.
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 install

Quick 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()
    );
}
<?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 ClassMethods
CustomersApilistCustomers, createCustomer, retrieveCustomer, updateCustomer, deleteCustomer
CheckoutSessionsApilistCheckoutSessions, createCheckoutSession, retrieveCheckoutSession, updateCheckoutSession, deleteCheckoutSession
TransactionsApilistTransactions, retrieveTransaction
PaymentLinksApilistPaymentLinks, createPaymentLink, retrievePaymentLink, updatePaymentLink, deletePaymentLink
ProductsApilistProducts, createProduct, retrieveProduct, updateProduct, deleteProduct
SubscriptionsApilistSubscriptions, createSubscription, retrieveSubscription, updateSubscription, deleteSubscription
RefundsApilistRefunds, createRefund, retrieveRefund
PayoutsApilistPayouts, createPayout, retrievePayout
BeneficiaryPayoutsApilistBeneficiaryPayouts, createBeneficiaryPayout, retrieveBeneficiaryPayout
PaymentRequestsApilistPaymentRequests, createPaymentRequest, retrievePaymentRequest
DiscountCouponsApilistDiscountCoupons, createDiscountCoupon, retrieveDiscountCoupon, updateDiscountCoupon, deleteDiscountCoupon
WebhookDeliveryLogsApilistWebhookDeliveryLogs, retrieveWebhookDeliveryLog
WebhooksApilistWebhooks, createWebhook, retrieveWebhook, updateWebhook, deleteWebhook

Need help?

On this page