Page 1 sur 1

Récupérer la confirmation de paiement avec le système ATOS

Posté : 05 nov. 2009, 11:20
par kenru62
Bonjour à toutes et à tous.
Voilà, je travaille actuellement pour un client qui possède un compte VAD au Crédit Agricole. Comme bon nombre de boutiques en ligne, il utilise la solution d'ATOS /E-transaction.

Mon problème est le suivant. Vous effectuez une commande sur un site marchand. Pour retirer du stock le produit que vous venez de commander, il faut être sûr que le client l'a acheté ! A priori, le CA vous envoi un mail pour vous donner le résultat des différentes transactions de la journée. Le problème est le suivant :

Imaginez que vous ayez en stock 10 DVD et que 6 clients font mines de l'acheter mais, au dernier moment, une fois sur le site de la banque, renonce et coupe leur navigateur... Si vous effectuez un retrait post-paiement, vous venez de retirer de votre stock 6 DVD alors qu'ils n'ont pas étés vendus. Et si jamais 6 autres clients l'achètent, deux d'entre eux se verront refuser, faute de stock...

Ma question est donc la suivante : Comment s'assurer que le client à bien acheté mon DVD en temps réel? Est-il possible de récupérer tout de suite, la validation du paiement?

Merci de vos réponses.

Re: Récupérer la confirmation de paiement avec le système ATOS

Posté : 05 nov. 2009, 12:11
par fab
Tu dois avoir moyen de rediriger après le paiement regarder de ce côté là :)

Re: Récupérer la confirmation de paiement avec le système ATOS

Posté : 05 nov. 2009, 12:19
par kenru62
Ok merci beaucoup. A+

Re: Récupérer la confirmation de paiement avec le système ATOS

Posté : 05 nov. 2009, 14:33
par mojorisin
Bonjour,
il faut regarder du coté de l'appel http automatique du serveur bancaire vers votre serveur sur atos il faut utiliser automatic_response_url.
Cette url est systématiquement appelé par le service bancaire indépendamment de ce que fait l'internaute.

Une solution envisageable :
- l'internaute finalise sa commande
- decompte du stock
- redirection vers le serveur de la banque

Dans la reponse automatique effectuée par le service bancaire :
- paiement ok : marquage de la commande comme payée
- paiement ko : marquage de la commande comme annulée et réincrémentation du stock

Re: Récupérer la confirmation de paiement avec le système ATOS

Posté : 05 nov. 2009, 17:42
par @rthur
Hello,

Et vu que j'ai bossé la nuit dernière dessus, voila le fichier call_autoresponse.php d'exemple fourni avec la version de mon système ATOS.
Attention, je ne sais pas si tu as la même version (P600) mais tu peux t'en inspirer ou à défaut demander le kit exemple à ta banque...
<!--
-------------------------------------------------------------
 Topic	 : Exemple PHP traitement de l'autoréponse de paiement
 Version : P600

 		Dans cet exemple, les données de la transaction	sont
		décryptées et sauvegardées dans un fichier log.

-------------------------------------------------------------
-->

<?php

	// Récupération de la variable cryptée DATA
	$message="message=$HTTP_POST_VARS[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_du_fichier_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 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 = explode ("!", $result);

	$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];


	// Initialisation du chemin du fichier de log (à modifier)
    //   ex :
    //    -> Windows : $logfile="c:\\repertoire\\log\\logfile.txt";
    //    -> Unix    : $logfile="/home/repertoire/log/logfile.txt";
    //

	$logfile="chemin_du_fichier_de_log";

	// Ouverture du fichier de log en append

	$fp=fopen($logfile, "a");

	//  analyse du code retour

  if (( $code == "" ) && ( $error == "" ) )
 	{
  	fwrite($fp, "erreur appel response\n");
  	print ("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 réponse

	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");
	}

	fclose ($fp);


?>

Re: Récupérer la confirmation de paiement avec le système ATOS

Posté : 07 nov. 2009, 23:57
par delete
Salut,

Je n'ai pas lu les conditions des ces forums, donc je ne sais pas si je peux citer un lien externe...

Mais concrétement il y a un bon tuto sur ATOS > http://thierry-godin.developpez.com/php/atos/

Désolé si j'ai dérogé à une règle

Re: Récupérer la confirmation de paiement avec le système ATOS

Posté : 08 nov. 2009, 04:48
par fab
Les liens externes ne sont pas interdits sur le forum ( dans la limite du raisonnable bien sur ) bien au contraire :) Nous sommes les premiers à renvoyer sur des tuto ou articles de phpdebutant et autres :)

Re: Récupérer la confirmation de paiement avec le système ATOS

Posté : 21 oct. 2016, 18:19
par Commando
Salut,

Je n'ai pas lu les conditions des ces forums, donc je ne sais pas si je peux citer un lien externe...

Mais concrétement il y a un bon tuto sur ATOS > http://thierry-godin.developpez.com/php/atos/

Désolé si j'ai dérogé à une règle
Merci pour ce lien et merci à @rthur pour ce super code.
Je suis en apprentissage du PHP et ça me fera de quoi étudier !

Au plaisir,
Commando