Mise en place d'une plateforme d'e-commerce avec Ogone
Publié le 24/11/2005 Dans Programmation
Initialisation : le formulaire d'achat
Une fois que l'acheteur a sélectionné et mis dans son panier tous les articles qu'il souhaite et que les frais de port sont connus et calculés (tout cela se fait en général sur une page récapitulative, dernière étape avant paiement effectif chez Ogone), on peut coder le formulaire html avec le lien vers Ogone de la manière suivante :

  1. <? // ces constantes sont traditionnellement définies dans un fichier annexe 
  2. define("URL""http://mon.magasin.com/"); 
  3. define("URLOGONE""https://secure.ogone.com/ncol/test/orderstandard.asp"); 
  4. define("PSPID""masociete");     // identifiant du marchand = login du compte Ogone 
  5. define("SHASIG""masignature");    // chaine de car. pour construire la sig. SHA-1 
  6. ?> 
  7. <form method="post" action="<?=URLOGONE?>"
  8. <!-- mandatory fields -->             
  9. <input type="hidden" name="orderID" value="<?=$id_vente?>"
  10. <input type="hidden" name="pspid" value="<?=PSPID?>"
  11. <input type="hidden" name="RL" value="ncol_2.0"
  12. <input type="hidden" name="currency" value="EUR"
  13. <input type="hidden" name="language" value="fr_FR"
  14. <? /* il FAUT arrondir à 2 décimales car ogone veut un chiffre rond */ ?> 
  15. <input type="hidden" name="amount" value="<? echo round($prixtot, 2)*100 ?>"
  16. <!-- optional fields --> 
  17. <? /* page de statut à afficher en cas de réussite ou d'échec : ici tout sur la même page */ ?> 
  18. <input type="hidden" name="accepturl" value="<?=URL?>statut.php"
  19. <input type="hidden" name="declineurl" value="<?=URL?>statut.php"
  20. <input type="hidden" name="exceptionurl" value="<?=URL?>statut.php"
  21. <input type="hidden" name="cancelurl" value="<?=URL?>statut.php"
  22.  
  23. <? $shastring = $id_vente.(round($prixtot2)*100)."EUR".PSPID.SHASIG; ?> 
  24. <input type="hidden" name="SHASign" value="<?=sha1($shastring)?>"
  25.  
  26. <? /* paramètres supplémentaires factultatifs pour fonctionnement interne */ ?> 
  27. <input type="hidden" name="paramplus" value="toto=blabla&titi=blublu"
  28.  
  29. <!-- paramde mise en page Ogone --> 
  30. <input type="hidden" name="title" value="Mon magasin virtuel, mon joli titre"
  31.  
  32. <input type="submit" value="Payer"
  33. </form>



Quelques explications sur les variables PHP présentes dans le code :
  1. $id_vente est un numéro unique (clé primaire) représentant la commande. Ogone ne peut jamais voir 2 commandes différentes avec le même numéro, sinon il refuse en affichant un message d'erreur tout sauf clair... Même une commande annulée par l'acheteur doit donc être enregistrée dans votre base de données, pour ne pas réutiliser le même numéro pour une prochaine commande. Faites également très attention au problème de concurrence, en terme de base de données : si vous générez le numéro vous-mêmes, prenez garde à ce qu'aucun client ne puisse obtenir le même numéro en faisant une transaction avec quelques secondes de décalage sur votre site... La meilleure solution consiste à laisser faire votre SGBD : insérez directement une ligne concernant votre commande dans votre DB avant même de lancer la procédure Ogone; votre identifiant sera ainsi fixé et ne pourra pas être "volé". Ensuite quand Ogone vous communique le résultat, faites un update SQL de cette ligne avec le statut du paiement.
  2. $prixtot : montant total de la vente. S'il y a des frais de transport, pensez à les inclure, idem pour toutes les taxes dues par le client (TVA principalement). Ogone veut voir le prix multiplié par 100 pour supprimer les décimales. Exemple : montant = 125.47 EUR, le nombre à indiquer à Ogone sera 12547. Pour éviter toute surprise lors de la multiplication par 100 (montant affiché par Ogone légèrement différent de celui que vous avez affiché à votre client, dû à un problème d'arrondi), il est primordial de penser à arrondir d'abord le montant à 2 décimales avant d'effectuer la multiplication. C'est la raison d'être de la fonction round() dans le code ci-dessus.


L'url de la page action n'est pas la même en test et en production ! Il suffit de remplacer le mot "test" par "prod". La page de statut sera abordée en détail plus loin, de même que la signature de contrôle SHA-1. Vous constatez également la présence de 2 paramètres supplémentaires : paramplus et title. Paramplus permet de renseigner des champs pour l'usage interne du site marchand. Ces champs ne seront pas touchés par Ogone, qui se contentera de les retransmettre tels quels à la page post-sale (appelée automatiquement par Ogone après la transaction), qui pourra donc les traiter comme bon lui semble. L'intérêt pour le marchand est de pouvoir communiquer n'importe quel type d'informations qui lui serait utile à sa page postsale (attention : ne pas oublier d'encoder les valeurs de ces champs avec la fonction PHP urlencode()). Enfin le paramètre "title" permet de personnaliser le titre affiché sur les pages du serveur Ogone vues par le client. Il y a bien d'autres paramètres facultatifs disponibles, qui permettent de personnaliser encore plus le traitement, tout est détaillé dans la documentation d'Ogone.

Les champs accepturl, declineurl, etc. sont les pages du site marchand qui vont afficher le statut de la transaction, c'est le point de retour depuis Ogone. A ne pas confondre avec la page postsale qui n'est qu'un traitement batch, sans aucun affichage, destiné uniquement à mettre à jour la base de données du marchand en fonction des résultats envoyés par le serveur de paiement.

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

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