lomi.
SDKs

SDK PHP

SDK PHP officiel pour l’API de paiement lomi.

SDK PHP

SDK PHP officiel pour l’API de paiement lomi. Compatible Laravel, Symfony, WordPress et PHP 8.0+.

En raison de la structure du dépôt monorepo, le SDK PHP n’est pas publié sur Packagist. Installez-le depuis GitHub avec Composer.

Installation

Ajoutez à votre composer.json :

{
  "repositories": [
    {
      "type": "vcs",
      "url": "https://github.com/lomiafrica/lomi./"
    }
  ],
  "require": {
    "lomi/lomi-sdk": "dev-main#apps/sdks/php"
  }
}

Puis exécutez :

composer install

Démarrage rapide

<?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'));

// Bac à sable / tests
// $config->setHost('https://sandbox.api.lomi.africa');

$apiClient = new ApiClient($config);

Exemples

Lister les clients

<?php
use Lomi\Api\CustomersApi;

$customersApi = new CustomersApi($apiClient);
$customers = $customersApi->listCustomers();

foreach ($customers->getData() as $customer) {
    echo $customer->getId() . ': ' . $customer->getName() . "\n";
}

Créer un client

<?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 'Client créé : ' . $customer->getId();

Créer une session de paiement

<?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);

// Rediriger le client vers le tunnel
header('Location: ' . $session->getUrl());
exit;

Lister les 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()
    );
}

Créer un lien de paiement

<?php
use Lomi\Api\PaymentLinksApi;
use Lomi\Model\PaymentLinksCreate;

$paymentLinksApi = new PaymentLinksApi($apiClient);

$linkData = new PaymentLinksCreate([
    'amount' => 10000,
    'currency' => 'XOF',
    'description' => 'Abonnement Premium',
    'reusable' => true
]);

$link = $paymentLinksApi->createPaymentLink($linkData);
echo 'Partagez ce lien : ' . $link->getUrl();

Gestion des erreurs

<?php
use Lomi\Api\CustomersApi;
use Lomi\ApiException;

$customersApi = new CustomersApi($apiClient);

try {
    $customer = $customersApi->retrieveCustomer('invalid_id');
} catch (ApiException $e) {
    echo 'Erreur API : ' . $e->getCode() . "\n";
    echo 'Message : ' . $e->getMessage() . "\n";
    echo 'Réponse : ' . $e->getResponseBody() . "\n";
}

Intégration Laravel

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':
                // Traiter le paiement
                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']);

Intégration WordPress

<?php
// Dans le functions.php de votre thème ou extension

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') {
        // Traiter le paiement
    }

    return ['received' => true];
}

API disponibles

Classe APIMéthodes
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

Besoin d’aide ?

Sur cette page