Connecteurs e-commerce
Intégrer Mobupay à une boutique en ligne (WooCommerce, PrestaShop, Magento).
Principe
Un connecteur ne manipule jamais de données carte. À la validation du panier, le plugin crée une session de paiement, redirige le client vers la page hébergée Mobupay (widget Monext), puis la boutique est notifiée par webhook signé. Le client paie sur la page Mobupay, jamais sur le serveur du marchand : le périmètre PCI reste minimal.
- 1Le client valide son panier sur la boutique.
- 2Le plugin appelle
POST /payments/sessions(server-to-server) et reçoit{ paymentId, checkoutUrl, status, expiresAt, externalId }. - 3La boutique redirige le client vers
checkoutUrl(page hébergée Mobupay). - 4Le client paie par carte via le widget Monext, sur la page Mobupay.
- 5Mobupay envoie un webhook signé (
payment.captured) à votrenotificationUrl. - 6La boutique marque la commande payée et affiche la page « merci ».
1. Créer le paiement
À la validation de la commande, créez une session avec le SDK PHP (mobupay/mobupay-php). Passez l'identifiant de commande de la boutique dans externalId (clé de rapprochement) et une Idempotency-Key pour éviter tout double-paiement sur rejeu réseau.
use Mobupay\MobupayClient;
$client = new MobupayClient($apiKey); // sk_test_* (sandbox) ou sk_live_*
$session = $client->createCheckoutSession(
['reference' => $order->get_order_number(), 'amount' => 2500, 'currency' => 'EUR'], // centimes
$order->get_checkout_order_received_url(), // retour client
home_url('/?wc-api=mobupay'), // URL webhook
['externalId' => (string) $order->get_id()], // id de commande boutique
(string) $order->get_id() // Idempotency-Key
);
wp_redirect($session['checkoutUrl']); // rediriger le client2. Recevoir le webhook
Sur votre notificationUrl, vérifiez la signature puis mettez à jour la commande. Récupérez votre secret une fois via GET /api/v1/webhooks/signing-secret (auto-provisionné).
use Mobupay\Webhook;
use Mobupay\MobupayException;
$payload = file_get_contents('php://input'); // CORPS BRUT
try {
$event = Webhook::verify($payload, getallheaders(), $secret); // V2 anti-rejeu + repli V1
} catch (MobupayException $e) {
http_response_code(403); exit;
}
// Rapprochement : orderReference = votre order.reference (echo systematique) ;
// externalId = champ libre optionnel passe a la creation. Les deux pointent votre commande.
$orderId = $event['data']['orderReference'] ?? $event['data']['externalId'];
switch ($event['type']) {
case 'payment.captured':
case 'payment.authorized': /* commande payée */ break;
case 'payment.failed':
case 'payment.cancelled':
case 'payment.expired': /* commande échouée / abandonnée */ break;
case 'payment.refunded':
case 'payment.partially_refunded': /* refléter le remboursement */ break;
}
http_response_code(200);3. Remboursements
Branchez le bouton « rembourser » du back-office de la boutique sur l'API.
$client->refund($paymentId); // total
$client->refund($paymentId, 1000); // partiel : 10,00 EUR (centimes)Règles à respecter
- Le webhook est la source de vérité, jamais le paramètre
?status=de la redirection navigateur (falsifiable par le client). La page de retour n'affiche que « paiement en cours de confirmation ». - Rapprochement par
orderReference: chaque webhook ré-émet leorder.referencefourni à la création, ce qui relie l'event à la commande de la boutique sans configuration. Le champ libreexternalIdreste disponible si vous préférez votre propre clé. - Abandon client : si le client quitte la page de paiement, Mobupay le renvoie vers votre
redirectUrlavec?status=cancelledet émetpayment.cancelled. Libérez la commande sur ce webhook, pas sur le retour navigateur. - Idempotence côté receiver : un même event peut être livré plusieurs fois (retries). Dédupliquez sur
event.id/X-Mobupay-Delivery-Id. - Testez en sandbox avec une clé
sk_test_*: le simulateur délivre les webhooks (signés) à votrenotificationUrlcomme en production.
WordPress sans plugin
Pour un site WordPress hors WooCommerce (Easy Digital Downloads, formulaires, page de vente simple), pas besoin d'extension : utilisez les liens de paiement. Créez un lien via POST /payments/links, placez son linkUrl derrière un bouton ou un QR, le client paie sur la page hébergée Mobupay, et la commande est suivie par le même notificationUrl (webhook signé) que les plugins.
$link = $client->createCheckoutLink(
['reference' => 'CMD-1042', 'amount' => 2500, 'currency' => 'EUR'],
'https://mon-site.nc/merci', // redirectUrl
'https://mon-site.nc/mobupay-webhook', // notificationUrl (source de vérité)
['externalId' => '1042']
);
// $link['linkUrl'] -> à coller dans le bouton de paiementMêmes règles que les plugins : statut piloté par le webhook, rapprochement par orderReference, idempotence sur event.id.
SDK & plugins
Le SDK PHP mobupay/mobupay-php (création de paiements, remboursement, vérification de signature) est mutualisé par les plugins WooCommerce, PrestaShop et Magento. Voir aussi le guide Webhooks (signature V2) et Idempotence.