Intégrer MonCash avec WordPress
Ce guide montre comment intégrer les paiements MonCash directement dans WordPress sans WooCommerce, en utilisant les fonctions natives wp_remote_post() et l'API REST WordPress pour les webhooks. Pour WooCommerce, consultez la section dédiée plus bas.
Commencez en Sandbox
Avant d'implémenter le code ci-dessous avec votre clé live (sk_proj_…), nous recommandons de tester 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+
- PHP 8.0+
- Un projet MonCashConnect avec clé secrète — créer un projet
- HTTPS activé sur votre site (obligatoire pour les webhooks)
Configuration
Stockez les clés en tant qu'options WordPress (dans le tableau de bord sous Réglages → MonCashConnect, ou directement via wp_options). Ne les mettez jamais en dur dans le code source.
<?php
// Une seule fois, pour sauvegarder les clés (page de réglages ou wp-cli)
update_option('mcc_secret_key', 'sk_proj_xxxx', false); // false = non autoloaded
update_option('mcc_webhook_secret', 'whsec_xxxx', false);
// Pour lire les clés dans le code
$secret_key = get_option('mcc_secret_key');
$webhook_secret = get_option('mcc_webhook_secret');wp-config.php : define('MCC_SECRET_KEY', 'sk_proj_…'); puis les lire avec MCC_SECRET_KEY.Créer un paiement
Ajoutez dans functions.php de votre thème (ou dans un plugin personnalisé) :
<?php
/**
* Lance un paiement MonCash et redirige vers la page de paiement.
*
* @param int $amount Montant en HTG
* @param string $reference Référence unique de la commande
* @param string $return_url URL de retour après paiement
*/
function mcc_initiate_payment(int $amount, string $reference, string $return_url): void {
$secret_key = get_option('mcc_secret_key');
$response = wp_remote_post('https://hvlmeoqyxaguzcujpmit.supabase.co/functions/v1/pay-create', [
'headers' => [
'Authorization' => 'Bearer ' . $secret_key,
'Content-Type' => 'application/json',
],
'body' => wp_json_encode([
'amount' => $amount,
'referenceId' => $reference,
'returnUrl' => $return_url,
]),
'timeout' => 20,
]);
if (is_wp_error($response)) {
wp_die('Erreur réseau : ' . $response->get_error_message());
}
$code = wp_remote_retrieve_response_code($response);
$data = json_decode(wp_remote_retrieve_body($response), true);
if ($code !== 200 || empty($data['paymentUrl'])) {
$error = $data['error'] ?? "Erreur API ($code)";
wp_die(esc_html($error));
}
wp_redirect($data['paymentUrl']);
exit;
}
// Exemple d'utilisation depuis un shortcode ou une page template :
// mcc_initiate_payment(500, 'commande_' . get_the_ID(), home_url('/payment-return/'));Endpoint webhook via REST API WordPress
Enregistrez un endpoint REST WordPress pour recevoir les webhooks MonCashConnect. Ajoutez dans functions.php :
<?php
add_action('rest_api_init', function () {
register_rest_route('moncashconnect/v1', '/webhook', [
'methods' => 'POST',
'callback' => 'mcc_handle_webhook',
'permission_callback' => '__return_true', // Auth via signature HMAC
]);
});
function mcc_handle_webhook(WP_REST_Request $request): WP_REST_Response {
$raw_body = $request->get_body();
$signature = $request->get_header('x_mcc_signature') ?? '';
$timestamp = $request->get_header('x_mcc_timestamp') ?? '';
if (!mcc_verify_webhook($raw_body, $signature, $timestamp)) {
return new WP_REST_Response(['error' => 'Invalid signature'], 401);
}
$event = json_decode($raw_body, true);
if ($event['event'] === 'payment.completed') {
// Mettez à jour votre BDD ici
// update_post_meta($order_id, '_mcc_status', 'paid');
do_action('mcc_payment_completed', $event['reference'], $event);
} elseif ($event['event'] === 'payment.failed') {
do_action('mcc_payment_failed', $event['reference'], $event);
}
return new WP_REST_Response(['ok' => true], 200);
}https://votresite.com/wp-json/moncashconnect/v1/webhookVérifier la signature HMAC
Ajoutez la fonction de vérification dans functions.php :
<?php
function mcc_verify_webhook(string $raw_body, string $signature, string $timestamp): bool {
if (empty($raw_body) || empty($signature) || empty($timestamp)) {
return false;
}
// Rejeter les webhooks de plus de 5 minutes (protection anti-replay)
if (abs(time() - (int) $timestamp) > 300) {
return false;
}
$secret = get_option('mcc_webhook_secret');
$expected = 'sha256=' . hash_hmac('sha256', $raw_body, $secret);
// hash_equals() est résistant aux attaques par timing
return hash_equals($expected, $signature);
}$request->get_body() (pas file_get_contents('php://input')) pour garantir que vous lisez le corps brut non modifié.Avec WooCommerce
Si vous utilisez WooCommerce, installez directement le plugin officiel MonCashConnect. Il gère automatiquement la création de paiement, la vérification de signature webhook et la mise à jour du statut de commande WooCommerce.
Plugin WooCommerce MonCashConnect
1. Téléchargez le plugin depuis GitHub → packages/wordpress-plugin
2. Installez-le dans Extensions → Ajouter → Téléverser
3. Configurez via WooCommerce → Réglages → Paiements → MonCashConnect
# Clé secrète : sk_proj_… (Développeur → Projets)
# Webhook secret : whsec_… (Développeur → Projets → Webhooks)
# URL webhook auto : /wc-api/WC_Gateway_MonCashConnect/Liste de contrôle avant mise en production
Les clés sont stockées dans wp_options (non autoloaded) ou wp-config.php — jamais en dur dans le code
HTTPS est activé sur votre site (obligatoire pour les webhooks)
mcc_verify_webhook() utilise hash_equals() (résistant aux timing attacks)
La vérification du timestamp rejette les webhooks de plus de 5 minutes
Le handler webhook est idempotent (can receive le même événement plusieurs fois)
L'URL https://votresite.com/wp-json/moncashconnect/v1/webhook est configurée dans le tableau de bord MonCashConnect
Autres guides d'intégration