Jump to content

[PROBABLE RESOLUTION] erreur de paiement...


henribaeyens

Recommended Posts

Ce n'est pas la première fois :

message retourné après paiement via paypal.


Attention : 57.50 payé au lieu de 57.49


Produits : 50.92
Transport : 6.58
Total : 57.49 (!!!)

Payé : 57.50

PS version 1.2.5

C'est plutôt ennuyeux. Serait-ce dû au fait que ps utilise 6 décimales pour les prix (pourquoi pas directement 2 ??) et que les arrondis finissent par chier dans le ventilo ?

h


Edit: ci-joint 2 captures d'écrans. A noter : lorsque l'on arrive sur la page du produit, le prix indiqué est de 50.92 puis passe à 50.91 dans la seconde suivante (va savoir pourquoi). Ce dernier prix est désormais pris en compte dans le calcul du panier, expliquant la différence remarquée.

16223_j7HzrJNNZtQDD3KFmQbs_t

16224_FbW4r3p1f1pv0NDqW9qc_t

Link to comment
Share on other sites

  • 2 weeks later...

j'ai peut-être trouvé le problème. Je dois faire des tests avant de soumettre les corrections. C'est bien prestashop qui se plante dans ses calculs, de pas grand chose certes, mais c'est suffisant pour que l'inégalité entre le total panier (total_paid) et ce qui est chargé au client (total_paid_real) déclenche l'erreur de paiment.
A suivre.

Link to comment
Share on other sites

les corrections suivantes semblent résoudre le problème :

/classes/Cart.php (dans les 2 fonctions suivantes, le 4e argument de getPriceStatic devient 2)

getProducts :

$row['price'] = Product::getPriceStatic(intval($row['id_product']), false, isset($row['id_product_attribute']) ? intval($row['id_product_attribute']) : NULL, 2, NULL, false, true, intval($row['quantity']));
$row['price_wt'] = Product::getPriceStatic(intval($row['id_product']), true, isset($row['id_product_attribute']) ? intval($row['id_product_attribute']) : NULL, 2, NULL, false, true, intval($row['quantity']));



getOrderTotal :

$price = floatval(Product::getPriceStatic(intval($product['id_product']), $withTaxes, intval($product['id_product_attribute']), 2, NULL, false, true, $product['quantity']));




/modules/blockcart.php (dans la fonction suivante, le 4e argument de getPriceStatic devient 2)

smartyAssigns :

$products[$k]['real_price'] = Product::getPriceStatic($product['id_product'], intval(Configuration::get('PS_PRICE_DISPLAY')) == 1 ? false : true, $product['id_product_attribute'], 2, NULL, false, true, $product['cart_quantity']) * $product['cart_quantity'];




La modif suivante peut corriger des erreurs d'arrondis lors du changement d'affichage des prix (dans la page produit)

/themes/votre-theme/js/products.js

updateDisplay :

$('#our_price_display').text(formatCurrency(formatPrice(priceProduct), currencyFormat, currencySign, currencyBlank));
$('#pretaxe_price_display').text(formatCurrency(formatPrice(productPricePretaxed), currencyFormat, currencySign, currencyBlank));
$('#old_price_display').text(formatCurrency(formatPrice(productPriceWithoutReduction2), currencyFormat, currencySign, currencyBlank));
$('#ecotax_price_display').text(formatCurrency(formatPrice(selectedCombination['ecotax']), currencyFormat, currencySign, currencyBlank));



of course, remember that your mileage may vary.

Link to comment
Share on other sites

  • 2 weeks later...



La modif suivante peut corriger des erreurs d'arrondis lors du changement d'affichage des prix (dans la page produit)

/themes/votre-theme/js/products.js

updateDisplay :

$('#our_price_display').text(formatCurrency(formatPrice(priceProduct), currencyFormat, currencySign, currencyBlank));
$('#pretaxe_price_display').text(formatCurrency(formatPrice(productPricePretaxed), currencyFormat, currencySign, currencyBlank));
$('#old_price_display').text(formatCurrency(formatPrice(productPriceWithoutReduction2), currencyFormat, currencySign, currencyBlank));
$('#ecotax_price_display').text(formatCurrency(formatPrice(selectedCombination['ecotax']), currencyFormat, currencySign, currencyBlank));



of course, remember that your mileage may vary.



salut
dans le dernier bloc de modif, quelle est la correction apportée dans le détail?
A te lire.
A+
Link to comment
Share on other sites

c'est l'appel à formatPrice. Il faut donc inclure price.js ou copier la fonction soit dans tools.js soit dans product.js
Normalement ça doit marcher, mais, avec javascript, on est jamais à l'abri : un effet imprévu, consécutif à un changement, peut se produire et faut repartir à zéro; Et comme PS utilise des tonnes de javascript... beaucoup trop à mon goût... A tester avec circonspection donc.

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...