jack_daniels Posted January 2, 2012 Share Posted January 2, 2012 J'ai bien peur que la dernière version du module paypal (2.8.5) ne résout pas les problèmes d'arrondi sur la version 1.3.5 de prestashop. Si vous avez des infos je suis preneur... Link to comment Share on other sites More sharing options...
huguesmax Posted January 3, 2012 Share Posted January 3, 2012 Bon il y a un bug de conception dans le module paypal, je comprend meme pas que personne ne le corrige... ça sert a rien de faire des arrondis partout en esperant que les 2 montants soient egaux...( Amt et ITEMAMT , voir détails ci dessous ) L'erreur paypal est L_LONGMESSAGE0 -> The totals of the cart item amounts do not match order amounts. en facturation, on fait ( si tva=19,6% par exemple) le cas1 ===== Somme des prix HT * 1.196= Total TTC TVA = Total TTC - Somme(prix HT ) et pas le cas 2 ===== prix ttc =prix HT x 1.196 Somme ( prix ttc ) puis TVA = somme des prix ttc - somme des prix HT Prestashop fait le cas 1 et paypal le cas 2 ( soit tout le monde fait le cas 1, soit tout le monde fait le cas 2) donc tant que "Qté" est petit , avec les arrondis, ça marche, mais ( chez moi ) si qté >= 8 , ça fonctionne plus, 315,65 est différent de 315.68=8 X 39.46 Donc j'ai corrigé ça "rapidos" pour un client, en virant la transmission du détail de la commande qui est à l'origine du pb Vous éditez le fichier prestashop/modules/paypal/payment/paypalpayment.php vous corrigez la ligne 54 pour supprimer le champs Amt $request = '&PAYMENTACTION='.urlencode($paymentType).'&ReturnUrl='.urlencode($returnURL).'&CANCELURL='.urlencode($cancelURL).'&CURRENCYCODE='.urlencode($currencyCodeType).'&NOSHIPPING=1'; puis au dessus du if ($discounts == 0) je remet: $request .= '&L_NAME0=COMMANDE'; $request .= '&L_AMT0='.urlencode($paymentAmount); $request .= '&L_QTY0=1'; $request .= '&ITEMAMT='.urlencode($paymentAmount); $request .= '&Amt='.urlencode($paymentAmount); $request .= '&SHIPPINGAMT='.urlencode($shipping); $request .= '&TAXAMT=0'; du coup Amt est forcement égale a ITEMAMT, et égale a L_QTY0 *L_AMT0= donc ça marche a tous les coups. et j'ai mis en commentaire le cas $discount== 0 if ($discounts == 0) { #$products = $cart->getProducts(); #$amt = 0; #for ($i = 0; $i < sizeof($products); $i++) #{ # $request .= '&L_NAME'.$i.'='.substr(urlencode($products[$i]['name'].(isset($products[$i]['attributes'])?' - '.$products[$i]['attributes']:'').(isset($products[$i]['instructions'])?' - '.$products[$i]['instructions']:'') ), 0, 127); # $request .= '&L_AMT'.$i.'='.urlencode($this->PayPalRound($products[$i]['price_wt'])); # $request .= '&L_QTY'.$i.'='.urlencode($products[$i]['cart_quantity']); # $amt += $this->PayPalRound($products[$i]['price_wt']*$products[$i]['cart_quantity']); #} #$shipping = $this->PayPalRound($cart->getOrderShippingCost($cart->id_carrier, false)); #$request .= '&ITEMAMT='.urlencode($amt); #$request .= '&Amt='.urlencode($amt); #$request .= '&SHIPPINGAMT='.urlencode($shipping); #$request .= '&TAXAMT='.urlencode((float)max($this->PayPalRound($paymentAmount - $amt - $shipping), 0)); } else { .. } Voila en esperant que cela t'aidera bye Huguesmax. Détails du pb ========== si on décode ce qui est envoyé a paypal METHOD=SetExpress Checkout&VERSION=60.0 PWD=********* USER=XXXXXXXXXXXXXXX SIGNATURE=********* Amt=315.65 PAYMENTACTION=Sale ReturnUrl=http%3A%2F%2Fwww.web.fr CANCELURL=htt%3A%2F%2Fwww.web.fr CURRENCYCODE=EUR NOSHIPPING=1 SOLUTIONTYPE=Sole LANDINGPAGE=Billing LOCALECODE=FR EMAIL=email_client%40gmail.com L_NAME0=Article L_AMT0=39.46 L_QTY0=8 ITEMAMT=315.68 SHIPPINGAMT=0 TAXAMT=0 SHIPTONAME=hugues SHIPTOSTREET=22222 SHIPTOSTREET2= SHIPTOCITY=lyon SHIPTOSTATE=FR SHIPTOZIP=69100 SHIPTOCOUNTRY=FR SHIPTOPHONENUM=0000000 ADDROVERRIDE=1 Link to comment Share on other sites More sharing options...
jack_daniels Posted January 3, 2012 Author Share Posted January 3, 2012 Je cours essayer cela de suite. Merci! Link to comment Share on other sites More sharing options...
jack_daniels Posted January 3, 2012 Author Share Posted January 3, 2012 C'est pas mieux. J'utilise paypal express je ne rentre pas payment/paypalpayment.php mais dans standard/redirect.php le passage des paramètres à l'air de fonctionner différemment. Link to comment Share on other sites More sharing options...
huguesmax Posted January 3, 2012 Share Posted January 3, 2012 je n'ai pas utilisé cette version mais c'est assez simple a debuger active les logs d'erreurs dans le module paypal puis donnes moi le log de l'erreur ( en rouge ) tout ce passe lors de la construction de la requête a paypal prestashop/modules/paypal/express/paypalexpress.php a partir de la ligne 53 53: $request = '&Amt='.urlencode($paymentAmount).'&PAYMENTACTION='.urlencode($paymentType).'&ReturnUrl='.urlencode($returnURL).'&CANCELURL='.urlencode($cancelURL).'&CURRENCYCODE='.urlencode($currencyCodeType); Link to comment Share on other sites More sharing options...
mtomas Posted January 5, 2012 Share Posted January 5, 2012 Bonjour, Et bonne année ! Etant sur les mêmes versions de Prestashop et Paypal (la 2.8.5), je continue d'avoir cette erreur 10413. J'ai bien suivi les conseils précisés plus haut par huguesmax, le seul souci étant que j'ai plus de lignes de code que lui sous if ($discounts == 0), j'ai essayé de ne mettre en commentaire que celles qui avaient été postées, d'autres, rien n'y fait... Voici mon résultat en mode débug : PAYMENTACTION=Sale&AMT=1.01&CURRENCYCODE=EUR&IPADDRESS=www.grainedetomate.com&NOTIFYURL=http%3A%2F%2Fwww.grainedetomate.com%2Fmodules%2Fpaypal%2Fipn.php&BUTTONSOURCE=PRESTASHOP_ECM&SHIPTONAME(infos sur mon api et ma commande) L_NAME0=Tomatotest&L_AMT0=0&L_QTY0=101&ITEMAMT=0&SHIPPINGAMT=0&TAXAMT=1.01 Send with fsockopen method successful PayPal response: TIMESTAMP -> 2012-01-05T16:41:41Z CORRELATIONID -> f27d132c81d36 ACK -> Failure VERSION -> 60.0 BUILD -> 2271164 L_ERRORCODE0 -> 10413 L_SHORTMESSAGE0 -> Transaction refused because of an invalid argument. See additional error messages for details. L_LONGMESSAGE0 -> The totals of the cart item amounts do not match order amounts. L_SEVERITYCODE0 -> Error Je poste aussi le contenu de mon fichier paypalpayment.php. Finalement j'ai également mis en commentaire certaines lignes n'apparaissant pas dans le poste d'huguesmax. Si je me limite à ses lignes le résultat est le même ! if ($discounts == 0) { #if ($params['cart']->id_customer) { #$customer = new Customer((int)$params['cart']->id_customer); #$taxCalculationMethod = Group::getPriceDisplayMethod((int)$customer->id_default_group); } #else #$taxCalculationMethod = Group::getDefaultPriceDisplayMethod(); #$priceField = (($taxCalculationMethod == PS_TAX_EXC) ? 'price' : 'price_wt'); #$products = $cart->getProducts(); #$amt = 0; #for ($i = 0; $i < sizeof($products); $i++) { #$request .= '&L_NAME'.$i.'='.substr(urlencode($products[$i]['name'].(isset($products[$i]['attributes'])?' - '.$products[$i]['attributes']:'').(isset($products[$i]['instructions'])?' - '.$products[$i]['instructions']:'') ), 0, 127); #$request .= '&L_AMT'.$i.'='.urlencode($this->PayPalRound($products[$i][$priceField])); #$request .= '&L_QTY'.$i.'='.urlencode($products[$i]['cart_quantity']); #$amt += $this->PayPalRound($products[$i][$priceField] * $products[$i]['cart_quantity']); } #$shipping = $this->PayPalRound($cart->getOrderShippingCost($cart->id_carrier, false)); #$request .= '&ITEMAMT='.urlencode($amt); #$request .= '&SHIPPINGAMT='.urlencode($shipping); #$request .= '&TAXAMT='.urlencode((float)max($this->PayPalRound($paymentAmount - $amt - $shipping), 0)); } else { A CE MOMENT l'erreur est localisée sur le log à la ligne 78 : Thu Jan 05 17:56:59 2012] [error] [client 78.245.235.224] PHP Notice: Undefined variable: shipping in modules/paypal/payment/paypalpayment.php on line 78, referer: http://www.grainedetomate.com/modules/paypal/payment/submit.php Ligne 78 de mon code = ce que j'ai ajouté selon huguesmax $request .= '&SHIPPINGAMT='.urlencode($shipping); Voilà j'espère avoir été assez clair... Quelqu'un pour m'aider à résoudre ce problème une bonne fois pour toutes? Merci ! Link to comment Share on other sites More sharing options...
mtomas Posted January 6, 2012 Share Posted January 6, 2012 Bonjour, J'ai repassé paypalpayment.php en version d'origine 2.8.5 pour poster sur la forge et reprendre à zéro, mais si vous avez des conseils je reste preneur. Merci. Link to comment Share on other sites More sharing options...
mtomas Posted January 6, 2012 Share Posted January 6, 2012 Bonjour, Finalement après une recherche en anglais j'ai vu que Paypal n'aimait pas les produits au prix inférieur à un euro. Avec un test sur un produit à 1 euro ça marche. Dommage pour mes tests... Par contre cela ne résout pas totalement le problème car je suis en préparation d'un site de téléchargement avec des morceaux à 90 cents d'euros, donc le sujet reste ouvert pour ma part ! Link to comment Share on other sites More sharing options...
huguesmax Posted January 6, 2012 Share Posted January 6, 2012 Bonjour il faut bien vérifier que Amt =ITEMAMT, = L_QTY0 *L_AMT0 si tu as plusieurs produits Amt =ITEMAMT, = somme (L_QTY0 *L_AMT0 + L_QTY1 *L_AMT1) etc...et cela en TTC bien sur Donc si tu as un produit égale à 0 ça marchera pas Si tu n'as pas besoin des outils de facturations de paypal ( facture en ligne etc.. ) tu passes une commande, 1 produit, 1 montant Par contre si tu as besoin d'avoir le détail chez paypal, comme fait ce module actuellement, il faut repartir a l'envers Total TTC, on enlève la TVA puis on décompose en X produits en TTC et non pas on prend somme(Qté produit HT * TVA ) = Total commande ITEMAMT et d'un autre coté on envoie a payapl le resulat de Total HT * TVA = Amt on arrive rapidement ( en fonction de Qté ) a ITEMAMT différent a Amt, donc paypal refuse Si on triche et on met Amt partout ou ITEMAMT dans le code ( j'ai essayé ), il ralle encore car somme(Qté produit HT *TVA ) est différent V'la je sais pas si j'ai été très assez clair Link to comment Share on other sites More sharing options...
J-Michel Posted January 12, 2012 Share Posted January 12, 2012 Bonjour, Il y a un gros bug avec la gestion de TVA chez Paypal. Je cherche toujours la solution pour ne pas envoyer le détail de la commande à paypal. Pouvez-vous m'indiquer la partie exacte à modifier? Paypal v2.8.5 Par avance merci. J-Michel Link to comment Share on other sites More sharing options...
bfsat Posted April 10, 2012 Share Posted April 10, 2012 Merci huguesmax pour ta correction, ça marche nickel ! c'est quand même grave que prestashop n'ai toujours pas résolue ce problème! Link to comment Share on other sites More sharing options...
MathieuB Posted August 6, 2013 Share Posted August 6, 2013 le module paypal integral évolution pour sa part refait le calcul total panier ht+ total des taxes + frais de livraisons ttc et ne tient pas compte du coup des arrondi Prestashop. Je vous conseil d'utiliser cette variable pour récupérer le total ttc du panier : $wk_montant = $cart->getOrderTotal(); $subtotal = number_format(($wk_montant), 2, '.', '') ; et d'utiliser cette variable $subtotal pour transmettre le montant total du panier (shipping inclus) je joint mon module en pièce jointe fonctionnel pour paypal intégral évolution sur boutique Prestashop 1.4.5.1 paypal.zip Link to comment Share on other sites More sharing options...
alexgn Posted September 26, 2013 Share Posted September 26, 2013 Ayant le même problème d'arrondi, je l'ai résolu en changeant la règle d'arrondi dans les préférences de Prestashop en passant de "supérieur" à "classique". MaConfig: Prestashop v1.4.9.0 Paypal v3.0.9 Link to comment Share on other sites More sharing options...
FLB Posted June 28, 2015 Share Posted June 28, 2015 Bonjour, Je viens d'installer Paypal sur Prestashop. J'ai un problème lorsque je choisis le mode de paiement Paypal, le montant n'est pas le même que dans le panier. Mon panier : 100 articles a 0.07€HT + 8€HT de frais de port ce qui fait 3€ de TVA a 20% ce qui fait 18€TTC, c'est OK Je me retrouve dans Paypal avec 8€ TTC d'articles + 9.6€ TTC de Frais de port ce qui donne au total : 17.6€TTC Paypal fait l'arrondi sur les articles pas sur le total : 100 articles a 0.07€HT = 0.07€HT + 20%TVA = 0.084TTC que paypal arrondi a 0.08, ce qui donne un total TTC de 8€. Prestashop fait 100 * 0.07€HT = 7€HT + 20%TVA = 8.4TTC Comment résoudre ce problème ? Merci de votre retour:) Cordialement. Link to comment Share on other sites More sharing options...
Zebx Posted June 30, 2015 Share Posted June 30, 2015 Bonjour, C'est un problème dans le module Paypal qui n'est apparemment toujours pas compatible avec les boutiques à affichage de prix HT. Il vous faudra donc modifier le code du module si vous souhaitez fonctionner en HT... J'avais donné une solution il y a plus d'1an dans le sujet suivant : https://www.prestashop.com/forums/topic/331068-bug-paypal-368-ou-37-et-paniers-hors-taxes/ A+ Zebx Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now