-
Notifications
You must be signed in to change notification settings - Fork 16
Description
Bug reported by Leonidas D.
mpay24-php / src / Requests / ManualCredit.php
Methode setAmount():
/**
* @param int $amount
*/
public function setAmount($amount)
{
$this->amount = (int)$amount;
}
Das TypeCasting das hier via (int) stattfindet kann zu unerwarteten, forcierten Rundungsergebnissen führen, zumindest wo ich es getestet habe.
So z.B. ein Fall mit:
$amount=17.90;
// $amount ist hiermit ein float
$mpay24->refund(‘00000000000’, ($amount * 100));
// Übergeben wird nun zwangsläufig ein float, aber halt ohne Nachkommastellen
public function setAmount($amount)
{
$this->amount = (int)$amount;
// $this->amount ist nun 1789
}
Das ist wie es bei den Gutschriften zum Rundungsproblem kam. War halt völlig unerwartet und tauchte beim Test nicht auf, denn interessanterweise gibt es Beträge wo das nicht passiert. 25,90 => kein Problem. 19,20 => kein Problem. 17,90 => Problem!
Natürlich kann man dem entgegenwirken indem man schon vorher einen Integer übergibt. Aber vielleicht wäre in den Funktionen die den Amount annehmen die Erwartung einen Integer zu erhalten besser als es nachher zu typecasten:
/**
* @param int $amount
*/
public function setAmount(int $amount)
{
$this->amount = (int)$amount;
}