Abstract Builder
Base builder shared by every transaction-type-specific builder below (PurchaseBuilder, PurchaseWithCashbackBuilder, LoadBuilder, FundingBuilder, ForcedAcceptanceBuilder, CashAdvanceBuilder, CreditBuilder). Each subclass fixes TransactionRequest.type to the one it was created for and only exposes the fields that apply to that type - for example only PurchaseWithCashbackBuilder exposes cashbackAmount(...), since that field is meaningless for every other TransactionType. There is intentionally no generic builder that lets a caller pick an arbitrary type and then guess which other fields apply to it.
Inheritors
Functions
Amount to charge.
amount taking the ISO-4217 numeric currency code - the officially supported form, for example amount(1050, 2, 756) for CHF 10.50 - instead of the alphabetic code.
Amount to charge, expressed with fractionDigits fraction digits instead of currency's own default, for example amount(1050, 2, "CHF") for CHF 10.50 - useful when the value is only known at a different (or unknown) scale, for example digit-by-digit from a UI text field typed by a cashier, without needing java.math.BigDecimal. Rescaled to currency's actual minor units, rounding half up if fractionDigits is more precise than the currency supports.
Builds the TransactionRequest.
Sets pan/expiryDate/cvc2 together for manual PAN key entry ("MPKE") - see TransactionRequest.pan for field meaning. cvc2 is optional.
Sets TransactionRequest.transactionId. Optional - defaults to a random UUID if never called. Set explicitly to control it, for example to persist it before starting the transaction (see "Payment recovery" in the README).