#!perl #---------------------------------------------------------------------------- # # Topic : Exemple PERL de traitement de la réponse de paiement # Version : P600 # # traitement de la reponse "manuelle" du serveur de paiement quand # l'acheteur retourne a la boutique apres le paiement # #---------------------------------------------------------------------------- payment_response(); sub get_data_field { # Accès au STDIN à l'aide de la fonction read read(STDIN, $save_string, $ENV{CONTENT_LENGTH}); # Dissocie la chaîne de caractères en une liste @prompts = split(/&/, $save_string); # parcours de la liste foreach (@prompts) { # dissocie la paire nom=valeur ($name, $value) = split (/=/, $_); # decode les valeurs $name=~ s/\%(..)/pack("c",hex($1))/ge; $value=~ s/\%(..)/pack("c",hex($1))/ge; # cree une liste associative $fields{$name} = $value; } $data=$fields{'DATA'}; } sub payment_response { # affichage du debut de la page de resultat print "Content-Type: text/html\n\n"; print ""; print "SHERLOCKS - Paiement Securise sur Internet"; print ""; print ""; print "

Test de l'API plug-in SHERLOCKS



"; # récupération de la variable cryptée postée # Initialisation de la variable message pour le binaire get_data_field(); $message="message=$data"; # Initialisation du chemin du fichier pathfile (à modifier) # ex : # -> Windows : $pathfile="pathfile=c:\\repertoire\\pathfile"; # -> Unix : $pathfile="pathfile=/home/repertoire/pathfile"; $pathfile="pathfile=chemin du fichier pathfile"; # Initialisation du chemin de l'executable response (à modifier) # ex : # -> Windows : $path_bin = "c:\\repertoire\\bin\\response"; # -> Unix : $path_bin = "/home/repertoire/bin/response"; # $path_bin = "chemin_de_l'executable_response"; # Tous les paramètres initialisés précédemment doivent être passés # en paramètre à la fonction pesponse pour être pris en compte # L'ordre n'a pas d'importance # Exemple : $parm = $message . " " . $pathfile; $parm = $message; # Appel du binaire response open(INFO, $path_bin . " " . $pathfile . " " . $parm . "|"); for ($result = 0, $i = 0; ; $i++) { $result = $result . $_; } close(INFO); # Sortie de la fonction : !code!error!v1!v2!v3!...!v29 # - code=0 : la fonction retourne les données de la transaction dans les variables v1, v2, ... # : Ces variables sont décrites dans le GUIDE DU PROGRAMMEUR # - code=-1 : La fonction retourne un message d'erreur dans la variable error # on separe les differents champs et on les met dans une variable tableau @tableau = split("!",$result); # recuperation des donnees de la reponse $code = $tableau[1]; $error = $tableau[2]; $merchant_id = $tableau[3]; $merchant_country = $tableau[4]; $amount = $tableau[5]; $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]; # analyse du code retour if (( $code eq "" ) && ( $error eq "" ) ) { print "
erreur appel response

"; print "executable response non trouve : $path_bin"; print ""; return; }; if ( $code != 0 ) { print "
erreur appel API de paiement

"; print "message erreur : $error"; print ""; return; }; # OK, affichage du mode DEBUG si activé print "$error"; print "
"; # Affichage des champs de la reponse print "
"; print "

Réponse manuelle du serveur SHERLOCKS

"; print "
"; print "

"; print "

"; print "
merchant_id : $merchant_id " ; print "
merchant_country : $merchant_country " ; print "
amount : $amount " ; print "
transaction_id : $transaction_id " ; print "
transmission_date: $transmission_date " ; print "
payment_means: $payment_means " ; print "
payment_time : $payment_time " ; print "
payment_date : $payment_date " ; print "
response_code : $response_code " ; print "
payment_certificate : $payment_certificate " ; print "
authorisation_id : $authorisation_id " ; print "
currency_code : $currency_code " ; print "
card_number : $card_number " ; print "
cvv_flag: $cvv_flag " ; print "
cvv_response_code: $cvv_response_code " ; print "
bank_response_code: $bank_response_code " ; print "
complementary_code: $complementary_code " ; print "
complementary_code: $complementary_info " ; print "
return_context: $return_context " ; print "
caddie : $caddie " ; print "
receipt_complement: $receipt_complement " ; print "
merchant_language: $merchant_language " ; print "
language: $language " ; print "
customer_id: $customer_id " ; print "
order_id: $order_id " ; print "
customer_email: $customer_email " ; print "
customer_ip_address: $customer_ip_address " ; print "
capture_day: $capture_day " ; print "
capture_mode: $capture_mode " ; print "
data: $data " ; print "


"; print "

"; print "

"; print ""; }