Plugin du module de paiement sécurisé Crédit Mutuel / CIC
Ce plugin permet d’installer simplement et rapidement le module de paiement sécurisé proposé par le Crédit Mutuel et le CIC. Il fonctionne avec les versions 4 et 5 de PHP et les versions 1.2 et 1.3 de CakePHP.
La lecture préalable de la documentation technique du module de paiement est chaudement recommandée.
1. Installation
Le code source du plugin est disponible sur Github :
http://github.com/kalt/paiementcmcic
Pour installer le plugin, il suffit d’exécuter la commande suivante depuis le répertoire APP/plugins :
git clone git://github.com/kalt/paiement_cm_cic
2. Configuration
Le plugin inclut un Composant qui permet d’une part de créer la requête de paiement et d’autre part de décoder la réponse du serveur de paiement.
L’appel du Composant se fait de la façon suivante :
class CommandesController extends AppController { var $components = array( 'PaiementCmCic.PaiementCmCic' => array( 'CMCIC_SERVEUR' => 'https://paiement.creditmutuel.fr/test/', 'CMCIC_VERSION' => '3.0', 'CMCIC_TPE' => '1234567', 'CMCIC_CODESOCIETE' => 'societe', 'CMCIC_URLOK' => 'http://www.monsite.fr/commandes/retour_ok', 'CMCIC_URLKO' => 'http://www.monsite.fr/commandes/retour_ko', 'CMCIC_CLE' => 'ABCDEF123456789...', ) ); }
Les renseignements à donner sont les suivants :
- CMCIC_SERVEUR : URL du serveur de paiement
- CMCIC_VERSION : Version actuelle du module de paiement
- CMCIC_TPE : Code du TPE fourni par la banque
- CMCIC_CODESOCIETE : Code de la société fourni par la banque
- CMCIC_URLOK : URL de la page de retour après un paiement accepté
- CMCIC_URLKO : URL de la page de retour après un paiement refusé
- CMCIC_CLE : Clé secrète founie par la banque
3. Création d’une requête de paiement
Voici un exemple simple pour créer une requête de paiement dans notre Contrôleur Commandes :
function paiement() { // Lecture du panier, calcul du prix, etc. ... // Définition des paramètres de la requête de paiement $params = array( 'montant' => $total_ttc, // Montant sans espaces au format xxxx.yy 'reference' => $commande['Commande']['id'], // Référence de la commande, unique, alphanumérique, 12 caractères maximum 'email' => $commande['Client']['email'], // Adresse email du client ); // On génère la requête avec ces paramètres $request = $this->PaiementCmCic->call_request($params); // On transmet à la vue $this->set('request', $request); }
Voyons maintenant la génération du formulaire de paiement dans la vue :
// APP/views/commandes/paiement.ctp <form action="<?php echo $request['url']; ?>" method="post"> <input type="hidden" name="version" id="version" value="<?php echo $request['version'];?>" /> <input type="hidden" name="TPE" id="TPE" value="<?php echo $request['TPE'];?>" /> <input type="hidden" name="date" id="date" value="<?php echo $request['date'];?>" /> <input type="hidden" name="montant" id="montant" value="<?php echo $request['montant'] . $request['devise'];?>" /> <input type="hidden" name="reference" id="reference" value="<?php echo $request['reference'];?>" /> <input type="hidden" name="MAC" id="MAC" value="<?php echo $request['MAC'];?>" /> <input type="hidden" name="url_retour" id="url_retour" value="<?php echo $request['url_retour'];?>" /> <input type="hidden" name="url_retour_ok" id="url_retour_ok" value="<?php echo $request['url_retour_ok'];?>" /> <input type="hidden" name="url_retour_err" id="url_retour_err" value="<?php echo $request['url_retour_err'];?>" /> <input type="hidden" name="lgue" id="lgue" value="<?php echo $request['lgue'];?>" /> <input type="hidden" name="societe" id="societe" value="<?php echo $request['societe'];?>" /> <input type="hidden" name="texte-libre" id="texte-libre" value="<?php echo $request['texte-libre'];?>" /> <input type="hidden" name="mail" id="mail" value="<?php echo $request['mail'];?>" /> <input type="submit" value="Procéder au paiement"/> </form>
Lorsque le client clique sur le bouton « Procéder au paiement », il est redirigé sur le serveur de paiement de la banque.
4. Analyse de la réponse de la banque
Lors de la création du TPE auprès de la banque, il faut fournir une URL de retour automatique, qui est utilisée par le serveur de paiement pour envoyer le résultat d’une tentative de paiement. Voyons un exemple de script qui traite cette réponse, accessible via l’URL http://www.monsite.fr/commandes/retour_auto.
Toujours dans notre Contrôleur Commandes :
function retour_auto() { // Décodage de la réponse $response = $this->PaiementCmCic->call_response(); // Si le sceau de contrôle correspond bien à celui de la requête de paiement if ($response['MAC_match']) { $this->Commande->id = $response['reference']; switch ($response['code-retour']) { case "Annulation" : // On met à jour le statut de la commande break; case "payetest": case "paiement": // On met à jour le statut de la commande break; } } // On transmet à la vue le "reçu" à répondre $this->set('receipt', $response['receipt']); // Pas de layout autour de cette vue $this->autoLayout = false; }
Terminons par la vue de cette action :
<?php // APP/views/commandes/retour_auto.ctp header("Pragma: no-cache"); header("Content-type: text/plain"); printf(CMCIC_CGI2_RECEIPT, $receipt); ?>
C’est terminé, les tests peuvent commencer.
Lors de la mise en production du TPE, il suffira de changer l’URL du serveur de paiement dans le Composant (‘CMCIC_SERVEUR’).
Commentaires
17 août 2010 à 16:03
Super!!! Vous n’en n’auriez pas pour les autres banques? dans le même esprit j’ai un client qui veut une boutique en ligne avec la plupart des solutions de paiement qui existent
En tout cas bien ce petit plugin
22 août 2010 à 12:01
[...] Plugin du module de paiement sécurisé Crédit Mutuel / CIC [...]
12 janvier 2011 à 14:39
Bonjour et merci pour ce tutoriel ! Pour info il coûte combien ce plugin ? merci
7 juin 2011 à 12:02
Bonjour, il est gratuit ce plugin ?
8 juin 2011 à 16:46
Oui il est gratuit, pas d’entourloupe