PHPackages                             elbrahms/ipaymoney - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. elbrahms/ipaymoney

ActiveLibrary

elbrahms/ipaymoney
==================

Un package Laravel complet pour intégrer la passerelle de paiement iPay Money (Mobile Money &amp; Carte) en Afrique de l'Ouest.

00PHPCI failing

Since Jul 31Pushed todayCompare

[ Source](https://github.com/Elbrahms05/ipaymoney)[ Packagist](https://packagist.org/packages/elbrahms/ipaymoney)[ RSS](/packages/elbrahms-ipaymoney/feed)WikiDiscussions main Synced today

READMEChangelogDependenciesVersions (1)Used By (0)

iPay Money pour Laravel
=======================

[](#ipay-money-pour-laravel)

[![Tests](https://github.com/elbrahms/ipaymoney/actions/workflows/tests.yml/badge.svg)](https://github.com/elbrahms/ipaymoney/actions/workflows/tests.yml)

Un package Laravel **complet** pour intégrer la passerelle de paiement [iPay Money](https://i-pay.money) (Mobile Money &amp; Carte bancaire) en Afrique de l'Ouest - Niger, Bénin, et autres pays de la zone XOF.

- ✅ Création de paiements (Mobile Money &amp; Carte)
- ✅ Consultation du statut d'une transaction
- ✅ Réception &amp; vérification des **webhooks** (signature `secret-hash`)
- ✅ Événements Laravel (`PaymentSucceeded`, `PaymentFailed`, `WebhookReceived`)
- ✅ **Persistance des transactions** (modèle + migration, mise à jour auto par webhook)
- ✅ **Commande Artisan** de test d'intégration (`php artisan ipaymoney:test`)
- ✅ Bouton de **checkout** front-end (SDK JavaScript)
- ✅ Environnements **sandbox** et **live**
- ✅ Façade, auto-discovery, config publiable, tests inclus

---

Installation
------------

[](#installation)

```
composer require elbrahms/ipaymoney
```

Le package utilise l'auto-discovery Laravel. Publiez ensuite la configuration :

```
php artisan vendor:publish --tag=ipaymoney-config
```

Pour activer la persistance des transactions (optionnelle), publiez et exécutez la migration :

```
php artisan vendor:publish --tag=ipaymoney-migrations
php artisan migrate
```

### Variables d'environnement

[](#variables-denvironnement)

Ajoutez à votre fichier `.env` :

```
IPAYMONEY_ENVIRONMENT=sandbox           # sandbox | live
IPAYMONEY_SECRET_KEY=sk_xxxxxxxxxxxxx   # clé secrète (côté serveur)
IPAYMONEY_PUBLIC_KEY=pk_xxxxxxxxxxxxx   # clé publique (front / checkout)
IPAYMONEY_COUNTRY=NE                    # NE (Niger), BJ (Bénin), ...
IPAYMONEY_CURRENCY=XOF
IPAYMONEY_PAYMENT_TYPE=mobile           # mobile | card

# Webhook
IPAYMONEY_WEBHOOK_ENABLED=true
IPAYMONEY_WEBHOOK_PATH=ipaymoney/webhook
IPAYMONEY_WEBHOOK_SECRET=sk_xxxxxxxxxxxxx   # le "Secret Hash" du dashboard

# Persistance des transactions (optionnelle)
IPAYMONEY_RECORD_TRANSACTIONS=true
IPAYMONEY_TABLE=ipaymoney_transactions
```

> ⚠️ Ne partagez **jamais** votre clé secrète et ne la committez pas.

Vos clés sont disponibles dans votre dashboard iPay Money : **Développeurs → Clés API**.

---

Utilisation
-----------

[](#utilisation)

### 1. Créer un paiement Mobile Money, MyNIta ou Amanata

[](#1-créer-un-paiement-mobile-money-mynita-ou-amanata)

```
use IPayMoney\Laravel\Facades\IPayMoney;
use IPayMoney\Laravel\Data\PaymentRequest;

$payment = IPayMoney::requestPayment(
    PaymentRequest::make()
        ->amount(1000)                 // montant > 100
        ->msisdn('40410000000')        // numéro du client
        ->transactionId('CMD-'.$order->id) // référence unique de VOTRE côté
        ->customerName('Amadou Diallo')
        ->country('NE')                // optionnel (défaut: config)
        ->mobile()                     // ->card() pour une carte
        //->MyNIta()
        //->Amanata()

);

if ($payment->isSuccessful()) {
    // Conservez la référence iPay Money pour le suivi
    $order->update(['ipay_reference' => $payment->reference]);
}
```

Vous pouvez aussi passer un simple tableau :

```
$payment = IPayMoney::requestPayment([
    'amount' => 1000,
    'msisdn' => '40410000000',
    'transaction_id' => 'CMD-42',
    'customer_name' => 'Amadou Diallo',
    'payment_type' => 'mobile',
]);
```

**Réponse** (`PaymentResponse`) :

PropriétéDescription`status`Enum `PaymentStatus` (succeeded/failed/pending)`reference`La référence générée par iPay Money`externalReference`Votre `transaction_id``msisdn`Le numéro du client`isSuccessful()``true` si `succeeded``isFailed()``true` si `failed``isPending()``true` si `pending`### 2. Consulter le statut d'un paiement

[](#2-consulter-le-statut-dun-paiement)

```
$status = IPayMoney::getPaymentStatus('vslfxgawkpkm');

if ($status->isSuccessful()) {
    // ...
}
```

### 3. Forcer un environnement à la volée

[](#3-forcer-un-environnement-à-la-volée)

```
IPayMoney::usingEnvironment('live')->requestPayment(...);
```

---

Webhooks
--------

[](#webhooks)

iPay Money notifie votre serveur du résultat final d'une transaction. Le package enregistre **automatiquement** une route protégée par la vérification de signature.

- **URL par défaut** : `POST /ipaymoney/webhook` (nommée `ipaymoney.webhook`)
- **Vérification** : l'en-tête `secret-hash` est comparé, en temps constant, à `config('ipaymoney.webhook.secret_hash')`.

Configurez cette URL dans votre dashboard iPay Money (**Développeurs → Webhooks**) et renseignez votre **Secret Hash**.

> Excluez ce chemin de la protection CSRF (`VerifyCsrfToken`) - c'est déjà le cas si vous conservez le middleware `api` par défaut.

### Écouter les événements

[](#écouter-les-événements)

Dans un `EventServiceProvider` :

```
use IPayMoney\Laravel\Events\PaymentSucceeded;
use IPayMoney\Laravel\Events\PaymentFailed;

protected $listen = [
    PaymentSucceeded::class => [
        \App\Listeners\MarkOrderAsPaid::class,
    ],
    PaymentFailed::class => [
        \App\Listeners\NotifyPaymentFailure::class,
    ],
];
```

Exemple de listener :

```
use IPayMoney\Laravel\Events\PaymentSucceeded;

class MarkOrderAsPaid
{
    public function handle(PaymentSucceeded $event): void
    {
        $payment = $event->payment; // PaymentResponse

        Order::where('reference', $payment->externalReference)
            ->update([
                'status' => 'paid',
                'ipay_reference' => $payment->reference,
            ]);
    }
}
```

L'événement `WebhookReceived` est émis pour **toute** notification vérifiée (idéal pour la journalisation).

---

Checkout front-end (SDK JavaScript)
-----------------------------------

[](#checkout-front-end-sdk-javascript)

Pour un paiement redirigé (bouton de paiement iPay Money) dans une vue Blade :

```
{!! IPayMoney::checkout()
        ->amount(1000)
        ->transactionId('CMD-42')
        ->redirectUrl(route('checkout.done'))
        ->callbackUrl(route('ipaymoney.webhook'))
        ->label('Payer 1 000 XOF')
        ->button() !!}

{{-- Avant  --}}
{!! IPayMoney::checkout()->script() !!}
```

Rendu généré :

```

    Payer 1 000 XOF

```

---

Sandbox : numéros de test
-------------------------

[](#sandbox--numéros-de-test)

En environnement `sandbox`, utilisez ces numéros pour simuler les scénarios :

MSISDNScénario`40410000000`Succès`40410000001`Succès`40410000002`Erreur`40410000003`Erreur`40410000004`Fonds insuffisants`40410000005`Fonds insuffisants`40410000006`Refusé`40410000007`Refusé`40410000008`En attente (180 s)`40410000009`En attente (180 s)---

Persistance des transactions
----------------------------

[](#persistance-des-transactions)

Le package peut enregistrer automatiquement chaque paiement en base de données via le modèle `IPayMoneyTransaction`.

Activez-la avec `IPAYMONEY_RECORD_TRANSACTIONS=true` (après avoir publié et exécuté la migration). Dès lors :

- `IPayMoney::requestPayment(...)` crée une ligne (statut `pending`) puis la met à jour avec la réponse de l'API.
- Les **webhooks** retrouvent la transaction (par `reference` puis `transaction_id`) et synchronisent son statut ainsi que `paid_at`.

```
use IPayMoney\Laravel\Models\IPayMoneyTransaction;

// Retrouver une transaction
$tx = IPayMoneyTransaction::where('transaction_id', 'CMD-42')->first();

$tx->isSuccessful();  // bool
$tx->status;          // Enum PaymentStatus
$tx->reference;       // référence iPay Money
$tx->amount;          // decimal
$tx->paid_at;         // Carbon|null
$tx->meta;            // dernier payload brut (array)
```

Table `ipaymoney_transactions` (colonnes principales) :

ColonneDescription`transaction_id`Votre référence (unique)`reference`Référence générée par iPay Money`status``pending` / `succeeded` / `failed``payment_type``mobile` / `myNita` / `amanata` / `card``environment``sandbox` / `live``amount`, `currency`, `country`Montant et localisation`customer_name`, `msisdn`Infos client`meta`Dernier payload brut (JSON)`paid_at`Horodatage du succès> La persistance est **tolérante aux pannes** : toute erreur de base de données est journalisée sans jamais faire échouer un paiement ni un webhook.

Le modèle est aussi utilisable manuellement, même sans activer l'option `record`, si vous préférez gérer l'enregistrement vous-même.

---

Commande Artisan de test d'intégration
--------------------------------------

[](#commande-artisan-de-test-dintégration)

Validez votre configuration de bout en bout (config → paiement sandbox → statut) sans écrire une ligne de code :

```
php artisan ipaymoney:test
```

Options :

```
php artisan ipaymoney:test \
    --msisdn=40410000004 \   # scénario "fonds insuffisants"
    --amount=250 \
    --type=mobile \          # mobile | myNita | amanata | card
    --no-status              # ne pas consulter le statut après création
```

La commande :

1. vérifie la présence des clés (les affiche masquées) et l'environnement ;
2. crée un paiement de test avec une référence unique auto-générée ;
3. consulte le statut renvoyé et affiche un résumé coloré.

> En mode `live`, la commande demande une confirmation avant de lancer un **vrai** paiement.

---

Gestion des erreurs
-------------------

[](#gestion-des-erreurs)

```
use IPayMoney\Laravel\Exceptions\PaymentException;
use IPayMoney\Laravel\Exceptions\ConfigurationException;

try {
    IPayMoney::requestPayment(...);
} catch (PaymentException $e) {
    $e->getMessage();  // message renvoyé par l'API
    $e->statusCode;    // code HTTP
    $e->response();    // corps brut décodé
} catch (ConfigurationException $e) {
    // clé secrète manquante, etc.
}
```

---

Injection de dépendance
-----------------------

[](#injection-de-dépendance)

La façade est pratique, mais vous pouvez aussi résoudre le client :

```
use IPayMoney\Laravel\IPayMoney;

public function pay(IPayMoney $ipay)
{
    return $ipay->requestPayment(...);
}
```

---

Tests
-----

[](#tests)

```
composer install
composer test
```

---

Référence API
-------------

[](#référence-api)

OpérationMéthode HTTPEndpointCréer un paiement`POST``/api/v1/payments`Statut d'un paiement`GET``/api/v1/payments/{reference}`En-têtes envoyés : `Authorization: Bearer {clé secrète}`, `Ipay-Payment-Type`, `Ipay-Target-Environment`, `Content-Type: application/json`.

---

Licence
-------

[](#licence)

MIT. Voir [LICENSE.md](LICENSE.md).

###  Health Score

20

—

LowBetter than 12% of packages

Maintenance65

Regular maintenance activity

Popularity0

Limited adoption so far

Community2

Small or concentrated contributor base

Maturity11

Early-stage or recently created project

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/2d134c0629df5291e25d0107322927708e215a477a9253eba3ad2508f6dd3356?d=identicon)[elbrahms](/maintainers/elbrahms)

### Embed Badge

![Health badge](/badges/elbrahms-ipaymoney/health.svg)

```
[![Health](https://phpackages.com/badges/elbrahms-ipaymoney/health.svg)](https://phpackages.com/packages/elbrahms-ipaymoney)
```

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
