Installation d’un paiement ATOS SIPS – tutoriel seconde partie

Si vous n’avez pas lu la première étape de ce tutoriel je vous conseille de le faire car, sans cela, ce qui va suivre ne vous sera pas d’un grand secours.

La première étape vous a donc permis d’afficher les cartes bleues, en cliquant sur l’une d’entre elles vous êtes redirigé vers le serveur de la banque et vous pouvez indiquer un numéro de carte bleue. Il faut maintenant configurer les fichiers en cas d’annulation par le client et  les fichiers call_autoresponse.php ainsi que response.php

Pourquoi deux fichiers qui font la même chose

Le fichier call_response.php a le même rôle que response.php mais il a son importance. En effet, il est appelé automatiquement par le serveur de la banque pour renvoyer le résultat de la transaction. Vous me direz dans ce cas c’est response.php qui ne sert à rien. Et bien non, car vous ne pouvez pas savoir si l’utilisateur arrivera sur votre page de remerciement (celle qui appelle le fichier response.php) avant que le serveur de la banque n’ait appelé call_auto_response.php (parfois Internet c’est lent). Il faut donc que ces deux fichiers puissent faire le même traitement sans pour autant créer de doublon.

Ensuite chacun de ces deux fichiers a sa petite particularité. Call_autoresponse.php aura pour rôle non seulement de mettre à jour la base de données mais aussi d’écrire dans un fichier logs afin d’avoir une trace des transactions. Le fichier call_response.php quant à lui sera appelé par le navigateur du visiteur et pourra donc afficher des informations utiles (nous verrons que finalement , comme pour call_request.php, ce n’est pas lui qui affichera directement les messages).

Le fichier call_response.php



// Recuperation de la variable cryptee DATA
$message="message=$HTTP_POST_VARS[DATA]";

// Initialisation du chemin du fichier pathfile

$pathfile="pathfile=/homez.316/monsite/www/cbatos/pathfile";

// Initialisation du chemin de l'executable response

$path_bin ="/homez.316/monsite/cgi-bin/response";

// Appel du binaire response

$result=exec("$path_bin $pathfile $message");

// Sortie de la fonction : !code!error!v1!v2!v3!...!v29
// - code=0 : la fonction retourne les donnees de la transaction dans les variables v1, v2, ...
// : Ces variables sont decrites 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 = explode ("!", $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 == "" ) && ( $error =="" ) )
{
$erreurMsg="<BR><CENTER>erreur appel response</CENTER><BR>";
$erreurMsg.="executable response non trouve $path_bin";
}

// Erreur, affiche le message d'erreur

else if ( $code != 0 ){
$erreurMsg="<center><b><h2>Erreur appel API de paiement.</h2></center></b>";
$erreurMsg.="<br><br><br>";
$erreurMsg.=" message erreur : $error <br>";
}

include('save_abo_bdd.php');


$path_file est le chemin du fichier path_file (comme pour call_request.php)
$path_bin est le chemin vers le fichier response

Le fichier save_abo_bdd.php correspond à VOTRE script qui va enregistrer les informations dans la base de données. Il devra se baser sur la valeur de la variable $response_code pour savoir si le paiement a été accepté.

Une fois votre fichier call_response.php prêt il vous suffit de l’inclure dans un fichier merci.php (le nom est libre mais il faudra penser à modifier votre fichier call_request.php car nous avons utilisé ce nom de fichier comme référence).

Le fichier call_autoresponse.php

le code de ce fichier est le même que celui de call_response.php à ceci près que l’on va remplacer la partie qui enregistre les erreurs dans la variable $erreurMsg par un code qui va écrire dans un fichier logs.txt



$message="message=$HTTP_POST_VARS[DATA]";

// Initialisation du chemin du fichier pathfile

$pathfile="pathfile=/homez.316/monsite/www/cbatos/pathfile";

// Initialisation du chemin de l'executable response

$path_bin = "/homez.316/monsite/cgi-bin/response";

// Appel du binaire response

$result=exec("$path_bin $pathfile $message");

// Sortie de la fonction : !code!error!v1!v2!v3!...!v29
// - code=0 : la fonction retourne les donnees de la transaction dans les variables v1, v2, ...
// : Ces variables sont decrites 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 = explode ("!", $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];

$logfile="/homez.316/monsite/www/cbatos/logs.txt";

// Ouverture du fichier de log en append

$fp=fopen($logfile, "a");
// analyse du code retour

if (( $code == "" ) &amp;&amp; ( $error == "" ) ) {
fwrite($fp, "erreur appel response\n");
fwrite($fp, "executable response non trouve $path_bin\n");
}

// Erreur, sauvegarde le message d'erreur

else if ( $code != 0 ){
fwrite($fp, "API call error.\n");
fwrite($fp, "Error message : $error\n");
}
else {

// OK, Sauvegarde des champs de la reponse

fwrite( $fp, "merchant_id : $merchant_id\n");
fwrite( $fp, "merchant_country : $merchant_country\n");
fwrite( $fp, "amount : $amount\n");
fwrite( $fp,"transaction_id : $transaction_id\n");
fwrite( $fp, "transmission_date: $transmission_date\n");
fwrite( $fp, "payment_means: $payment_means\n");
fwrite( $fp, "payment_time : $payment_time\n");
fwrite( $fp, "payment_date : $payment_date\n");
fwrite( $fp, "response_code : $response_code\n");
fwrite( $fp, "payment_certificate : $payment_certificate\n");
fwrite( $fp, "authorisation_id : $authorisation_id\n");
fwrite( $fp, "currency_code : $currency_code\n");
fwrite( $fp, "card_number : $card_number\n");
fwrite( $fp, "cvv_flag: $cvv_flag\n");
fwrite( $fp, "cvv_response_code: $cvv_response_code\n");
fwrite( $fp, "bank_response_code: $bank_response_code\n");
fwrite( $fp, "complementary_code: $complementary_code\n");
fwrite( $fp, "complementary_info: $complementary_info\n");
fwrite( $fp, "return_context: $return_context\n");
fwrite( $fp,"caddie : $caddie\n");
fwrite( $fp, "receipt_complement: $receipt_complement\n");
fwrite( $fp, "merchant_language: $merchant_language\n");
fwrite( $fp, "language: $language\n");
fwrite( $fp, "customer_id: $customer_id\n");
fwrite( $fp, "order_id: $order_id\n");
fwrite( $fp, "customer_email: $customer_email\n");
fwrite( $fp, "customer_ip_address: $customer_ip_address\n");
fwrite( $fp, "capture_day: $capture_day\n");
fwrite( $fp, "capture_mode: $capture_mode\n");
fwrite( $fp, "data: $data\n");
fwrite( $fp, "-------------------------------------------\n");

}

include('save_abo_bdd.php');


Dans le cas présent cela suppose que le fichier logs.txt se trouve dans le dossier cbatos à la racine de mon site et avec l’autorisation d’écriture. (CHMOD je sais plus combien :D)

Le fichier annulation.php

Ce fichier est finalement le même que le fichier merci.php, il devra inclure call_response.php et mettre à jour la base de données. La seule différence est qu’il n’affichera pas forcément le même message. Vous pouvez parfaitement utiliser votre fichier merci.php pour gérer les annulations (il suffit d’étudier response_code pour savoir si la transaction est validée ou annulée).

Voila ce tuto est terminé mais je le mettrai à jour en fonction de vos questions, suggestions et remarques. Donc n’hésitez pas à utiliser les commentaires j’essaierai de vous répondre dans la mesure du possible.

Vous pouvez également lire « les erreurs fréquentes lors de l’installation d’un paiement Atos« .

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *