Paiement électronique

Master Internet, Données et Connaissances

Jean-Marc Lecarpentier

Enseignement des technologies du Web

 

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
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

Logos des cartes bancaires

En accès restreint :

Fichiers Sherlocks pour le TP : archive

Documentation du service de LCL