Accueil
Rechercher:
sur developpez.com sur les forums
Forums | Tutoriels | F.A.Q's | Participez | Hébergement | Contacts
Accueil Conception Java DotNET Visual Basic  C  C++ Delphi MS-Office SQL & SGBD Oracle  4D  Business Intelligence
Club Emploi Blogs   TV   Dév. Web PHP XML Python Autres 2D-3D-Jeux Sécurité Windows Linux PC Mac
FORUM PHP FAQ PHP COURS PHP SOURCES PHP LIVRES PHP SCRIPTS PHP OUTILS PHP COMPARATIFS PHP TV Zend Framework

Tutoriel : Installation d'une solution de paiement en ligne E-Transactions (SIPS-ATOS) sur un serveur Apache avec PHP

Date de publication : 21 juin 2008

Par Thierry Godin (Voir les autres articles)
 

Ce tutoriel a pour but d'expliquer l'installation d'un système de paiement en ligne E-Transactions (SIPS-ATOS) sur un site e-commerce utilisant un serveur Linux avec Apache et PHP.

I. Généralités
I-A. Pré-requis
I-B. Introduction
I-C. Présentation de l'API SIPS-ATOS
I-C-1. Contenu du package
I-C-2. Documentation
I-D. Présentation du processus de paiement en ligne
I-D-1. Principe de fonctionnement d'une transaction en ligne (Schéma)
II. Exemple d'installation pour une boutique en ligne avec un caddie simple (1 article)
II-A. Introduction
II-B. Installation des fichiers binaires
II-C. Installation des fichiers de paramètres et des certificats
II-C-1. Fichier pathfile
II-C-2. Certificats : fichiers certif.fr.xxxxxxxxxxxx
II-C-3. Paramètres du commerçant : Fichier parmcom.xxxxxxxxxxxxx
II-C-4. Paramètres du fournisseur : Fichier parmcom.e-transactions
II-C-4-a. Paramètre : PAYMENT_MEANS
II-C-4-b. Paramètre : BLOCK_ORDER
II-C-4-c. Paramètre : HEADER_FLAG
II-C-4-d. Paramètre : TEMPLATE
II-C-5. Autres fichiers et sous-dossiers
II-D. Installation des fichiers PHP
II-E. Intégration du fichier d'appel (call_request.php)
II-E-1. Introduction
II-E-2. Récupération du contenu du caddie
II-E-3. Mise en place des paramètres de transaction
II-E-4. Affichage des moyens de paiement
II-E-5. Le fichier call_request.php complet avec un minimum de commentaires
II-E-6. A propos des paramètres de transaction
II-F. Intégration du fichier de réponse automatique (call_autoresponse.php)
II-G. Intégration du fichier de réponse manuelle (call_response.php)
II-H. Mise en place sur le serveur de production
II-I. Essais de fonctionnement et de paiement (Phase de tests)
II-I-1. Essais avec l'identifiant de commerçant et le certificat de test
II-I-2. Essais avec l'identifiant de commerçant et le certificat final (Phase de pré-production)
II-J. Passage en production
III. Création d'un modèle personnalisé pour la passerelle de paiement (Template)
III-A. Présentation
III-B. Création du fichier HTML
III-C. Template en plusieurs langues
III-D. Un Template pour chaque page
III-E. Utilisation de l'utilitaire de test de Template pour Windows (test_template.exe)
III-F. Intégration du Template à la passerelle de paiement
IV. Conclusion
V. Remerciements


I. Généralités


I-A. Pré-requis

De bonnes connaissances de l'environnement Linux et de PHP sont nécessaires pour pouvoir installer une solution de monétisation sur un site web e-commerce.

PHP :
  • Les sessions
  • Les tableaux
  • L'envoi d'email
  • Lire et écrire dans un fichier
LINUX :
  • Les chemins
  • Les droits des fichiers

I-B. Introduction

Ce tutoriel devrait pouvoir s'appliquer probablement à toute solution de paiement en ligne qui utilise le système SIPS-ATOS, mais pour que l'exemple reste concret, nous allons nous pencher plus particulièrement sur le système E-Transactions du Crédit Agricole.

Nous allons étudier le cas de l'API pour Linux version 6 sur un serveur Linux OpenSuse (10.2) avec Apache (2.2.3) et PHP (5.2.5).


I-C. Présentation de l'API SIPS-ATOS

Dans ce tutorial, le package SIPS-ATOS nous a été délivré en pièce jointe d'un courrier électronique au format *.zip

Vous devez également avoir reçu votre certificat électronique de commerçant par email. Le certificat est empaqueté dans un fichier exécutable chiffré (Security Box). Vous recevrez par courrier postal le code qui permettra de déchiffrer votre certificat pour l'enregistrer sur votre disque dur.

Nous passerons ici sur toutes les formalités administratives relatives à la création de votre boutique en ligne auprès de votre établissement bancaire (constitution du dossier, présentation de documents administratifs, contrats et signatures) auxquelles vous devrez vous soumettre.


I-C-1. Contenu du package

Décompressez le fichier ZIP dans le répertoire de votre choix sur votre disque dur, puis ouvrez-le. Il devrait contenir :

  • Un dossier bin : Il contient les exécutables request et response
  • Un dossier documentation : Il contient toute la documentation nécessaire à l'installation ainsi qu''un guide du programmeur et un dictionnaire des données
  • Un dossier logo : Il contient les logos de cartes bancaires
  • Un dossier param : Il contient un certificat de test, ainsi qu''un fichier de paramètres du commerçant , un fichier de paramètres du fournisseur et le fichier pathfile
  • Un dossier sample : Il contient des exemples de fichiers d'appel de requête de transaction et de réponse pour PHP et Perl
  • Un dossier test_template : Il contient un Template d'exemple ainsi qu'un utilitaire de test test_template
  • Un fichier de version
Dans ce tutoriel, nous laisserons de côtés tous les fichiers Perl (qui sont livrés avec).
Les principaux fichiers sont expliqués en détail plus loin.


I-C-2. Documentation

Ce tutoriel n'a pas pour but de se substituer à la documentation officielle qui vous a été fournie avec l'API.

N'hésitez pas à lire les différents guides d'installation.
Lorsque vous serez un peu plus familier du système de paiement, vous vous pencherez sûrement sur le Guide du programmeur ainsi que le Dictionnaire des données. Ces documents vous permettront de passer des paramètres supplémentaires lors de la transaction et d'interpréter tous les messages de retour.
Le Dictionnaire des données vous sera également très utile : Chaque champ, chaque paramètre doit observer des règles de syntaxe très strictes.


I-D. Présentation du processus de paiement en ligne

Comme un schéma vaut mieux qu'un long discours, je vous laisse découvrir toute la chaîne du processus de paiement au travers du schéma ci-dessous.


I-D-1. Principe de fonctionnement d'une transaction en ligne (Schéma)

Shéma du déroulement d'une transaction en ligne

  1. Le client a rempli le caddie et le valide pour procéder au paiement
  2. Le fichier call_request.php est exécuté et interroge le binaire request
  3. Affichage des moyens de paiement
  4. Le client clique sur la carte bancaire. Les données de la transaction sont envoyées au serveur du fournisseur
  5. Affichage du formulaire de saisie de carte bancaire
  6. Le client saisit ses numéros de carte puis valide. (Si le client abandonne, il est redirigé vers la page d'annulation : 6a -> 6b)
  7. Le serveur du fournisseur demande l'autorisation auprès d'une institution financière (réseau bancaire)
  8. La réponse est traitée par le fournisseur
  9. La requête est renvoyée vers le fichier de réponse automatique call_autoresponse.php et le fichier de réponse manuelle call_response.php (9 et 9.a)
  10. Ces deux fichiers sont exécutés et interrogent le binaire response pour interpréter le résultat (10 et 10.a)
  11. Le fichier de réponse manuelle call_response.php affiche la page de résultat (Succès ou échec)

II. Exemple d'installation pour une boutique en ligne avec un caddie simple (1 article)


II-A. Introduction

Dans cet exemple, considérons que notre boutique permette la vente de logiciels en ligne.
Le client, après s'être identifié, aura rempli un formulaire avec ses données personnelles nécessaires à la facturation, puis aura sélectionné un logiciel dans le catalogue.

idea Si vous n'en êtes pas encore au stade du caddie, je vous recommande alors vivement le tutoriel de Joris Crozier
sur la création d'un panier en PHP
Nous considérons que toutes ces données sont stockées dans une session que nous allons résumer ici comme ci-dessous :
Définition des variables de session

<?php

/* Informations du client */
$_SESSION['USER_ID']       = "1";
$_SESSION['USER_NOM']      = "Godin";
$_SESSION['USER_PRENOM']   = "Thierry";
$_SESSION['USER_COMPANY']  = "N1bus-Expériences";
$_SESSION['USER_ADRESSE']  = "1, rue Henri Desgranges";
$_SESSION['USER_VILLE']    = "La Rochelle";
$_SESSION['USER_ZIP']      = "17000";
$_SESSION['USER_PAYS']     = "France";
$_SESSION['USER_TEL']      = "33(0) 123 456 789";
$_SESSION['USER_EMAIL']    = "xxxx@xxxx.com";

/* Caddie */
$_SESSION['CADDIE_ID']          = "1";
$_SESSION['CADDIE_LOG_NOM']     = "PlanningFacile";
$_SESSION['CADDIE_LOG_VERSION'] = "1.1.0.0";
$_SESSION['CADDIE_AMOUNT']      = "3000"; //montant en euro sans séparateur = 30,00 euros (C'est pas cher !)

?>
Nous considérons également que notre site web est installé dans le répertoire suivant sur le serveur :

/srv/www/htdocs/monsiteweb/
Et enfin, nous créons un répertoire qu'on appellera "xpay" pour y stocker les fichiers de configuration et les certificats :

/srv/www/htdocs/monsiteweb/xpay/
info Nous n'avons pas besoin de connexion sécurisée pour notre boutique :
Toutes les données de la transaction seront chiffrées par le binaire request puis déchiffrées par le binaire response.
La transaction bancaire sera effectuée sur le serveur sécurisé (SSL 128 bit) de notre fournisseur.
Aucune information concernant la carte de crédit du client ne transite par notre serveur.
Pour une plus grande sécurité, vous pouvez évidemment utiliser le protocole HTTPS sur votre boutique,
mais ceci vous obligera à acquérir et/ou installer un certificat SSL et probablement une adresse IP supplémentaire.
Nous utiliserons un serveur Linux en local pour les tests, configuré comme le serveur de production afin d'éviter les surprises.


II-B. Installation des fichiers binaires

info Avant toute chose, vérifiez la configuration de PHP sur votre serveur avec la commande phpinfo().
safe_mode : On
Si la directive safe_mode est à On, vous devez copier les exécutables request et response dans le répertoire défini par la directive safe_mode_exec_dir

safe_mode : Off
Si la directive safe_mode est à Off, vous pouvez copier les exécutables request et response dans le répertoire de votre choix à l'intérieur de votre site ou dans le répertoire cgi-bin.

Vous utiliserez les binaires correspondants à votre noyau Linux (2.4 ou 2.6)

Dans notre exemple :

  • La directive safe_mode est à On
  • Le répertoire safe_mode_exec_dir est : /srv/www/htdocs/empty/
  • Le noyau : 2.6.18.8-0.9
Nous allons donc copier les fichiers binaires request_2.6.9_3.4.2 et response_2.6.9_3.4.2 dans le répertoire : /srv/www/htdocs/empty/
CHMOD : 0755


II-C. Installation des fichiers de paramètres et des certificats

Afin de pouvoir s'y retrouver facilement, nous allons séparer les fichiers de l'API de paiement des fichiers du site, sauf en ce qui concerne les fichiers PHP d'appel et de réponse que nous mettrons avec les fichiers du site (à la racine).

warning Prenez soin de mettre des chemins en minuscule, sans accent et surtout sans espace.
Un espace dans le chemin d'un fichier provoquera une erreur
Nous allons copier les fichiers et dossiers suivants dans le répertoire : /srv/www/htdocs/monsiteweb/xpay/

  • Fichier pathfile
  • Fichier parmcom.e-transactions (Fichier de paramètres du fournisseur)
  • Fichier parmcom.013044876511111 (Fichier de paramètres pour les tests)
  • Fichier certif.fr.013044876511111 (Certificat pour les tests)
  • Fichier certif.fr.xxxxxxxxxxxxxxxxxx (Votre certificat de commerçant - avec votre numéro de commerçant délivré par votre fournisseur)
  • Dossier logo (Contient les images des cartes bancaires)
Copiez ensuite le fichier parmcom.013044876511111 dans le même répertoire et renommez-le en parmcom.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx sera remplacé par le numéro que vous aura fourni votre fournisseur. (Ce sera probablement votre numéro de SIRET).
Ce nouveau fichier devra être modifié : vous mettrez les mêmes paramètres que dans le fichier parmcom.013044876511111 après avoir effectué tous les tests.

info Lorsque vous passerez en pré-production puis en production, il faudra utiliser votre certificat et votre fichier parmcom.....

II-C-1. Fichier pathfile

Le fichier pathfile (sans extension) contient les chemins vers les fichiers de paramètres, le certificat et le répertoire qui contient les images des cartes bancaires.
Contenu du fichier pathfile

#########################################################################
#
#	Pathfile 
#
#	Liste fichiers parametres utilises par le module de paiement
#
#########################################################################
#
#-------------------------------------------------------------------------
# Activation (YES) / Désactivation (NO) du mode DEBUG
#-------------------------------------------------------------------------
#
DEBUG!YES!
# ------------------------------------------------------------------------
# Chemin vers le répertoire des logos depuis le web alias  
# ------------------------------------------------------------------------
#
D_LOGO!xpay/logo/!
#
# --------------------------------------------------------------------------
#  Fichiers parametres lies a l'api e-transactions paiement	
# --------------------------------------------------------------------------
#
# fichier des  parametres e-transactions
#
F_DEFAULT!/srv/www/htdocs/monsiteweb/xpay/parmcom.e-transactions!
#
# fichier parametre commercant
#
F_PARAM!/srv/www/htdocs/monsiteweb/xpay/parmcom!
#
# certificat du commercant
#
F_CERTIFICATE!/srv/www/htdocs/monsiteweb/xpay/certif!
#
# --------------------------------------------------------------------------
# 	end of file
# --------------------------------------------------------------------------
Modifiez les chemins sans oublier le ! final.

Vous devez avoir au moins :

  • Un chemin vers le répertoire des logos (chemin relatif)
  • Un chemin vers le fichier du fournisseur : parmcom.e-transactions!
  • Un chemin vers le fichier du commerçant : parmcom!
  • Un chemin vers le fichier de certificat : certif!
idea Passez le paramètre DEBUG à YES pour les tests. Ceci affichera un message explicite au format HTML en cas d'erreur.
Nous repasserons ce paramètre à NO ensuite lors de la mise en pré-production

II-C-2. Certificats : fichiers certif.fr.xxxxxxxxxxxx

Rien de particulier à dire sur les certificats.
Vous ne devez pas éditer ces fichiers.


II-C-3. Paramètres du commerçant : Fichier parmcom.xxxxxxxxxxxxx

Le fichier parmcom.xxxxxxxxxxxxx contient les Url de retour de la transaction.

Nous allons éditer le fichier de test parmcom.013044876511111 puis nous recopierons ultérieurement les mêmes Url dans notre fichier parmcom.xxxxxxxxxxxxx
Contenu du fichier parmcom du commerçant

###############################################################################
#
#	Fichier des parametres du commercant
#
#	Remarque :	Ce fichier parametre est sous la responsabilite du
#				commercant
#
###############################################################################


# URL de retour automatique de la reponse du paiement

AUTO_RESPONSE_URL!http://www.monsite.com/call_autoresponse.php!

# URL de retour suite a paiement refuse

CANCEL_URL!http://www.monsite.com/call_response.php!

# URL de retour suite a paiement accepte

RETURN_URL!http://www.monsite.com/call_response.php!


# END OF FILE
warning Vous devez mettre des Url complètes
Modifiez les Url sans oublier le ! final.

Vous devez avoir au moins :

  • Une URL vers le fichier de réponse automatique call_autoresponse.php
  • Une URL vers le fichier de réponse manuelle call_response.php
  • Une URL vers le fichier en cas d'annulation de la part du client. Nous utiliserons ici le même fichier call_response.php
Note:
Nous verrons plus loin que nous pourrons passer ces Url en paramètres lors de la requête directement dans le fichier call_request.php
Ceci peut être utile dans le cas où vous souhaiteriez passer d'autres paramètres dynamiques dans les Url. Dans ce cas, vous prendrez soin de commenter les lignes des Url dans ce fichier en ajoutant un # devant.


II-C-4. Paramètres du fournisseur : Fichier parmcom.e-transactions

Comme dans le fichier parmcom du commerçant, ces paramètres peuvent être passés lors de la requête directement dans le fichier call_request.php
Contenu du fichier parmcom du fournisseur

###############################################################################
#
#	Fichier des parametres E-TRANSACTIONS 
#
#	Remarque :	Ce fichier parametre est sous la responsabilite du CA
#
###############################################################################


# Mode d'affichage des blocs de paiment

BLOCK_ALIGN!center!

# Ordre d'affichage des blocs de paiement

BLOCK_ORDER!1,2,3,4,5,6,7,8!

# Mode de securite 

CONDITION!SSL!

# Code devise  ( 978=EURO )

CURRENCY!978!

# flag d'edition des libelles des blocs de paiement

HEADER_FLAG!yes!

# Code langage de l'acheteur (fr=francais)

LANGUAGE!fr!

# Code pays du commercant

MERCHANT_COUNTRY!fr!

# Code langage du commercant

MERCHANT_LANGUAGE!fr!

# Liste des moyens de paiement acceptes

PAYMENT_MEANS!CB,1,VISA,1,MASTERCARD,1!

# Passage en une seule frame securisee au moment du paiement

TARGET!_top!

# Nom du template de la page de paiement e-transactions

TEMPLATE!template_ca_fr!

# Couleur du text (noir)

TEXTCOLOR!000000!

# END OF FILE
Note :
La plupart des commentaires vous indiquent la nature des paramètres à configurer. Toutefois vous trouverez ci-dessous la description de certains paramètres particuliers.


II-C-4-a. Paramètre : PAYMENT_MEANS

C'est le paramètre qui affichera les images des différentes cartes de crédit avec le commentaire.

Il existe 3 blocs de commentaires :

N° de Block Commentaire
1 Choisissez un moyen de paiement ci-dessous
2 Vous utilisez le formulaire sécurisé standard SSL, choisissez une carte ci-dessous :
4 Autres moyens de paiement :


Exemples :

Si vous renseignez ce paramètre avec les valeurs suivantes :
PAYMENT_MEANS

PAYMENT_MEANS!CB,1,VISA,1,MASTERCARD,1!
Les trois cartes de crédits seront affichées dans le bloc 1 sous le commentaire correspondant :


Si vous renseignez ce paramètre avec les valeurs suivantes :
PAYMENT_MEANS

PAYMENT_MEANS!MASTERCARD,2,CB,2,VISA,2!
Les trois cartes de crédits seront affichées dans le bloc 2 sous le commentaire correspondant :


II-C-4-b. Paramètre : BLOCK_ORDER

C'est le paramètre qui détermine l'ordre d'affichage des blocs.

Normalement la valeur par défaut (1,2,3,4,5,6,7,8,9) convient, mais si vous souhaitez afficher le bloc 2 avant le bloc 1, vous devrez alors renseigner ce champ avec les valeurs suivantes (2,1,3,4,5,6,7,8,9)


II-C-4-c. Paramètre : HEADER_FLAG

C'est le paramètre qui permet d'afficher ou masquer les commentaires

Si vous définissez ce paramètre à no , aucun commentaire ne sera affiché dans les blocs.


II-C-4-d. Paramètre : TEMPLATE

C'est le paramètre qui permet de définir le Template (design) qui sera utilisé pour le paiement sur le serveur du fournisseur.

Note :
Pour des raisons évidentes de sécurité, certaines parties de la page de saisie des codes de carte bancaire ne peuvent être modifiées (formulaire). En revanche, il est possible de modifier d'autres parties de la page, d'afficher votre logo, vos textes, vos couleurs.

Nous verrons plus loin comment créer un Template aux couleurs de votre site.
Pour le moment, nous laisserons le Template du fournisseur.


II-C-5. Autres fichiers et sous-dossiers

Le dossier logo :
Le dossier logo contient par défaut les images des 3 cartes bancaires (CB, VISA, MASTERCARD) et des cadenas SSL. Si vous devez utiliser d'autres cartes bancaires, assurez-vous d'y copier les images correspondantes.

Le fichier de logs :
Ce fichier n'existe pas par défaut, il vous faut donc créer un fichier texte vide que vous renommerez en log.txt (ou un autre nom si vous souhaitez). Il devra pouvoir être accessible en lecture/écriture par nos scripts PHP de paiement (CHMOD 766). Vous pouvez le mettre dans le répertoire de votre choix.

Nous utiliserons ce fichier pour enregistrer toutes les transactions (succès ou échec), ainsi , si aucun email de confirmation n'était délivré après une transaction (panne serveur, réseau, bug ...) , nous aurions tout de même une trace dans le fichier de logs.

idea De plus, en production nous y retrouverons les éventuels messages d'erreurs de l'API.

II-D. Installation des fichiers PHP

Nous allons copier les 3 fichiers PHP à la racine du site dans : /srv/www/htdocs/monsiteweb/

  • call_request.php
  • call_autoresponse.php
  • call_response.php
idea Astuce
Pour que vous ne soyez pas déroutés par le code de votre site et celui du système de paiement, je vous recommande d'inclure ces fichiers dans vos pages. (include()).

En effet, ceci peut s'avérer utile si , pour une quelconque raison, vous étiez amenés à changer de système de paiement.
De plus, ces fichiers généreront juste les images des cartes bancaires pour le call_request.php et des messages de confirmation (succès ou échec) pour le call_response.php

Cela permettra de ne mettre que le code nécessaire au traitement du paiement sans s'occuper de la mise en forme.
Le code sera plus clair et donc plus facile à debugger ou à maintenir.

Dans ce cas, n'oubliez pas de modifier les Url de retour dans le fichier parmcom du commerçant.


II-E. Intégration du fichier d'appel (call_request.php)


II-E-1. Introduction

Ce fichier permet de préparer une transaction avant d'accéder au paiement proprement dit sur le serveur du fournisseur.
C'est également ce fichier qui affichera les moyens de paiement (Cartes bancaires).

Pour que ce tutoriel soit le plus explicite possible, nous allons découper ce fichier en trois parties distinctes :

  1. La récupération du caddie
  2. La mise en place des paramètres de transaction
  3. L'affichage des moyens de paiement
info Vous retrouverez le fichier call_request.php complet dans la dernière section de ce chapitre.

II-E-2. Récupération du contenu du caddie

Comme nous l'avions défini au début de cet exemple, toutes les informations du client et le contenu du caddie sont déjà enregistrés dans des variables de session.
Nous allons donc récupérer ces variables pour pouvoir les transmettre lors de la transaction. Ceci nous permettra au retour de la transaction, d'envoyer un reçu de paiement détaillé au client par email et éventuellement de mettre notre base de données à jour (Si votre système de boutique en ligne utilise une base de données).

Une précaution, cependant :
Les paramètres de transaction obéissent à des règles syntaxiques très strictes. Par exemple, pour l'avoir déjà expérimenté à mes dépends, un espace dans la valeur d'un paramètre causera une erreur quasi incompréhensible car les données seront tronquées lors du traitement et l'API renverra un message d'erreur plus ou moins générique difficile à interpréter.

On retrouvera souvent ce type d'erreur lorsque les paramètres contiendront des caractères interdits ou certains caractères de ponctuation.
On peut résoudre le problème une fois pour toutes en utilisant la fonction base64_encode() sur les paramètres susceptibles de contenir ce type de valeurs. On utilisera base64_decode() ensuite lors du retour de la transaction pour récupérer ces valeurs dans leur intégralité.

Tout le contenu du caddie et les infos du client seront passés dans un seul paramètre lors de la transaction, le paramètre : caddie.
Nous allons donc mettre tout ça dans un tableau puis nous utiliserons la fonction base64_encode() pour nous assurer que les données ne causent pas d'erreur lors de l'appel de l'API.
Préparation du caddie

<?php
// on construit le tableau du caddie en récupérant les variables de la session
$TheCaddie = array();

// les infos du client
$TheCaddie[] =  $_SESSION['USER_ID'];
$TheCaddie[] =  $_SESSION['USER_NOM'];
$TheCaddie[] =  $_SESSION['USER_PRENOM'];
$TheCaddie[] =  $_SESSION['USER_COMPANY'];
$TheCaddie[] =  $_SESSION['USER_ADRESSE'];
$TheCaddie[] =  $_SESSION['USER_VILLE'];
$TheCaddie[] =  $_SESSION['USER_ZIP'];
$TheCaddie[] =  $_SESSION['USER_PAYS'];
$TheCaddie[] =  $_SESSION['USER_TEL'];
$TheCaddie[] =  $_SESSION['USER_EMAIL'];

//le contenu du caddie
$TheCaddie[] =  $_SESSION['CADDIE_ID'];
$TheCaddie[] =  $_SESSION['CADDIE_LOG_NOM'];
$TheCaddie[] =  $_SESSION['CADDIE_LOG_VERSION'];
$TheCaddie[] =  $_SESSION['CADDIE_AMOUNT'];

//on crée un numéro de commande pour le fun
$NumCmd      = "CMD-" . date("YmdHis");
$TheCaddie[] =  $NumCmd ;

//pour envoyer le caddie à e-transaction sans probleme
//on serialize le tableau pour en faire 1 string et on le base64_encode()
//car certains caractères sont interdits dans la valeur du parm caddie

$xCaddie = base64_encode(serialize($TheCaddie));
?>

II-E-3. Mise en place des paramètres de transaction

Maintenant, nous allons préparer les paramètres de la transaction.
Comme nous l'avions vu plus haut, certains paramètres que nous avions définis dans les fichiers parmcom, pouvaient en réalité être définis directement dans ce fichier.

Il existe une multitude de paramètres . Je vous recommande de consulter le Dictionnaire des données si vous voulez peaufiner votre transaction.

Nous allons parler ici que des principaux paramètres.
Vous devez savoir que ce fichier interrogera le binaire request lorsqu'il sera exécuté. On doit donc préciser ici le chemin du binaire et le chemin du fichier pathfile

C'est souvent ici que le bât blesse :
La plupart des erreurs que vous rencontrerez seront des erreurs de "chemin de fichier" ou de "droits des fichiers"

warning Les paramètres passés dans la variable $parm sont séparés par un espace :
$parm = "parametre1=valeur1 parametre2=valeur2 parametre3=valeur3" etc.

Vous ne devez donc pas mettre d'espace dans les valeurs des paramètres !
Les paramètres de la transaction

<?php

//Identifiant commerçant
//Nous en sommes pour l'instant à la phase d'installation,
//Nous utiliserons donc l'identifiant commerçant de test.
//Lorsque nous passerons en pré-production, il faudra alors mettre ici
//l'identifiant commerçant que votre fournisseur vous aura délivré
$parm = "merchant_id=013044876511111";

//Chemin du fichier pathfile + executable request
$parm .= " pathfile=/srv/www/htdocs/monsiteweb/xpay/pathfile";
$path_bin = "/srv/www/htdocs/empty/request_2.6.9_3.4.2";

//Pays du commerçant
$parm .= " merchant_country=fr";

//Langage de l'interface de paiement
//Si votre site comporte plusieurs langages, vous pouvez préciser dynamiquement ici
//le langage utilisé par le client
//cf : Dictionnaire des données
$parm .= " language=fr";

//Le montant de la transaction
//Cette valeur ne doit pas comporter de ponctuation. Chiffres uniquement !
//Par exemple, le montant du caddie est de 30,00 euros, vous devez mettre 3000
$parm .= " amount=" .$_SESSION['CADDIE_AMOUNT'];

//Monnaie
//Ici c'est l'euro
//Si vous proposez le paiement en plusieurs monnaies,
//vous pouvez changer dynamiquement cette valeur selon la monnaie
//choisie par le client
//cf : Dictionnaire des données
$parm .= " currency_code=978";

//Id de la transaction (6chiffres)
//Vous pouvez ne pas utiliser ce paramètre, auquel cas, le serveur du fournisseur
//créera un id de transaction automatiquement.
//Pour ma part, je pense qu'il peut être utile de le définir ici, notamment
//si on souhaite mettre à jour notre base de données en ajoutant l'id de transaction au caddie enregistré
//avant de procéder à la transaction.
$parm .= " transaction_id=" . date ("His");

//Label sur le reçu de paiement
//Lorsque le paiement a été accepté par le fournisseur, un ticket est affiché à l'écran.
//Vous pouvez ici rajouter un commentaire pour que le ticket affiche au moins le nom de
//votre boutique et le produit acheté.
//Ce paramètre est limité à 3072 caractères et ne doit pas contenir d'espace
//( vous les remplacez par leur équivalent html : &nbsp;)
$Produit = "<tr><td>CHEZN1BUS&nbsp;:&nbsp;&nbsp;LOGICIEL&nbsp;PLANNINGFACILE</td></tr>";
$parm .= " receipt_complement=" . $Produit;

//Email client (no comment)
$parm .= " customer_email=" . $_SESSION['USER_EMAIL'];

//IP client
//Je ne vous mets pas le code pour récupérer l'ip du client
//mais vous saurez trouver ce qu'il vous faut sur developpez.com
$parm .= " customer_ip_address=" . $IP;

//caddie
//On retrouve ici notre fameux caddie que nous avons préparé dans la section précédente.
//Ce champ est limité à 2048 caractères
$parm .= " caddie=" . $xCaddie ;


//Nous pouvons utiliser les paramètres ci-dessous si nous avons besoin de passer des paramètres dans l'url.
//Ici par exemple, nous transmettons l'id de session pour que le client puisse retourner sur son compte au
//retour de la transaction.
//Si vous définissez ces paramètres ici, il est préférable de passer les url en commentaire
//dans le fichier parmcom du commerçant en ajoutant un dièse devant (#)

//url en cas d'annulation
$SUPERID = session_id();
$parm .= " cancel_return_url=http://www.monsite.com/response.php?SUPERID=" . $SUPERID;

// url réponse automatique
$parm .= " automatic_response_url=http://www.monsite.com/call_autoresponse.php";

//url de retour du client après le paiement
$parm .= " normal_return_url=http://www.monsite.com/response.php?SUPERID=" . $SUPERID;


//et enfin, vous pouvez préciser ici le template que vous souhaitez utiliser
//Voir la section plus bas pour la création du Template
$parm .= " templatefile=le_template_de_mon_site";

?>

II-E-4. Affichage des moyens de paiement

Ici nous allons interroger le binaire request avec la fonction PHP exec() puis analyser la réponse renvoyée par l'API. Si nous n'avons commis aucune erreur dans les étapes précédentes, les cartes bancaires seront affichées.
Affichage des moyens de paiement

<?php

//Appel du binaire request
$result = exec("$