mobupay / module-payment
Passerelle de paiement Mobupay pour Magento 2 / Adobe Commerce (modele redirect / page hebergee).
Package info
github.com/mobupay/mobupay-magento
Type:magento2-module
pkg:composer/mobupay/module-payment
Requires
- php: >=7.4
- mobupay/mobupay-php: *
This package is not auto-updated.
Last update: 2026-07-25 02:29:44 UTC
README
Passerelle de paiement Mobupay pour Magento 2.3+ / Adobe Commerce. Modèle redirect / page hébergée : le client paie sur une page sécurisée Mobupay (widget Monext), la carte ne touche jamais votre serveur, et la commande est mise à jour par webhook signé.
Réutilise le SDK PHP mobupay/mobupay-php (même client + vérification de signature que les connecteurs WooCommerce et PrestaShop).
Prérequis
- Magento 2.3+ / Adobe Commerce, PHP >= 7.4.
- Une clé API Mobupay (
sk_test_*pour tester,sk_live_*en production) et le secretwhsec_*, depuis votre espace marchand > Développeurs > Clés API.
Installation
Via Composer (recommandé)
composer require mobupay/module-payment bin/magento module:enable Mobupay_Payment bin/magento setup:upgrade bin/magento setup:di:compile bin/magento cache:flush
Le SDK mobupay/mobupay-php est tiré automatiquement comme dépendance.
Installation manuelle (app/code)
- Copier le dossier dans
app/code/Mobupay/Payment/. - Copier le SDK dans
app/code/Mobupay/Payment/lib/mobupay-php/(le module charge ce fallback si Composer ne l'a pas autoloadé). bin/magento module:enable Mobupay_Payment && bin/magento setup:upgrade && bin/magento cache:flush.
Configuration
Admin > Stores > Configuration > Sales > Payment Methods > Mobupay (carte bancaire) :
| Champ | Valeur |
|---|---|
| Activer | Oui |
| Libellé affiché au client | ex. « Carte bancaire (Mobupay) » |
| Mode test (sandbox) | Oui pour démarrer |
| Clé API de test / production | Vos clés sk_test_* / sk_live_* (chiffrées en base) |
| Secret de signature des webhooks | Votre whsec_* |
| Base API | https://api.mobupay.nc (ne modifier que sur instruction du support Mobupay) |
URL de webhook (notificationUrl) : https://votre-boutique/mobupay/webhook. Elle est transmise automatiquement à chaque paiement ; aucun enregistrement manuel n'est nécessaire côté Mobupay.
Fonctionnement
- Le client choisit « Carte bancaire (Mobupay) » et place la commande.
- Le navigateur est redirigé vers
mobupay/redirect, qui crée une session Mobupay (reference= increment_id,externalId= id de commande,Idempotency-Keyanti double-paiement) et redirige vers la page hébergée. La commande reste en attente de paiement. - Le client paie. Mobupay envoie un webhook signé à
mobupay/webhook. - Le module vérifie la signature (
Webhook::verify, V2 anti-rejeu + repli V1), rapproche la commande viaexternalId, puis :payment.captured/payment.authorized→ facture offline créée, commande en traitement ;payment.failed→ commande annulée ;payment.expired/payment.cancelled→ commande annulée (si non payée) ;payment.refunded/payment.partially_refunded→ commentaire d'historique.
- Le statut est piloté par le webhook, jamais par le retour navigateur (non fiable). Idempotent (déduplication par
event.id).
Remboursement
Admin > Sales > Orders > (commande) > Credit Memo > Refund (en ligne) : appelle l'API Mobupay (total ou partiel). Nécessite une facture (créée à l'encaissement).
Matrice de test (sandbox)
À exécuter avec une clé sk_test_* et une carte de test sandbox (ex. 5476 4309 9999 9892) :
| Scénario | Attendu |
|---|---|
| Paiement réussi | Commande en attente → en traitement (facture offline) après payment.captured |
| Refus carte | payment.failed → commande annulée |
| Abandon / fermeture onglet | Pas de capture ; à l'expiration, payment.expired → annulée |
| Double soumission | Idempotency-Key → un seul paiement |
Rejeu de webhook (même event.id) |
Ignoré (idempotence receiver) |
| Remboursement total puis partiel (avoir) | API refund OK, commentaires d'historique |
| Signature invalide | Webhook rejeté (403), commande inchangée |
Limite connue : remboursement impossible pendant la fenêtre de transit (~24 h) côté Mobupay ; réessayer après le règlement (le lendemain matin, heure de Nouméa).