WooCommerceWordPress 6.0+ · WooCommerce 8.0+ · PHP 8.1+ · Plugin officiel

Accepter MonCash sur WooCommerce

Le plugin officiel moncashconnect/wordpress-plugin ajoute MonCash comme méthode de paiement au checkout en quelques clics. Une intégration manuelle reste possible pour les développeurs qui veulent contrôler le code.

Sandbox

Commencez en Sandbox

Avant d'implémenter le code ci-dessous avec votre clé live (sk_proj_…), testez d'abord en mode Sandbox avec sk_test_proj_…. Le code est identique — vous ne changez que la valeur de la variable d'environnement. Lisez le Guide Sandbox avant de continuer.

Prérequis

  • WordPress 6.0 ou supérieur
  • WooCommerce 8.0+ (les versions plus anciennes manquent l'API Blocks)
  • PHP 8.1 ou supérieur
  • HTTPS actif (obligatoire — MonCash refuse les webhooks HTTP en clair)
  • Un projet MonCashConnect avec clé secrète sk_proj_… et webhook secret whsec_… créer un projet

Installation du plugin officiel

Trois options pour installer moncashconnect/wordpress-plugin :

Option 1 — Depuis WordPress Admin

Plugins → Add New, rechercher MonCashConnect, cliquer Install Now puis Activate.

Option 2 — Upload du .zip

Téléchargez la dernière release depuis github.com/moncashconnect/wordpress-plugin/releases puis dans WordPress Admin : Plugins → Add New → Upload Plugin.

Option 3 — WP-CLI (recommandé en prod)

wp plugin install https://github.com/moncashconnect/wordpress-plugin/releases/latest/download/moncashconnect.zip \
  --activate

Configuration

  1. Allez dans WooCommerce → Settings → Payments.
  2. Trouvez MonCashConnect dans la liste, cliquez Manage.
  3. Remplissez :
    • Enable / Disable : cocher pour activer.
    • Title : ce que voient les clients (ex : "Payer avec MonCash").
    • Description : texte affiché au checkout.
    • Secret Key : sk_proj_… (ou sk_test_proj_… en test).
    • Webhook Secret : whsec_….
    • Mode : Sandbox ou Live.
  4. Cliquez Save changes.
L'URL du webhook à coller dans le dashboard MCC s'affiche dans l'écran de configuration — typiquement https://votresite.com/wc-api/wc_moncashconnect_webhook.

Intégration manuelle (sans plugin)

Pour les développeurs qui préfèrent contrôler le code (multisite, thème enfant custom, fork du plugin), voici le squelette d'un WC_Payment_Gateway personnalisé. Mettez-le dans wp-content/plugins/my-moncash/my-moncash.php.

<?php
/**
 * Plugin Name: My MonCash Gateway
 * Description: Intégration manuelle MonCashConnect pour WooCommerce
 * Version:     1.0.0
 * Requires Plugins: woocommerce
 */

if (! defined('ABSPATH')) { exit; }

add_action('plugins_loaded', function () {

    if (! class_exists('WC_Payment_Gateway')) { return; }

    class WC_My_MonCash_Gateway extends WC_Payment_Gateway {

        public function __construct() {
            $this->id                 = 'my_moncash';
            $this->method_title       = 'MonCash (manuel)';
            $this->method_description = 'Paiement MonCash via MonCashConnect.';
            $this->has_fields         = false;
            $this->supports           = ['products'];

            $this->init_form_fields();
            $this->init_settings();

            $this->title         = $this->get_option('title');
            $this->description   = $this->get_option('description');
            $this->secret_key    = $this->get_option('secret_key');
            $this->webhook_secret = $this->get_option('webhook_secret');

            add_action('woocommerce_update_options_payment_gateways_' . $this->id,
                [$this, 'process_admin_options']);

            // Webhook endpoint
            add_action('woocommerce_api_wc_my_moncash_webhook',
                [$this, 'handle_webhook']);
        }

        public function init_form_fields() {
            $this->form_fields = [
                'enabled'        => ['title' => 'Activer', 'type' => 'checkbox', 'default' => 'no'],
                'title'          => ['title' => 'Titre',   'type' => 'text',     'default' => 'MonCash'],
                'description'    => ['title' => 'Description', 'type' => 'textarea'],
                'secret_key'     => ['title' => 'Secret Key (sk_proj_…)',        'type' => 'password'],
                'webhook_secret' => ['title' => 'Webhook Secret (whsec_…)',     'type' => 'password'],
            ];
        }

        public function process_payment($order_id) {
            $order = wc_get_order($order_id);

            $body = wp_json_encode([
                'amount'       => (float) $order->get_total(),
                'referenceId'  => (string) $order->get_id(),
                'returnUrl'    => $this->get_return_url($order),
                'customerName' => trim($order->get_billing_first_name() . ' ' . $order->get_billing_last_name()),
                'customerEmail'=> $order->get_billing_email(),
            ]);

            $res = wp_remote_post('https://hvlmeoqyxaguzcujpmit.supabase.co/functions/v1/pay-create', [
                'headers' => [
                    'Authorization' => 'Bearer ' . $this->secret_key,
                    'Content-Type'  => 'application/json',
                ],
                'body'    => $body,
                'timeout' => 20,
            ]);

            if (is_wp_error($res)) {
                wc_add_notice('Erreur MonCashConnect : ' . $res->get_error_message(), 'error');
                return ['result' => 'fail'];
            }

            $data = json_decode(wp_remote_retrieve_body($res), true);
            if (empty($data['paymentUrl'])) {
                wc_add_notice('Réponse MonCashConnect invalide.', 'error');
                return ['result' => 'fail'];
            }

            $order->update_status('pending', 'En attente de MonCash');

            return ['result' => 'success', 'redirect' => $data['paymentUrl']];
        }

        public function handle_webhook() {
            $raw       = file_get_contents('php://input');
            $signature = $_SERVER['HTTP_X_MCC_SIGNATURE'] ?? '';
            $timestamp = $_SERVER['HTTP_X_MCC_TIMESTAMP'] ?? '';

            $expected = hash_hmac('sha256', $timestamp . '.' . $raw, $this->webhook_secret);
            if (! hash_equals($expected, $signature)) {
                status_header(401); exit('bad signature');
            }

            $event = json_decode($raw, true);
            $order = wc_get_order((int) ($event['reference'] ?? 0));
            if (! $order) { status_header(404); exit('order not found'); }

            if (($event['event'] ?? '') === 'payment.completed') {
                if (! $order->is_paid()) {
                    $order->payment_complete();
                    $order->add_order_note('Paiement MonCash confirmé.');
                }
            } elseif (($event['event'] ?? '') === 'payment.failed') {
                $order->update_status('failed', 'Paiement MonCash échoué.');
            }

            status_header(200); exit('ok');
        }
    }

    add_filter('woocommerce_payment_gateways', function ($methods) {
        $methods[] = 'WC_My_MonCash_Gateway';
        return $methods;
    });
});
Lisez file_get_contents('php://input') en premier — accéder à $_POST ou à un parseur JSON avant consomme le stream et invalide la signature HMAC.

Webhook

Le plugin officiel expose son endpoint à l'URL suivante (à coller dans MonCashConnect → Webhooks) :

https://votresite.com/wc-api/wc_moncashconnect_webhook

Pour l'intégration manuelle ci-dessus, l'URL devient :

https://votresite.com/wc-api/wc_my_moncash_webhook

Activez payment.completed et payment.failed dans la configuration du webhook.

Tester en sandbox

  1. Dans la config plugin, mettez Mode = Sandbox et collez vos clés sk_test_proj_….
  2. Créez une commande de test à 10 HTG depuis votre boutique.
  3. Choisissez MonCash au checkout — vous êtes redirigé vers la page sandbox MonCash.
  4. Validez le paiement test ; vérifiez que la commande WooCommerce passe en processing.
  5. Inspectez les logs : WooCommerce → Status → Logs → moncashconnect-*.

Liste de contrôle avant production

Le site est en HTTPS valide (Let's Encrypt suffit)

Les clés sk_test_proj_… ont été remplacées par sk_proj_… dans la configuration plugin

Le mode est passé sur Live dans WooCommerce → Settings → Payments → MonCashConnect

L'URL /wc-api/wc_moncashconnect_webhook (ou _my_moncash_webhook) est configurée dans le dashboard MCC

Le payment.completed marque bien la commande en 'processing' ou 'completed' dans WooCommerce

Un cron WP-Cron sain (vérifier avec wp cron event list) — sinon les emails de confirmation ne partent pas

Vous avez testé un parcours complet en Sandbox avant d'activer Live

FAQ

Le plugin est-il sur le WordPress.org Plugin Directory ?+
Le plugin officiel se télécharge depuis le dépôt GitHub moncashconnect/wordpress-plugin. La version WordPress.org est soumise au cycle de review WP — vérifiez la version la plus récente sur GitHub si vous attendez un correctif urgent.
MonCash apparaît-il au checkout Blocks (Gutenberg) ?+
Oui. Le plugin déclare une integration WooCommerce Blocks via Automattic\WooCommerce\Blocks\Payments — il s'affiche aussi bien au checkout shortcode classique qu'au checkout Blocks introduit dans WC 8.3.
Puis-je l'utiliser sur WooCommerce Subscriptions ?+
Non : MonCash n'expose pas de mécanisme de tokenisation / prélèvement automatique. Le plugin gère uniquement les paiements one-shot. Pour des abonnements, configurez vos clients sur un renouvellement manuel et envoyez-leur un lien de paiement chaque période.
Le webhook ne se déclenche pas — que vérifier ?+
1) L'URL configurée dans MCC est exactement /wc-api/wc_moncashconnect_webhook (avec un slash de fin si votre permalink l'exige). 2) Votre site n'est pas derrière un Basic Auth ou un firewall Cloudflare bloquant les IPs MCC. 3) Le X-MCC-Signature est vérifié — toute désynchro d'horloge serveur (>5min) fait échouer la validation.
Faut-il un compte marchand Digicel séparé ?+
Non. MonCashConnect agit comme passerelle sur l'infrastructure Bazik — un seul compte MCC suffit pour encaisser sur WooCommerce.
Quels frais sont prélevés sur chaque transaction ?+
MonCashConnect facture 0% côté commerçant. Les frais MonCash/Digicel passthrough (Bazik) sont décrits sur la page Tarifs. Aucun markup MCC sur les transactions.