# SDK PHP
Source: https://docs.lomi.africa/build/sdks/php

SDK PHP officiel pour l’API de paiement lomi.

***

title: 'SDK PHP'
description: 'SDK PHP officiel pour l’API de paiement lomi.'
------------------------------------------------------------

import { Callout } from '@/components/docs/docs-callout';

# SDK PHP

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

<Callout type="warn">
  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.
</Callout>

## Installation

Ajoutez à votre `composer.json` :

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

Puis exécutez :

```bash
composer install
```

## Démarrage rapide

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

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

$apiClient = new ApiClient($config);
```

## Exemples

### Lister les clients

```php
<?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
<?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
<?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
<?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
<?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
<?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
<?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
<?php
// config/services.php

return [
    // ...
    'lomi' => [
        'api_key' => env('LOMI_SECRET_KEY'),
        'webhook_secret' => env('LOMI_WEBHOOK_SECRET'),
    ],
];
```

### Webhook Controller

```php
<?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
<?php
// routes/web.php

use App\Http\Controllers\LomiWebhookController;

Route::post('/webhook/lomi', [LomiWebhookController::class, 'handle'])
    ->withoutMiddleware(['web', 'csrf']);
```

## Intégration WordPress

```php
<?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 API               | Méthodes                                                                                                                     |
| ------------------------ | ---------------------------------------------------------------------------------------------------------------------------- |
| `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`                                                                              |
| `ChargesApi`             | `createWaveCharge`, `createMtnCharge`, `createCardCharge`, `getCardCharge`, `cancelCardCharge`                               |
| `PaymentRequestsApi`     | `listPaymentRequests`, `createPaymentRequest`, `retrievePaymentRequest`                                                      |
| `DiscountCouponsApi`     | `listDiscountCoupons`, `createDiscountCoupon`, `retrieveDiscountCoupon`, `updateDiscountCoupon`, `deleteDiscountCoupon`      |
| `WebhookDeliveryLogsApi` | `listWebhookDeliveryLogs`, `retrieveWebhookDeliveryLog`                                                                      |
| `WebhooksApi`            | `listWebhooks`, `createWebhook`, `retrieveWebhook`, `updateWebhook`, `deleteWebhook`                                         |

## Besoin d’aide ?

* [Référence API](/api): documentation complète
* [Issues GitHub](https://github.com/lomiafrica/lomi./issues): anomalies
* [Discord](https://discord.gg/yb4FnBmh): communauté
