Skip to content

Send the transaction amount to Paystack as an integer number of kobo#70

Open
iammcoding wants to merge 1 commit into
PaystackHQ:masterfrom
iammcoding:fix-kobo-amount-rounding
Open

Send the transaction amount to Paystack as an integer number of kobo#70
iammcoding wants to merge 1 commit into
PaystackHQ:masterfrom
iammcoding:fix-kobo-amount-rounding

Conversation

@iammcoding

Copy link
Copy Markdown

The amount was calculated as $order->getGrandTotal() * 100. Grand totals are floating point, so multiplying by 100 introduces the usual float representation error and the value is then JSON encoded and sent to Paystack as a fractional number.

For example a 19.99 order total becomes 1998.9999999999998 instead of 1999, and is sent as {"amount":1998.9999999999998}. Paystack expects the amount in the currency subunit (kobo) as an integer, so a fractional amount is either rejected or truncated, which undercharges the customer. Other common totals hit this too: 1.10 -> 110.00000000000001, 0.29 -> 28.999999999999996, 8.21 -> 821.0000000000001.

Wrapping the calculation in (int) round(...) sends a correct integer amount for every total.

The amount was calculated as $order->getGrandTotal() * 100. Grand totals
are floating point, so multiplying by 100 introduces the usual float
representation error and the value is then JSON encoded and sent to
Paystack as a fractional number.

For example a 19.99 order total becomes 1998.9999999999998 instead of
1999, and is sent as {"amount":1998.9999999999998}. Paystack expects the
amount in the currency subunit (kobo) as an integer, so a fractional
amount is either rejected or truncated, which undercharges the customer.
Other common totals hit this too: 1.10 -> 110.00000000000001,
0.29 -> 28.999999999999996, 8.21 -> 821.0000000000001.

Wrapping the calculation in (int) round(...) sends a correct integer
amount for every total.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant