Toutes les clefs pour réussir dans le e-commerce

Mes modules Prestashop

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 == "" ) && ( $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“.

Si vous désirez que je me charge de l’installation de votre paiement sécurisé sur votre site, n’hésitez pas à me contacter.

Poster un Commentaire

35 Commentaires sur "Installation d’un paiement ATOS SIPS – tutoriel seconde partie"

Recevoir un email pour
avatar
Trier par:   plus récent | plus vieux | Plus de vote
Amanda
Invité

Merci pour ce tutoriel simple et clair qui devrait aider pas mal de monde

gisan pls46ne
Invité

Thx pour ce tuto hyper simple !!

Einar MOOS
Invité

Bonjour,

Le site bestfoiegras.com marchand a fonctionné sur une ancienne version ATOS/SIPS; après une mise-à-jour de OSC 2.2 et ATOS 6 le paiement en ligne par e-transactions ne fonctionne plus:

Le fichiers sont bien installé, les “request” et “reponse” dans le dossier /atos/.

La page des CC de la banque s’affiche, mais je n’ai pas de rétour des commandes.

Je suis étonné par vos fichiers response.php, call_request.php, et call_response.php qui ne figurent pas dans la version OSC 2.2, par contre atos_response.php est présent.

Dans l’ancienne version du site les fichiers “request” et “response” étaient dans le répertoire /cgi-bin/, à la racine du site (sur OVH) et le chemin évidement été /homez.yy/xxxxx/cgi-bin/request.

Avec remerciement,

— einar

d godefroy
Invité
d godefroy

est-ce que quelqu’un a pu installer atos sur des systemes non bases sur linux et processeurs de type x86 intel ou compatibles? (windows exclu aussi)

jyo
Invité
jyo

Pour:
// Initialisation du chemin de l’executable response
$path_bin = “/homez.316/monsite/cgi-bin/response”;

Je recommande:

$path_bin = realpath(‘/’).”/cgi-bin/response”;

C’est sans doute évident pour la majorité d’entre vous, cela permet de s’affranchir d’une modification du Home Dir de l’utilisateur.

jeorcal
Invité
jeorcal

request non trouvé , pourtant le chemin est bon (phpinfo.php) les droits dossier et fichiers sont en 755 et l’api est 64 bits sur serveur 64 bits

jamais vu une merde comme ce truc d’atos

Olivier
Invité
Olivier

Bonjour !

Mon problème est étrange. Tout semble fonctionner, j’ai un envoie d email au client en cas de paiement, et la carte fonctionne (je suis en pré-prod, donc je ne peux pas vérifier si le débit est effectif, mais a priori, tout est bon).
Mon souci, c’est que quand je reviens sur ma page MERCI.PHP ou ANNULATION.PHP, dans les deux cas, j’ai ce message d’erruer, venant de Call_Response.php :
———
Erreur appel API de paiement.
message erreur :
API ERROR
Error get DATA response parameter (wrong length)
———

Je n’arrive pas a m’en défaire, et je ne comprends vraiment pas ou est l’erreur !

Merci à toi Manitac en tout cas, ton tuto m’a enlevé une fière chandelle du pied !

Benoît
Invité
Benoît

Bonsoir,

Chacun sait que les 2 problèmes principaux sont: les droits sur les fichiers et répertoire et la déclaration des chemins…

Pour compliquer voici un jolie bug sur lequel j’ai séché aujourd’hui :

les variables F_DEFAULT, F_PARAM et F_CERTIFICATE du fichier pathfile sont limitées en taille!!! (78 caractères je crois mais j’ai pas le courage de vérifier!)
J’ai donc été obligé de déplacer mon site dans l’arbo du serveur… grr

Bon courage

sofyt
Invité
sofyt

Merci pour ce tuto
mais comment le commerçant peut-il savoir que le paiement a été effectué
merci
sophie

nono
Invité

Bonjour,

Je suis développeur mais je comprends pas comment installer Atos pour que les clients puissent acheter des abonnements par carte bancaire. On pourrait avoir un exemple de ce fichier save_abo_bdd.php.
En fait ce que je comprends pas c’est comment les abonnements peuvent être payer car je cherche à faire payer les clients chaque mois sans qu’ils n’aient rien à faire?

Merci pour vos explications ce tuto est plutôt réussi, et merci d’avance pour m’éclairé sur mes questions

Bonne journée :)

Mixa38
Invité
Mixa38

Bonjour,

(Très bon tuto soit dit au passage !)
J’ai une solution de télépaiement via Mercanet sur mon site web qui tourne sans problème depuis quelques années. Par contre, pour 0.5% des télépaiements, je n’ai pas de retour de la banque lorsque le paiement est réalisé. La ligne AUTO_RESPONSE_URL!http://… est bien appelée, mais les requêtes (de mise à jour de la base de données …) ne s’exécutent pas dans ce fameux fichier AUTO_RESPONSE_URL, comme si toutes les variables avaient été perdues en cours de route entre la banque et mon retour serveur.
Quelqu’un aurait une idée ? Merci !

karrace
Invité

bonjour,
J’ai installé le système mercanet sur mon site et j’en suis au niveau pré production, tout semble fonctionner mais au moment de rentrer le numéro de carte bleue, le montant de la transaction reste à 1 euros, comment faire coincider le montant du panier avec le montant à débiter?

merci

karrace
Invité

update
j’ai reussi! sauf que le montant n’est pas tout a fait le bon, pour un panier de 770 euros par exemple, le montant de paiement est de 7,70 euros! que faire?

karrace
Invité

oui mais c’est une variable, le montant du panier n’est jamais le meme, l’internante n’achète pas la meme chose, comment dire à la variable de multiplier par 100 ?

karrace
Invité

tu vas me prendre pour une quiche!
voici ce qu’il ya dans le call request :

$parm=”$parm amount=$wa_market_total_price”;

$wa_market_total_price est la variable du montant de mon panier, c’est a ce niveau la que je dois modifier?

karrace
Invité

ca y est j’ai trouvé!

pour info :

$montant=($wa_market_total_price*100);
$parm=”$parm amount=”.$montant;

philippe
Invité
philippe

Mercicet bravo pour ce tuto.
Par contre j’ai bataillé pendant 24 h sur une erreur pensant qu’elle venait du code. Pas du tout ! En fait le problème venait du transfert de fichier par FTP File Zila. Il faut absolument coché transfart binaire dans le menu édition de File Zila car request et response sont des fichiers binaires. Alors pensez y !
Cordialement.

Devmar
Invité
Devmar

Bonjour,

Merci pour ce tutoriel magnifique, ça m’a beaucoup aidé pour ma première installation de l’outil sips, toutefois j’ai un souci que je n’arrive pas a résoudre.

Sur mon fichier call_autoresponse.php, tout s’exécute normalement (fichier log affiche les transactions).

Toutefois, le fichier de mise à jour de la base de données (cité ici comme save_abo_bdd.php) ne s’exécute pas.

Si je copie le contenu du fichier save_abo_bdd.php dans mon fichier call_autoresponse.php les scripts de mise à jour s’exécutent normalement.

— j’ai vérifié les chmod des fichiers (755)
— j’ai utilisé le fichier call_autoresponse.php à la place du fichier call_response.php il s’exécute normalement.
— J’ai vérifié les chemins des fichiers en include, ils sont tous OK.

Seuls les fichiers qui sont en include ne s’exécutent pas.

Auriez-vous déjà rencontré ce problème ?

Merci

Miral
Invité
Miral

Bonjour,
je te signale une erreur, dans le fichier call_response.php, ligne 066 il faut remplacer amp;amp;amp;&amp;amp; par & .
Sinon très bon tuto !

Faquarl
Invité
Faquarl

Bonjour,
Merci pour ce tutoriel.
De mon côté, je sauvegarde toutes les données en base mais je ne trouve nul part la taille des variables de retour et je n’ai pas envie de mettre de longs varchars partout…
Auriez-vous des informations pouvant m’aider?

Merci

PATRICE INFORMATIQUE
Invité
PATRICE INFORMATIQUE

Bonjour
J’utiliser ce plugin sur un site woocommerce
J’aimerai savoir si il est possible d’autocompleter les commandes en cours à complète ?
Puisque les produits de la boutique ne sont que virtuels système de ticket en ligne

Merci

wpDiscuz