Paiement électronique
Principes
Lorsque l'on veut créer un site de commerce en ligne, le moyen de paiement le plus sûr et le plus rapide pour le vendeur est le paiement par carte banquaire. Ce mode de paiement utilise des services web fournis par les banques.
Fonctionnement :
- lorsqu'un acheteur a rempli son panier sur le site marchant, il est dirigé sur les pages de paiement de l'application banquaire
- il fournit ses coordonnées bancaires, qui sont envoyées par une connexion chiffrée à la banque
- s'ensuit une phase de vérification de la carte bancaire auprès de la banque du commerçant
- en cas d'accord, le paiement est enregistré ; une page de résultat – le ticket de paiement – s'affiche sur l'écran de l'internaute
- si les coordonnées bancaires de l’internaute ne sont pas valides (inexactes, carte en opposition, plafond dépassé etc.), il est informé du défaut de paiement
Le principe de fonctionnement d'un tel système et des échanges d'informations entre le terminal de l'acheteur, le serveur de paiement et le serveur du commerçant est expliqué dans le document fourni dans le menu note de cours.
Travail personnel
Nous allons mettre en place une application utilisant le serveur de test de Sherlocks proposé par LCL.
Créer une page simple qui génère un montant aléatoire et affiche les logos des cartes bancaires possibles.
Créer les scripts qui gèrent l'annulation par l'interaute, le retour à la boutique après paiement, et un script appelé par la banque qui inscrit les références du paiement dans un fichier de log.
Pour tester, on pourra utiliser la carte n° 4974934125497800 et cryptogramme 600 pour un paiement accepté, et le n° 4972187615205 et cryptogramme 600 pour un paiement refusé.
Données à passer au binaire request
Le binaire request doit recevoir les données suivantes sous la forme clé1=valeur1 clé2=valeur2 ...
, donc la commande à exécuter est sous la forme :
request clé1=valeur1 clé2=valeur2 ...
Clés : amount, merchant_id, merchant_country, currency_code, pathfile, transaction_id, normal_return_url, cancel_return_url, automatic_response_url, language, payment_means (valeur "CB,2,VISA,2,MASTERCARD,2), header_flag ('no'), capture_day, capture_mode, background_id, bgcolor, block_align, block_order, textcolor, textfont, templatefile, logo_id, receipt_complement, caddie, customer_id, customer_email, customer_ip_address, data, return_context, target, order_id
Codes de retours
response_code
vaut 00 si paiement OK, si paiement refusé et 17 si paiement annulé par l'internaute.
complementary_code
donne des infos complémentaires sur la raison du refus (par ex. pays interdit ou en-cours carte dépassé, etc
Données de retour de la banque
Commande à exécuter pour response :
response message=message_data pathfile=pathfile_path
où message_data
sont les données reçues dans $_POST['DATA']
et pathfile_path
est le chemin du fichier pathfile
Lorsque les données POST sont traitées par le binaire response, une chaine de caractères contient les infos séparées par un !
. Faire un explode
de cette chaine donne le tableau suivant :
$code = $tableau[1];
$error = $tableau[2];
$merchant_id = $tableau[3];
$merchant_country = $tableau[4];
$amount = $tableau[5]/100;
$transaction_id = $tableau[6];
$payment_means = $tableau[7];
$transmission_date= $tableau[8];
$payment_time = $tableau[9];
$payment_date = $tableau[10];
$response_code = $tableau[11];
$payment_certificate = $tableau[12];
$authorisation_id = $tableau[13];
$currency_code = $tableau[14];
$card_number = $tableau[15];
$cvv_flag = $tableau[16];
$cvv_response_code = $tableau[17];
$bank_response_code = $tableau[18];
$complementary_code = $tableau[19];
$complementary_info= $tableau[20];
$return_context = $tableau[21];
$caddie = $tableau[22];
$receipt_complement = $tableau[23];
$merchant_language = $tableau[24];
$language = $tableau[25];
$customer_id = $tableau[26];
$order_id = $tableau[27];
$customer_email = $tableau[28];
$customer_ip_address = $tableau[29];
$capture_day = $tableau[30];
$capture_mode = $tableau[31];
$data = $tableau[32];
Ressources
En accès restreint :
Fichiers Sherlocks pour le TP : archive