[résolu] Ubercart: incompatibilité des modules PayBox et VAT

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour à tous,

J'aurais besoin de discuter avec quelqu'un qui à déjà utilisé (avec succés) le module de paiement PayBox sous Ubercart.

Je m'explique, je l'ai installé il y'a quelques temps et configuré (non sans mal) avec le script cgi fournit par PayBox. Je l'ai essayer à ce moment en mode test (config d'origine après installation du module) sans problème, je parvenais à la page de paiement test fournie par PayBox.

Alors que le temps presse et que le compte paybox est ouvert, j'ai constaté seulement aujourd'hui que même en mode démo, le module ne marche plus correctement. J'ai une page d'erreur au lieu d'accéder au formulaire de la page de paiement test fournie par PayBox.
Le module me retourne une erreur code 8, ce qui signifie selon Paybox que la date de validité de la carte est périmée alors que c'est justement sur cette page que je suis censé rentrer les infos de la carte... j'avoue que j'en reste un peu perplexe.

J'ai fait évidement tout une batterie de test, configurer le module paybox dans tous les sens, avec et sans debogage, avec et sans choix de carte, avec les ip autorisées d'origine, la mienne, celles fournies par paybox ou toutes en même temps, avec les identifiants vides, en mode démo, avec les génériques de tests fournis par PayBox, essayer deux versions du modules, toujours cette erreur code 8...

Si ca peut aiguiller certains, dans admin/store, j'ai toujours cet avertissement:
Aucune clé marchand. Paybox fonction en "mode demo".
(Je crois que c'était le cas aussi lors des premiers essais concluants)
Autre précision, l'erreur code 8 est précédée d'une autre ligne:
Content-type: text/html Cache-Control: no-cache, no-store Pragma: no-cache

Voila, j'espère avoir été assez précis et je tacherai de l'être d'avantage si une âme charitable veut bien se pencher sur mon cas...
J'ai écrit au développeur du module et j'attends sa réponse mais je compte beaucoup sur vous aussi.

Merci d'avance pour la moindre petite précision, docs, ou autre coup de pouce que vous pourriez m'apporter.

Benjamin

Version de Drupal : 

Bonjour

J'avance un peu grâce aux commentaires de khtuluu et de faberc (voir http://drupalfr.org/node/9353) qui m'ont bien orienté.

En effet le module VAT qui altère le calcul des prix d'ubercart empêche le bon fonctionnement du module PayBox, une fois désactivé je n'ai plus de problème. Helas j'ai besoin de ces deux modules conjointement. Il va donc falloir en modifier un des deux, et je crois que je vais commencer par me pencher sur VAT.

Le module VAT sert à afficher des prix TTC puis a déduire la TVA sur les factures, les commandes, etc... (Ubercart fonctionne nativement dans le sens inverse).
Le code d'erreur retourné par le module PayBox semble définir une variable numérique contenant une décimal alors que ce module ne supporte que les chiffes entiers.

Ma question est donc la suivante, comment faire pour que le module VAT ne passe plus des variables contenant un montant en euros mais plutôt en centimes, afin d'avoir des chiffres entier?
J'aimerai aussi savoir comment debuger ce module et voir les variables en clair car lorsque que j'affiche le code, ces dernières sont cryptées.
Une autre solution serait de se passer du module VAT, si quelqu'un à une idée je suis preneur.

Merci!

j'ai regardé vite fait dans le code du module VAT (le bon j'espère ^^)

regardes dans la uc_vat_form_uc_object_options_form_alter(&$form, $form_state)

ligne 136 tu as le calcul avec TVA il me semble

<?php
 $value
*= (1 + $tax->rate);
?>

et ensuite la ligne qui t'es fatale ligne 139

<?php
$form
['attributes'][$aid]['options'][$oid][$field]['#default_value'] = uc_store_format_price_field_value(round($value, 4));
?>

il arrondie a 4 chiffre apres la virgule (si ubercart multiplie par 100 ta valeur pour al mettre en centime il se peut que le problème vienne d'ici)

Merci je regarderai ca de prés mais... aussi incroyable que cela puisse paraitre, j'ai résolu mon souci presque par hasard.

Lorsqu'on active le module VAT, un nouveau gestionnaire de prix (du nom de VAT) est fourni à ubercart. On peut le désactiver sans pour autant désactiver le module VAT, or en désactivant juste le nouveau gestionnaire de prix, le module continue de fonctionner comme je le veux (cad permettre a mon client de rentrer des prix TTC puis en deduire la TVA) et le bug ne se produit plus.

Etrange non?
Un peu trop même, cette facilité me fait vraiment douter de la validité de cette solution...
Je vais retouner ma boutique dans tous les sens pour voir si j'ai des trucs bizarres mais a priori c'est bon... Enfin j'attends un peu avant de mettre résolu dans mon titre ;-)

En tout cas merci khtuluu!

Salut
En fait le problème n'était pas du tout resolu, j'avais simplement oublié de mettre à jour ma base de données, une fois fait, le problème est revenu.
Mais, Oh miracle...
Aujourd'hui même une version du module PAyBox vient de sortir, et resout tous les problemes.
Les notes de versions racontent cela:

#634922: Auto URL by manusam: Added url notification instructions.
#641548: Erreur Paybox -8 by pguillard: Fixed, add round() on payment total call to avoid paybox error.
Some minor correction on payment validation
Update fr translation

Exactement mon probleme! Resolu donc...
Un grand merci aux développeurs du module Paybox pour leur réactivité!

Bonjour,

Padonnez-moi de revenir sur ce sujet, mais j'ai exactement le même problème mais avec Ogone. En effet, si mon prix HT est de 9,90 euros, j'y ajoute la TVA, ce qui donne 11,84 euros.

En réalité, cela donne 11,8404 euros, et lorsque je lance le paiement, Ogone me dit : "amount too long or not numeric: length 6 MAX:15"

J'ai appelé le service technique d'Ogone qui me dit que la demande de paiement a été de 1184,04. Il y a donc le ",04" en trop.

Savez-vous où peut-on arrondir ce montant s'il vous plaît ? (pour que cela devienne 11,84 et non plus 11,8404)

J'ai essayé plusieurs solution trouvées sur Internet, mais cela ne fonctionne pas... Je pense que cela doit être dans un des modules d'Ubercart, mais je ne trouve pas lequel :(

Merci d'avance !

Salut Bertrand

En fait mon problème a été résolu par une nouvelle version du module PayBox, donc je n'ai ni eu à intervenir sur UberCart ni à modifier le module de paiement.
Je suis désolé de ne pouvoir t'aider, je ne connais absolument pas ogonne et je n'ai pas vu d'option ou de réglage simple du coté d'ubercart permettant d'arrondir les prix.
Cela dit à ta place je me pencherai du coté des gestionaire de prix, j'essairai de modifier celui d'ubercart mais surtout j'installerai le module VAT pour voir ce que ca donne...

Bon Courage!!!

Bonjour,

Je viens de résoudre le problème qui en fait persistait avec l'utilisation conjointe de Ubercart + le module VAT (pointeur paiement VAT activé) + Paybox et déclenchait une erreur de type "PAYBOX INPUT ERROR (code -8).

Après appel du support Paybox, il s'agissait d'une erreur sur le montant global de la transaction : ce montant doit être exprimé en décimal et donc sans point décimal.

Correction effectuée :

Dans le module uc_paybox : fichier uc_paybox.pages.inc ==> corriger l'instruction suivante

$chaine['total'] = " PBX_TOTAL=". round($order->order_total * 100, 2); telle quelle, l'instruction multiplie par 100 pour enlever les décimales, par contre le ... , 2) conserve le point décimal ==> d'où l'erreur

L'instruction corrigée est la suivante :

$chaine['total'] = " PBX_TOTAL=". round($order->order_total * 100, 0);

J'espère que cela pourra servir à l'un d'entre vous

@+