abstract controller for payment