Closed InformatiqueProg closed 8 years ago
on est 2 :)
Alors en attendant une résolution, il y a 2 moyens de contourner le problème:
1) Envoyer à paypal uniquement le total, sans le détail de la commande 2) Arrondir les prix à deux chiffres maximum après la virgule en base de données
Et... je viens peut être de trouver le problème: le calcul du total dans la boucle se fait $amount * $quantity sans arrondir $amount...
$products_amount+=$amount*$product->getQuantity();
$products_amount+=round($amount, 2)*$product->getQuantity();
Donc pour résoudre, il faudrait soit arrondir $amount avant de calculer le produit, soit peut être utiliser une autre variable qui ferait la somme paypal, et l'utiliser pour calculer le delta plutôt que getTotalAmount()
$products_amount_paypal +=round($amount, 2)*$product->getQuantity();
Pour information, le fil de cette discussion qui a commencé sur le forum http://thelia.net/forum/viewtopic.php?pid=68433#p68433
oui, c'est d'ailleurs moi qui répond sous le pseudo de Desproges sur le forum (j'ai demandé à le changer pour Asenar mais je n'ai pas eu de réponse …) .
Ah, petite précision ! Je ne suis pas sur que le problème vienne uniquement de paypal, mais bien aussi de Thélia, car dans la page juste avant la redirection paypal, on a bien potentiellement deux totaux différent (pour moi c'était 80,83 et 80,84). Donc ça se passe avant paypal.
Pour ce qui se passe avant Paypal, ces PR résolvent le problème des arrondis https://github.com/thelia/thelia/pull/1816 et https://github.com/thelia/thelia/pull/1810
closed by #25 also, #26 allow to not send order details
Dans la boucle indiquant à Paypal les produits Le prix TTC (arrondi) est utilisé. Quand Paypal vérifie que le total des produits est bien égal au total de la commande, si l'on a des quantités > 1, il y a de grandes chances d'avoir quelques centimes de différence...