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’).

Pierre-Emmanuel Fringant

Articles connexes

Commentaires

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

[...] Plugin du module de paiement sécurisé Crédit Mutuel / CIC [...]

Bonjour et merci pour ce tutoriel ! Pour info il coûte combien ce plugin ? merci

Bonjour, il est gratuit ce plugin ?

Oui il est gratuit, pas d’entourloupe ;)

Participez

Pour insérer une portion de code, utilisez <pre lang="php">...</pre>