Jump to content

Prestashop 1.6.1.1 - [Modules Atos] Paiements acceptés mais les commandes ne se génèrent pas, problème de retour réponse automatique.


Recommended Posts

Bonjour tout le monde,

                Je rencontre actuellement un problème de avec le module de paiement offciel Atos v2.9.24 sur une boutique prestashop 1.6.1.1.  Hébergé chez IONOS serveur  dédié clé en main.

                Le site tourne depuis des années sans problème, du jour au lendemain, nous recevons les paiements normalement mais les commandes ne se génèrent pas. Dans le backoffice de gestion de paiement de notre banque nous avons comme information :

"Etat réponse automatique:  UNDEFINED (Aucun envoi de réponse automatique n'a été défini (l'URL de la réponse automatique n'est pas renseigné))"

                Je pense que url que le module doit envoyer au le serveur de la banque n’est pas arrivé.

Sur un autre serveur VPS dédié de chez Ionos, J’ai fait un teste avec notre site secondaire en prestashop v 1.7, tout fonctionne normalement et j’ai fait une installation de prestashop 1.6.1.24 pour tester et le résultat était négatif, le même problème les commandes ne se génère pas.

                J’ai appelé le service monétique de la banque, ils ont dit que rien a changé de leur côté. Et du côté hébergeur IONOS voici la réponse : "Une mise à jour de sécurité récente a eu lieu, les modules de paiement utilisant la fonction curl de php doivent définir un « user_agent » d’au moins 4 caractères lors du paramétrage."

                Je n’ai vrai pas le niveau en php, mais avec beaucoup de chance je me débrouille et bidouille jusqu’à présent sans problème, mais pas cette fois-ci j’ai beau à chercher entre les lignes de atos.php et les autres fichiers php du module je n’ai rien trouvé en rapport avec curl, et j’ai vérifié entre les lignes de la version prestashp 1.7 rien non plus, je ne sais pas si le module utilise le curl. Du coup je ne sais pas si le problème est lié réellement au curl user_agent. Ou tout simplement le module est obsolète il faut acheter à nouveau ?  

Sinon je ne vois qu’entre ces lignes qu’on peut faire  peut-être quelques choses, mais je ne sais pas comment… ou il faut chercher ailleurs?

 

private function setSilentURL()
	{
		return Tools::getShopDomain(true);
	}

	private function getAtosForm($cart)
	{
		$lang = new Language((int)$cart->id_lang);
		$customer = new Customer((int)$cart->id_customer);
		$currency = new Currency((int)$cart->id_currency);
		$custom = (int)Configuration::get('ATOS_ALLOW_CUSTOM');

		$ps_url = Tools::usingSecureMode() && Configuration::get('PS_SSL_ENABLED_EVERYWHERE') ? Tools::getShopDomainSsl(true) : Tools::getShopDomain(true);
		$ps_url .= __PS_BASE_URI__;

		$ps_silent_url = $this->setSilentURL() . __PS_BASE_URI__;

		$ipn_page = $ps_silent_url.'modules/'.$this->name.'/validation.php';
		$cancel_page = $ps_url.'modules/'.$this->name.'/atos_return.php';
		if (version_compare(_PS_VERSION_, '1.5', '>'))
		{
			$back_url = $ps_url.'index.php?controller=order&step=3&';
			$return_page = $ps_url.'index.php?controller=order-confirmation&id_cart='.$cart->id.'&id_module='.$this->id.'&key='.$customer->secure_key.'&';
		}
		else
		{
			$back_url = $ps_url.'order.php?step=3&';
			$return_page = $ps_url.'order-confirmation.php?id_cart='.$cart->id.'&id_module='.$this->id.'&key='.$customer->secure_key.'&';
		}
		$redirect = Configuration::get('ATOS_REDIRECT') ? ' data=NO_RESPONSE_PAGE_POST="'.$return_page.'"' : '';

		// for 1.3 compatibility
		if (!isset($currency->iso_code_num) || $currency->iso_code_num == '')
		{
			$array_currency_iso_num = array(
				'DKK'	=> 208,
				'EUR'	=> 978,
				'USD'	=> 840,
				'GBP'	=> 826,
				'SEK'	=> 752,
				'AUD'	=> 036,
				'CAD'	=> 124,
				'ISK'	=> 352,
				'JPY'	=> 392,
				'NZD'	=> 554,
				'NOK'	=> 578,
				'CHF'	=> 756,
				'TRY'	=> 949,
			);
			$currency_num = $array_currency_iso_num[$currency->iso_code];
		}
		else
			$currency_num = $currency->iso_code_num;

		$return = ' normal_return_url="'.$return_page.'"';
		$cancel = ' cancel_return_url="'.$cancel_page.'"';
		$auto = ' automatic_response_url="'.$ipn_page.'"';
		$ip = ' customer_ip_address='.Tools::substr($_SERVER['REMOTE_ADDR'], 0, 16);

		$capture_day = (int)Configuration::get('ATOS_CAPTURE_DAY');
		$capture_mode = (int)Configuration::get('ATOS_CAPTURE_MODE') ? 'AUTHOR_CAPTURE' : 'VALIDATION';

		$custom_tpl = '';
		if ($custom === 1)
			$custom_tpl = ' templatefile=custom_tpl';

		$parm = 'merchant_id='.Configuration::get('ATOS_MERCHANT_ID').' language='.$lang->iso_code.
		' customer_id='.(int)$cart->id_customer.
		' caddie='.(int)$cart->id.
		' merchant_country=fr amount='.(int)round(sprintf('%f', $cart->getOrderTotal() * 100)).
		' currency_code='.$currency_num.
		' capture_day='.$capture_day.
		' capture_mode='.$capture_mode.
		' pathfile="'.dirname(__FILE__).'/pathfile" '.$return.$cancel.$auto.$ip.$redirect.$custom_tpl;

		$is_win = (Tools::strtoupper(Tools::substr(PHP_OS, 0, 3)) === 'WIN');
		if (!$result = exec($this->bin_dir.'request'.(((int)$is_win === 1) ? '.exe' : '').' '.$parm))
			return $this->l('Atos error: can\'t execute binary');

		unset($cart, $lang, $customer, $currency);

		$result_array = explode('!', $result);
		if ($result_array[1] == -1)
			return $this->l('Atos error:').' '.$result_array[2];
		elseif (!isset($result_array[3]))
			return $this->l('Atos error: can\'t execute request');
		return $result_array[3];
	}

              

               Ou il est temps que je migre vers la version 1.7 ?

Merci de pour vos aides.

Bonne journée.

Link to comment
Share on other sites

Merci pour votre réponse, je ne vois pas où chercher plus précisement, dans les pages de paiement que j'ai regardé rien de spéciale rien que les lignes les plus basiques, à moins que vous voulez dire la page complète de atos.php ou il faut chercher dans les dossiers de controller ?

Sinon je viens de découvrir ceci (en essayant de réinstaller avec une version pour 1.6 mise à jours du modules v3.5.1 atos )

Mais la ils parlent de la déconnexion alors ce n'est pas mon cas.

image.thumb.png.7300df3ece2f79327bd5dffdb464d7e5.png

Mais je l'ai fait quand même en suivant l'instruction pour la configuration de .htaccess en ajoutant la ligne demandée

Header always edit Set-Cookie (.*) "$1; SameSite=None; Secure"

Bien-sur ça ne marche toujours pas...

😫

 

Link to comment
Share on other sites

Désolé je suis bête... je suis partie tellement loin dans mes réflexions...

L'url est envoyé en MP.

Sinon après vérification dans les access log les requêtes du serveur de la banque n’apparait plus pour les paiement réussis donc ils sont bloqués quelque part avant d'arriver sur notre serveur.

Voici un aperçu d'une ligne lorsque une requêtes arrive sur notre serveur, mais depuis que le problème s'est manifesté plus aucune trace de l'ip du serveur de la banque.

193.56.46.0 - - [31/Aug/2021:09:47:11 +0200] "POST /modules/atos/validation.php HTTP/1.1" 200 - www.###notre-site###.fr "-" "" "-"

est-ce l'obligation des fonctions curl de php doivent définir un « user_agent » que IONOS exige est à l'origine de ce problème?

Link to comment
Share on other sites

Je viens de contacter IONOS, un technicien très claire dans ses explications confirme que le blocage des POST sans user_agent pour des raisons de sécurité, le problème touche pas mal de site notamment ceux qui tournent encore sous Atos 1.0 (ce service prendra fin définitivement vers la fin d'année) et apparemment d'autres hébergeurs aussi exigent les POST avec user_agent, la solution est du côté ATOS qui doit inclure un user_agent dans leur lignes de requêtes. Sinon changer de contrat avec la banque pour passer à l'Atos v2 peut-être une solution. Bon il reste plus a contacter la banque pour la suite.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...