One nit: why don't you move the validatePaymentRequest() stuff to processPaymentRequest()? You always use them together, and processPaymentRequest already does all kinds of validation.