Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#1 07-12-2019 à 14:42
- GG le sympa
- Administrateur
- Lieu : Graçay
- Inscription : 03-08-2006 à 14:41
- Messages : 17 599
Erreur arrondi Paypal sur PrestaShop 1.6. Erreur de paiement
Quand un client paye avec PayPal parfois il y a une erreur de paiement le client voyant que son paiement a été annuler ou refuser et du coup il refait la commande alors qu'il a bien été encaissé
La première solution dans les paramètres généraux et de fixer la règle d'arrondi à l'infini et de mettre le type d'arrondi pour chaque article mais ça ne marche pas toujours surtout quand il y a des devises
Si vous voulez ne pas vous prendre la tête aller dans le dossier module Paypal.php ligne 2499
Remplacer
public function comp($num1, $num2, $scale = null)
{
// check if they're valid positive numbers, extract the whole numbers and decimals
if (!preg_match("/^\+?(\d+)(\.\d+)?$/", $num1, $tmp1) || !preg_match("/^\+?(\d+)(\.\d+)?$/", $num2, $tmp2)) {
return ('0');
}
// remove leading zeroes from whole numbers
$num1 = ltrim($tmp1[1], '0');
$num2 = ltrim($tmp2[1], '0');
// first, we can just check the lengths of the numbers, this can help save processing time
// if $num1 is longer than $num2, return 1.. vice versa with the next step.
if (Tools::strlen($num1) > Tools::strlen($num2)) {
return 1;
} else {
if (Tools::strlen($num1) < Tools::strlen($num2)) {
return -1;
} else {
// if the two numbers are of equal length, we check digit-by-digit
// remove ending zeroes from decimals and remove point
$dec1 = isset($tmp1[2]) ? rtrim(Tools::substr($tmp1[2], 1), '0') : '';
$dec2 = isset($tmp2[2]) ? rtrim(Tools::substr($tmp2[2], 1), '0') : '';
// if the user defined $scale, then make sure we use that only
if ($scale != null) {
$dec1 = Tools::substr($dec1, 0, $scale);
$dec2 = Tools::substr($dec2, 0, $scale);
}
// calculate the longest length of decimals
$d_len = max(Tools::strlen($dec1), Tools::strlen($dec2));
// append the padded decimals onto the end of the whole numbers
$num1 .= str_pad($dec1, $d_len, '0');
$num2 .= str_pad($dec2, $d_len, '0');
// check digit-by-digit, if they have a difference, return 1 or -1 (greater/lower than)
for ($i = 0; $i < Tools::strlen($num1); $i++) {
if ((int) $num1{$i} > (int) $num2{$i}) {
return 1;
} elseif ((int) $num1{$i} < (int) $num2{$i}) {
return -1;
}
}
// if the two numbers have no difference (they're the same).. return 0
return 0;
}
}
}
Par
public function comp($num1, $num2, $scale = null)
{
return 0;
}
Et le tour est joué
Évidemment ce n'est pas très propre mais quand on n'a pas trop le temps c'est toujours ça de gagné
Hors ligne
Pages : 1
- Accueil
- » Php, Mysql et Ajax
- » Erreur arrondi Paypal sur PrestaShop 1.6. Erreur de paiement