Publié le 24/11/2005 Dans Programmation
1. Présentation générale du pr...
2. Ouverture et configuration d'u...
3. Initialisation : le formulaire...
4. Sécurité : contrôle de la t...
5. » Page "post-sale" : retour d'information...
6. Conclusion
2. Ouverture et configuration d'u...
3. Initialisation : le formulaire...
4. Sécurité : contrôle de la t...
5. » Page "post-sale" : retour d'information...
6. Conclusion
Page "post-sale" : retour d'information par Ogone
Si les contrôles vus au point précédent se sont bien déroulés, le client peut poursuivre son paiement sur le site d'Ogone. Une fois l'opération terminée, Ogone renvoit le résultat ainsi qu'une série d'informations au site marchand sur sa page postsale, telle que définie dans la configuration du compte. Classiquement la page postsale se contente de stocker toutes ces variables dans sa base données, comme le montre l'exemple suivant :- <?php
- // Vérifie provenance IP = serveur OGONE
- if ($_SERVER["REMOTE_ADDR"] != "212.23.45.97") die("Remote server not recognized. Access denied.");
- require("..."); // fichier d'inclusion nécessaire
- $vente = new Vente();
- $vente->registerVente($_POST["orderID"], $_POST["amount"], $_POST["STATUS"],
- $_POST["PAYID"], $_POST["PM"], $_POST["toto"], $_POST["titi"]);
- ?>
A noter que les variables envoyées par Ogone le sont en POST, comme on l'a défini dans le premier paramètre de configuration du compte. Ici j'ai illustré le stockage en base de données via un simple appel de classe, qui se charge d'envoyer les requêtes nécessaires au SGBD. A nouveau, je vérifie si l'adresse IP appelante correspond bien au serveur Ogone avant de faire quoique ce soit. L'appel de cette page est totalement invisible pour le client, qui est pour l'instant toujours sur le site d'Ogone.
Voici la signification des différents paramètres envoyés par Ogone :
- orderID : référence de la commande
- amount : montant de la commande, au format décimal normal, non multiplié par 100
- STATUS : valeur numérique correspond à l'état du paiement. En résumé le plus important est de savoir que 9 représente un paiement accepté.
- PAYID : référence interne du paiement Ogone. Valeur importante, car il se retrouvera sur les relevés de compte bancaire du marchand.
- PM : pour "payment method", c'est une valeur alphanumérique indiquant la méthode de paiement utilisée par le client : "CreditCard" pour tout type de carte de crédit, "DEXIA" pour un paiement par netbanking de la banque Dexia, etc.
- toto et titi : ce sont les champs supplémentaires du "paramplus", à l'usage exclusif du vendeur. Ils peuvent contenir n'importe quelle information, cela reste toujours la liberté du vendeur.
Note : il est important d'utilser les majuscules pour les noms des champs tels qu'envoyés par Ogone, car PHP fait la différence, comme pour les noms de variables.
Redirection sur site marchand et affichage du statut
Nous en arrivons à la fin du processus : le paiement est effectué et le serveur du marchand a été informé du résultat. La dernière étape pour Ogone consiste donc à rediriger le client sur le site du marchand. Il sélectionne une des URL renseignées dans le formulaire de paiement initial (accepturl, declinenurl... ) selon le résultat de la transaction. Dans mon cas toutes ces url sont identiques, car la page sera toujours grosso modo la même, le code PHP étant à même de différencier l'affichage selon le statut qu'il va récupérer dans la base de données. Cette page n'a donc plus aucun lien "technique" avec Ogone, aucun paramètre n'est échangé (puisque tout est déjà fait), il s'agit juste d'afficher au client la page finale de la vente en rappelant les références qui lui seront utiles. A ce stade il est aussi classique de lui envoyer un e-mail de confirmation ou lui permettre de sauvegarder et/ou imprimer son bon de commande ou sa facture. Je n'illustre cet aspect d'aucun code étant donné qu'il n'y a rien de particulier à Ogone ici Je donnerai cependant 2 liens qui peuvent être utiles : la classe phpmailer pour l'envoi d'e-mail en PHP, bien plus souple et puissante que la fonction mail() intégrée; et la classe FPDF pour la conception de documents PDF plus aisée qu'avec les fonctions de bas niveau.