PHPackages                             steeve/moncash-laravel - 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. [API Development](/categories/api)
4. /
5. steeve/moncash-laravel

ActiveLibrary[API Development](/categories/api)

steeve/moncash-laravel
======================

Une librairie Laravel pour l'intégration de l'API MonCash Complet (Digicel Haïti).

v1.0.4(4mo ago)05MITPHPPHP ^8.2

Since Feb 17Pushed 4mo agoCompare

[ Source](https://github.com/Steeveht/moncash-laravel)[ Packagist](https://packagist.org/packages/steeve/moncash-laravel)[ RSS](/packages/steeve-moncash-laravel/feed)WikiDiscussions main Synced today

READMEChangelogDependencies (2)Versions (6)Used By (0)

MonCash Laravel Package
=======================

[](#moncash-laravel-package)

Une librairie Laravel robuste et agnostique pour l'intégration de l'API MonCash (Digicel Haïti). Ce package simplifie l'authentification, les paiements, les transferts et la vérification de comptes.

Fonctionnalités
---------------

[](#fonctionnalités)

- **Authentification OAuth 2.0** : Gestion automatique, mise en cache intelligente et rafraîchissement optimisé du token.
- **Paiements** : Création de paiement, gestion des redirections et vérification par ID de transaction ou de commande.
- **Transferts (Business)** : Envoi d'argent P2P, vérification de solde et de statut de transfert.
- **Clients** : Vérification de l'existence et du statut d'un compte MonCash.
- **Agnostique** : Cœur du SDK (`src/Sdk`) indépendant, utilisable hors Laravel (Symfony, PHP pur).
- **Robuste** : Gestion complète des exceptions et configuration flexible (timeouts, lifetime du token).

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

[](#installation)

Installez le package via Composer :

```
composer require steeve/moncash-laravel
```

Configuration
-------------

[](#configuration)

### 1. Publiez le fichier de configuration :

[](#1-publiez-le-fichier-de-configuration-)

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

### 2. Variables d'environnement

[](#2-variables-denvironnement)

Ajoutez vos clés dans votre fichier `.env` :

```
MONCASH_MODE=sandbox
MONCASH_CLIENT_ID=votre_client_id
MONCASH_SECRET=votre_client_secret
```

- **sandbox**: Pour les tests.
- **live**: Pour la production.

### 3. Configuration du Portail MonCash (Business Portal)

[](#3-configuration-du-portail-moncash-business-portal)

Lors de la création de votre application sur le portail MonCash, voici à quoi correspondent les champs pour Laravel :

1. **Business Name** : Le nom de votre entreprise ou boutique.
2. **Website URL** : L'URL de base de votre site (ex: `https://votre-site.com`).
3. **Return URL (Link to receive the payment Notification)** : Votre URL de **Webhook/IPN**.
    - Exemple : `https://votre-site.com/api/moncash/callback`
4. **Alert URL (Thank you page)** : C'est l'URL de redirection **après** le paiement.
    - Exemple : `https://votre-site.com/payment/success`

Important

Assurez-vous que ces URLs sont accessibles publiquement et que votre route de "Return URL" ne bloque pas les requêtes POST (pensez au middleware CSRF).

---

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

[](#utilisation)

Vous pouvez utiliser la Facade `MonCash` ou l'injection de dépendance via la classe `Steeve\MonCashLaravel\MonCash`.

### A. Créer un Paiement (Redirection)

[](#a-créer-un-paiement-redirection)

```
use MonCash;

public function payer(Request $request)
{
    // 1. Créer le paiement (ID commande unique, Montant en Gourdes)
    $payment = MonCash::payment()->createPayment('ORDER-' . time(), 500);

    // 2. Rediriger l'utilisateur vers MonCash
    return redirect($payment['redirect_url']);
}
```

### B. Vérifier un Paiement (Callback / IPN)

[](#b-vérifier-un-paiement-callback--ipn)

Après le paiement, MonCash appelle votre webhook avec un `transactionId`.

```
use MonCash;

public function callback(Request $request)
{
    $transactionId = $request->input('transactionId');

    try {
        $details = MonCash::payment()->verifyByTransactionId($transactionId);

        if ($details['payment']['message'] === 'successful') {
            $payer = $details['payment']['payer'];
            $amount = $details['payment']['cost'];
            return "Merci pour votre paiement de $amount HTG par $payer";
        }
    } catch (\Steeve\MonCashLaravel\Sdk\Exception\MonCashPaymentException $e) {
        return "Erreur : " . $e->getMessage();
    }
}
```

### C. Transfert d'Argent (P2P / Business)

[](#c-transfert-dargent-p2p--business)

```
use MonCash;

try {
    // Numéro (509...), Montant, Description, Référence unique
    $transfert = MonCash::business()->transfert(
        '50937000000', 250, 'Paiement service', 'REF-12345'
    );
} catch (\Steeve\MonCashLaravel\Sdk\Exception\MonCashTransferException $e) {
    return "Echec : " . $e->getMessage();
}
```

### D. Consulter le Solde et Statut

[](#d-consulter-le-solde-et-statut)

```
// Vérifier le solde du compte Business
$balance = MonCash::business()->prefundedBalance();

// Vérifier le statut d'une transaction pré-financée
$status = MonCash::business()->prefundedTransactionStatus('TRANSFER_ID');
```

### E. Vérifier un Compte Client

[](#e-vérifier-un-compte-client)

```
$status = MonCash::customer()->customerStatus('50937000000');
```

Gestion des Erreurs
-------------------

[](#gestion-des-erreurs)

Exceptions spécifiques disponibles :

- `Steeve\MonCashLaravel\Sdk\Exception\MonCashPaymentException`
- `Steeve\MonCashLaravel\Sdk\Exception\MonCashTransferException`
- `Steeve\MonCashLaravel\Sdk\Exception\MonCashException` (Base)

Utilisation hors Laravel (PHP Natif) - Exemple Complet
------------------------------------------------------

[](#utilisation-hors-laravel-php-natif---exemple-complet)

Ce package est conçu pour être "agnostique". Voici comment l'utiliser dans un projet PHP classique avec une base de données (PDO).

### 1. Initialiser le SDK

[](#1-initialiser-le-sdk)

```
require 'vendor/autoload.php';

use Steeve\MonCashLaravel\Sdk\Config;
use Steeve\MonCashLaravel\Sdk\MonCashAuth;
use Steeve\MonCashLaravel\Sdk\MonCashPayment;
use GuzzleHttp\Client;

$config = new Config(Config::MODE_SANDBOX, 'VOTRE_CLIENT_ID', 'VOTRE_SECRET');
$client = new Client();
$auth = new MonCashAuth($config, $client);
$monCashPayment = new MonCashPayment($config, $auth, $client);
```

### 2. Créer une transaction (`checkout.php`)

[](#2-créer-une-transaction-checkoutphp)

```
$orderId = "CMD-" . uniqid();
$amount = 1500;

try {
    $payment = $monCashPayment->createPayment($orderId, $amount);
    $token = $payment['payment_token']['token'];

    // Enregistrement en base de données
    $db = new PDO('mysql:host=localhost;dbname=votre_db', 'root', '');
    $stmt = $db->prepare("INSERT INTO transactions (order_id, amount, payment_token) VALUES (?, ?, ?)");
    $stmt->execute([$orderId, $amount, $token]);

    header('Location: ' . $payment['redirect_url']);
} catch (Exception $e) { echo "Erreur : " . $e->getMessage(); }
```

### 3. Confirmation de paiement (`webhook.php`)

[](#3-confirmation-de-paiement-webhookphp)

```
$transactionId = $_POST['transactionId'] ?? null;
if (!$transactionId) die("Accès refusé.");

try {
    $details = $monCashPayment->verifyByTransactionId($transactionId);
    if ($details['payment']['message'] === 'successful') {
        // Mise à jour de la base de données après vérification
        $db = new PDO('mysql:host=localhost;dbname=votre_db', 'root', '');
        $stmt = $db->prepare("UPDATE transactions SET status = 'SUCCESSFUL' WHERE order_id = ?");
        $stmt->execute([$details['payment']['order_id']]);
    }
} catch (Exception $e) { /* Log error */ }
```

Architecture Headless / API-Only
--------------------------------

[](#architecture-headless--api-only)

Si vous utilisez un frontend séparé (React, Vue, Mobile) :

- Le **Backend** crée le paiement et renvoie l'URL de redirection au **Frontend**.
- Le **Return URL** (MonCash Portal) pointe vers votre **API** (Backend).
- L'**Alert URL** (MonCash Portal) pointe vers votre **Frontend** (React/Vue/Mobile).

Utilisation avec Symfony
------------------------

[](#utilisation-avec-symfony)

Puisque le SDK est agnostique, vous pouvez l'intégrer facilement dans Symfony en déclarant les classes comme services dans votre fichier `config/services.yaml` :

```
# config/services.yaml
services:
  Steeve\MonCashLaravel\Sdk\Config:
    arguments:
      $mode: "%env(MONCASH_MODE)%"
      $clientId: "%env(MONCASH_CLIENT_ID)%"
      $clientSecret: "%env(MONCASH_SECRET)%"

  Steeve\MonCashLaravel\Sdk\MonCashAuth:
    arguments:
      $config: '@Steeve\MonCashLaravel\Sdk\Config'
      $client: '@GuzzleHttp\Client'

  Steeve\MonCashLaravel\Sdk\MonCashPayment:
    arguments:
      $config: '@Steeve\MonCashLaravel\Sdk\Config'
      $auth: '@Steeve\MonCashLaravel\Sdk\MonCashAuth'
      $client: '@GuzzleHttp\Client'

  # Répétez pour MonCashBusiness et MonCashCustomer si nécessaire
```

Ensuite, utilisez l'injection de dépendance dans vos contrôleurs :

```
use Steeve\MonCashLaravel\Sdk\MonCashPayment;

public function pay(MonCashPayment $moncashPayment)
{
    $result = $moncashPayment->createPayment('ORDER-123', 500);
    return $this->redirect($result['redirect_url']);
}
```

Utilisation avec Laravel + Base de données
------------------------------------------

[](#utilisation-avec-laravel--base-de-données)

### 1. Migration

[](#1-migration)

```
Schema::create('orders', function (Blueprint $table) {
    $table->id();
    $table->string('order_id')->unique();
    $table->decimal('amount', 10, 2);
    $table->string('status')->default('pending');
    $table->timestamps();
});
```

### 2. Contrôleur

[](#2-contrôleur)

```
public function checkout() {
    $payment = MonCash::payment()->createPayment('CMD-001', 500);

    Order::create([
        'order_id' => 'CMD-001',
        'amount' => 500,
        'status' => 'pending'
    ]);

    return redirect($payment['redirect_url']);
}

public function callback(Request $request) {
    $details = MonCash::payment()->verifyByTransactionId($request->transactionId);

    if ($details['payment']['message'] === 'successful') {
        Order::where('order_id', $details['payment']['order_id'])
             ->update(['status' => 'success']);
    }
}
```

Tester en local avec Ngrok (Guide de A à Z)
-------------------------------------------

[](#tester-en-local-avec-ngrok-guide-de-a-à-z)

Pour que MonCash puisse envoyer des notifications de paiement à votre ordinateur local, vous devez utiliser un tunnel.

### 1. Installation

[](#1-installation)

Téléchargez Ngrok sur [ngrok.com](https://ngrok.com/) et authentifiez-vous :

```
ngrok config add-authtoken VOTRE_TOKEN
```

### 2. Lancer le tunnel

[](#2-lancer-le-tunnel)

Lancez votre serveur local (ex: port 8000), puis :

```
ngrok http 8000
```

Copiez l'adresse `Forwarding` (ex: `https://a1b2c3d4.ngrok-free.app`).

### 3. Configurer MonCash

[](#3-configurer-moncash)

Dans le portail MonCash Business, utilisez cette adresse pour le **Return URL** :

- Laravel : `https://a1b2c3d4.ngrok-free.app/api/moncash/callback`
- PHP Natif : `https://a1b2c3d4.ngrok-free.app/webhook.php`

### 4. Gérer le CSRF (Laravel)

[](#4-gérer-le-csrf-laravel)

N'oubliez pas d'ajouter votre route callback dans les exceptions du middleware CSRF (`bootstrap/app.php` ou `VerifyCsrfToken.php`).

### Pro Alternative : Cloudflare Tunnel

[](#pro-alternative--cloudflare-tunnel)

Pour une solution 100% gratuite et illimitée sans page d'avertissement : `cloudflared tunnel --url http://localhost:8000`Consultez le guide complet dans `USAGE_GUIDE.md`.

Architecture
------------

[](#architecture)

Le package suit une structure modulaire pour garantir sa flexibilité :

- **`src/Sdk/`** : Logique métier pure, sans aucune dépendance à Laravel.
- **`src/MonCash.php`** : Point d'entrée principal (Wrapper) pour Laravel.
- **`src/MonCashServiceProvider.php`** : Enregistrement automatique du package et de sa configuration.
- **`src/Facades/MonCash.php`** : Facade pour un accès statique élégant.

License
-------

[](#license)

MIT

###  Health Score

36

—

LowBetter than 79% of packages

Maintenance75

Regular maintenance activity

Popularity4

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity51

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

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.

###  Release Activity

Cadence

Every ~0 days

Total

5

Last Release

137d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/427d823af69e3395f6aa5c9ded259e3f688c8fd327d4b71dbf038e1182aebdc9?d=identicon)[Steeveht](/maintainers/Steeveht)

---

Top Contributors

[![Steeveht](https://avatars.githubusercontent.com/u/77685661?v=4)](https://github.com/Steeveht "Steeveht (15 commits)")

### Embed Badge

![Health badge](/badges/steeve-moncash-laravel/health.svg)

```
[![Health](https://phpackages.com/badges/steeve-moncash-laravel/health.svg)](https://phpackages.com/packages/steeve-moncash-laravel)
```

###  Alternatives

[craftcms/cms

Craft CMS

3.6k3.6M3.1k](/packages/craftcms-cms)[tencentcloud/tencentcloud-sdk-php

TencentCloudApi php sdk

3741.3M46](/packages/tencentcloud-tencentcloud-sdk-php)[spatie/laravel-export

Create a static site bundle from a Laravel app

674146.0k6](/packages/spatie-laravel-export)[simplestats-io/laravel-client

Server-side analytics for Laravel that follows the full funnel from visit to registration to payment, attributed to the channel that drove it. Revenue, MRR, churn and ad-spend profit (ROAS/CAC) per channel. GDPR compliant, ad-blocker proof.

5022.0k](/packages/simplestats-io-laravel-client)[eslazarev/wildberries-sdk

Wildberries OpenAPI clients (generated).

273.0k](/packages/eslazarev-wildberries-sdk)[jasara/php-amzn-selling-partner-api

A fluent interface for Amazon's Selling Partner API in PHP

1348.7k1](/packages/jasara-php-amzn-selling-partner-api)

PHPackages © 2026

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