Prefer if you don't override the constructor. The response shouldn't throw an exception just because the gateway returned an error - in omnipay an exception means either you submitted some totally bogus data (e.g. a purchase with no amount, which you get InvalidRequestException), or there was a problem communicating with the gateway (Guzzle will throw an exception), or in some cases with off-site gateways, the signature in the POST data is invalid (which if you think of post data as input for the request, this is an invalid request).

However, for run of the mill "declined" messages, that does not throw an exception. Communication with the gateway was successful, and the gateway returned a negative response. Hence why you should simply implement `isSuccessful()` and return `false` if the card was declined. Only throw an exception if there was an error communicating with the gateway. Make sense?