steeve/moncash-laravel 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

steeve/moncash-laravel

Composer 安装命令:

composer require steeve/moncash-laravel

包简介

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

README 文档

README

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

  • 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

Installez le package via Composer :

composer require steeve/moncash-laravel

Configuration

1. Publiez le fichier de configuration :

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

2. Variables d'environnement

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)

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

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

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)

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)

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

// 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

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

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

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

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)

$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)

$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

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

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

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

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)

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

1. Installation

Téléchargez Ngrok sur ngrok.com et authentifiez-vous :

ngrok config add-authtoken VOTRE_TOKEN

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

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)

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

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

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

MIT

steeve/moncash-laravel 适用场景与选型建议

steeve/moncash-laravel 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 5 次下载、GitHub Stars 达 0, 最近一次更新时间为 2026 年 02 月 17 日, 在 PHP 生态内属于活跃度较高的组件。

我们在过去多个企业项目中使用过 steeve/moncash-laravel 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 steeve/moncash-laravel 我们能提供哪些服务?
定制开发 / 二次开发

基于 steeve/moncash-laravel 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 5
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 19
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-02-17