Mise en place d'une plateforme d'e-commerce avec Ogone
Publié le 24/11/2005 Dans Programmation
Sécurité : contrôle de la transaction
Par sécurité, Ogone veut s'assurer que les données transmises par le formulaire vu ci-dessus n'ont pas été trafiquées (ce qui est possible par exemple en copiant la page sur son ordinateur local et en modifiant les champs). Pour cela, il propose 2 types de vérification que nous allons aborder.

Signature SHA-1

Cette méthode est identique à la signature des e-mails ou des fichiers que vous téléchargez sur le net (images iso de linux par exemple). Elle consiste à réaliser un "hash" numérique (= la signature) des informations au moyen d'un algorithme tel que SHA-1 ou MD5, qui sera envoyée à Ogone. Celui-ci recalculera cette signature sur base des données de la vente pour vérifier que la signature obtenue est bien identique à celle qu'il a reçue. Si ce n'est pas le cas, c'est que les données ont été altérées.

Cette signature s'effectue au niveau du formulaire de vente, vu au paragraphe précédent; je reprends ici les lignes concernées :

  1. <? $shastring = $id_vente.(round($prixtot2)*100)."EUR".PSPID.SHASIG; ?> 
  2. <input type="hidden" name="SHASign" value="<?=sha1($shastring)?>">


La signature se calcule sur base des caractéristiques de la vente, sous forme de plusieurs chaînes de caractères concaténées (= collées) l'une à l'autre :

  1. la référence de la vente : $id_vente
  2. le montant, arrondi à la façon Ogone (montant réel multiplié par 100) : round($prixtot, 2)*100
  3. le code de la monnaie utilisée (currency), ici donc l'euro : EUR
  4. le PSPID (login) du marchand
  5. la chaîne de caractères propre au marchand, définies dans les paramètres de son compte : SHASIG (on appelle la constante définie plus haut)


Toutes ces données sont concaténées au moyen de l'opérateur PHP . (point) pour former une chaîne unique, $shastring. De cette chaîne on calculera la signature en utilisant l'algorithme SHA-1 au moyen de la fonction intégrée à PHP : sha1($shastring) et on l'envoit à Ogone dans le champ caché "SHASign" du formulaire.

C'est la méthode de contrôle la plus simple à mettre en place et qui est très sûre, je la conseille donc.

Page de pseudo-XML

Ici Ogone va demander au serveur du marchand de lui confirmer les données de la commande qui vient d'être passée. Il transmet le numéro de la commande en question via le paramètre orderID à la page du site marchand dont l'url est renseignée dans la configuration du compte, et attend le résultat sous une forme de pseudo-XML telle que définie dans la documentation Ogone.

Si la commande existe réellement sur le serveur marchand, le résultat doit être du type :

  1. <orderID="12345" amount="12547" currency="EUR">


Sinon il s'attend à un message d'erreur du genre :



Voici donc le code de la page de contrôle :

  1. <?php 
  2. // Vérifie provenance IP = serveur OGONE 
  3. if ($_SERVER["REMOTE_ADDR"] != "212.23.45.97"die("Remote server not recognized. Access denied."); 
  4. // ici : récupération des données de la vente 
  5. ... 
  6. // $montant correspondra au montant total 
  7. if (!$montant) { 
  8. ?> 
  9. <uncorrect orderid : "<?=$_REQUEST["orderID"]?>"
  10. <? 
  11. else { 
  12. ?> 
  13. <orderID="<?=$_REQUEST["orderID"]?>"  
  14. amount="<?=round($montant, 2)*100?>"  
  15. currency="EUR"
  16. <? 
  17. ?>


Pour augmenter encore la sécurité (mode paranoïaque), je commence par m'assurer que le serveur appelant est bien celui d'Ogone en contrôlant son adresse IP. Ensuite je récupère les données de la vente, cette partie n'étant pas reproduite ici, libre à vous de faire selon vos habitudes :wink: Les données sont ensuite formatées de la manière requise par Ogone.

Poster un commentaire
Vous devez être identifié pour accéder à cette fonctionnalité

Utilisateur
Mot de passe
 
Informaticien.be - © 2002-2023 AkretioSPRL  - Generated via Kelare
The Akretio Network: Akretio - Freedelity - KelCommerce - Votre publicité sur informaticien.be ?