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.
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 secretwhsec_…— 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 \
--activateConfiguration
- Allez dans WooCommerce → Settings → Payments.
- Trouvez MonCashConnect dans la liste, cliquez Manage.
- 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_…(ousk_test_proj_…en test). - Webhook Secret :
whsec_…. - Mode : Sandbox ou Live.
- Cliquez Save changes.
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;
});
});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_webhookPour l'intégration manuelle ci-dessus, l'URL devient :
https://votresite.com/wc-api/wc_my_moncash_webhookActivez payment.completed et payment.failed dans la configuration du webhook.
Tester en sandbox
- Dans la config plugin, mettez Mode = Sandbox et collez vos clés
sk_test_proj_…. - Créez une commande de test à 10 HTG depuis votre boutique.
- Choisissez MonCash au checkout — vous êtes redirigé vers la page sandbox MonCash.
- Validez le paiement test ; vérifiez que la commande WooCommerce passe en processing.
- 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 ?+
MonCash apparaît-il au checkout Blocks (Gutenberg) ?+
Puis-je l'utiliser sur WooCommerce Subscriptions ?+
Le webhook ne se déclenche pas — que vérifier ?+
Faut-il un compte marchand Digicel séparé ?+
Quels frais sont prélevés sur chaque transaction ?+
Lectures recommandées :