THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline


Bonjour,

Dans certains cas, il y a une différence de 0,01 centimes entre la somme du prix des articles et la somme finale affichée (et à payer).

Les frais de livraisons sont nuls avec le module "FreeShipping", mais si je choisi un autre transporteur, le problème existe quand même.

J'ai dans mon panier 5 produits :
1 x 20.83
1 x 15
1 x 16.67
2 x 14.17

Si je somme ce que je vois: 20.83+15+16.67+14.17. +14.17 = 80.84
Ou si je somme avec ce que je trouve en base: 20.83 + 15 + 16.67 + 14.16667+14.16667 = 80.83334

Et c'est je pense la raison pour laquelle j'ai quelque chose d'incohérent au moment de payer:

Frais de livraison 	0,00 €
Total HT 	80,83 €
Total TTC 80,84 € 

Le plus gros problème, c'est que lorsqu'on envoi les informations à paypal (arrondies a 2 chiffres après la virgule), Paypal trouve une erreur entre le total, et la somme des produits, et refuse aussi sec avec une page d'erreur "gotopaypalfail.html" et une absence d'explication.

En cherchant un peu entre le mode dev et le log/log-paypal.txt. je trouve donc ce message

error: [10413] the cart item amounts do not match order amounts.

Je ne sais pas trop ce qu'il faut modifier :
- Le module paypal (changer la boucle de calcul et faire les arrondis différemment pour que ça marche, au risque de faire un prix différent que ce qui est affiché sur la boutique) ?
- Ce que donne $order->getTotalAmount() , ou $order_product->getPrice() ?
- dire aux utilisateurs (admin) de s'arranger pour ne pas faire plus de 2 chiffres après la virgule (cause perdue)?
- empêcher coté admin de saisir plus de 2 chiffres après la virgule (ce qui est gênant quand on préfère avoir des prix ronds)
- autre chose ?

Je connais encore assez peu Thélia (et Symfony) mais je commence à plus ou moins me repérer, mais c'est l'occasion de me retrousser les manches si on m'aiguille un peu smile


Michaël Marinetti
arrive à Thélia doucement mais surement.
@Asenar

Offline


Bonjour,

J'ai constaté le même problème, j'ai ouvert une issue à ce sujet :
https://github.com/thelia-modules/Paypal/issues/22

J'ai cherché un moyen dans l'API de PAYPAL pour résoudre ce problème comme donner un total TTC produit, mais je n'ai pas trouvé...

Finalement, j'ai modifié le  module pour ne plus envoyer la liste des produits de la commande, mais un seul produit "commande"
(comme font les autres modules de paiement d’ailleurs).

J'ai commenté les lignes 79 à 106 (boucle produit + delta) et ajouté après

$products[0]["NAME" . $i] = urlencode(Translator::getInstance()->trans("Order"));
$products[0]["AMT" . $i] = round($order->getTotalAmount($useless, false),2);
$products[0]["QTY" . $i] = 1;

EDIT:
J'ai peut-être oublié de donner le fichier à modifier...
Paypal\Controller\GotoPaypal.php

Last edited by informatiqueprog (04-12-2015 08:49:11)

Offline


Merci

En attendant, je vais suivre ton exemple car avoir un produit à 25,01€ c'est pas terrible (je n'ai pas besoin que Paypal sache particulièrement tout le contenu du panier), et j'ajoute l'id de la commande dans le nom du produit.

Sinon en regardant les solutions proposés chez d'autres solution (par exemple ici pour Magento, il rajoute la différence de somme dans le prix de la première ligne... là où Thélia fait mieux en rajoutant le $delta dans une nouvelle ligne...

Il y a peut être un problème d'arrondi entre floatval, round, et SUM(mysql)

à moins que ça puisse être résolu en changeant la ligne 87 pour moi:

$products_amount+=$amount*$product->getQuantity();

pour devenir

$products_amount+=round($amount, 2)*$product->getQuantity();

Mais je n'ai pas le temps de tester là, je vais prendre ta solution qui me semble plus sûre smile


Michaël Marinetti
arrive à Thélia doucement mais surement.
@Asenar

Offline


Effectivement l'ajout d'une nouvelle ligne produit "delta" avec ce contrôle en plus doit pouvoir résoudre le problème,

maintenant ce produit "delta" n'existe pas dans la commande,
personnellement cela me gêne d'afficher le détail de commande avec un produit "virtuel" que le client n'a pas demandé et avec un prix, même de quelques centimes...

Offline


Je rencontre le même problème et ai tenté le fix proposé plus haut dans le fichier GotoPaypal.php du module Paypal.
Sans succès, j'ai toujours le même message d'erreur:

"Le moyen de paiement n'indique pas le même montant que votre panier. Rechargez la pager et réessayez."

Je vais voir si j'arrive à debugguer quelque chose...
l.

EDIT : après un premier debug, je constate que le module StripePayment fait conflit avec le module Paypal.
il capte l'event TheliaEvents::ORDER_PAY et empêche Paypal de lancer GotoPaypal::go, d'où le fait que la modif indiquée ci-dessus n'a aucun effet.

Last edited by neywen (26-12-2015 20:58:09)

Offline


Je confirme que chez moi ça a marché

Je prépare une pull request pour rendre ça optionnel dans le module, en attendant tu as le diff ici sur mon github


Michaël Marinetti
arrive à Thélia doucement mais surement.
@Asenar

Offline


yes, merci beaucoup pour la réponse, j'ai EDIT mon message, j'ai également un problème de conflit entre le module Paypal et le module StripePayment, qui fait que la méhode GotoPaypal::go n'est jamais appelée.
Je prends un peu de temps pour voir si j'arrive à régler le conflit.

l.

Offline


J'ai pu régler le conflit entre le module StripePayment et Paypal.
j'ai proposé un PR au proprio : https://github.com/thelia-modules/StripePayment/pull/1

Et du coup, j'ai pu tester proprement le paiement Paypal avec ton fix, et je confirme que ça marche bien.
Merci pour ton aide,
cheers,
l.