git.iko.soy/typeable/connexpay
on master help sign in
Catch all 422 errors as payment failure instead of connection failure.
3a34828Nick
connexpay/src/Web/Connexpay/Data.hs+6
@@ -46,20 +46,26 @@ instance FromJSON TransactionStatus where
46data PaymentFailure = CVVFailed -- ^ CVV verification failure
46data PaymentFailure = CVVFailed -- ^ CVV verification failure
47 | CardInvalid -- ^ Credit card details are invalid
47 | CardInvalid -- ^ Credit card details are invalid
48 | InvalidAmount -- ^ Money amount is invalid
48 | InvalidAmount -- ^ Money amount is invalid
49+ | GeneralDecline -- ^ They just decline
49 | LocalTransaction -- ^ Special case for transactions that were registered but did't go through somehow.
50 | LocalTransaction -- ^ Special case for transactions that were registered but did't go through somehow.
51+ | OtherProcessingError Text -- ^ Some other processing error with 422 code
50 deriving (Eq, Show)
52 deriving (Eq, Show)
51
53
52describeFailure :: PaymentFailure -> Text
54describeFailure :: PaymentFailure -> Text
53describeFailure CVVFailed = "CVV authorisation failure"
55describeFailure CVVFailed = "CVV authorisation failure"
54describeFailure CardInvalid = "Invalid credit card details"
56describeFailure CardInvalid = "Invalid credit card details"
55describeFailure InvalidAmount = "Invalid amount of money requested"
57describeFailure InvalidAmount = "Invalid amount of money requested"
58+describeFailure GeneralDecline = "General card decine"
56describeFailure LocalTransaction = "Transaction registered but not processed. Consult with payment processor."
59describeFailure LocalTransaction = "Transaction registered but not processed. Consult with payment processor."
60+describeFailure (OtherProcessingError txt) = "Transaction declined due to other error: " <> txt
57
61
58-- | Guess failure type from HTTP code and supplied error string.
62-- | Guess failure type from HTTP code and supplied error string.
59guessFailure :: Int -> Text -> Maybe PaymentFailure
63guessFailure :: Int -> Text -> Maybe PaymentFailure
60guessFailure 422 "Error code D2020. CVV2 verification failed." = Just CVVFailed
64guessFailure 422 "Error code D2020. CVV2 verification failed." = Just CVVFailed
61guessFailure 422 "Error code D2005. Invalid Card." = Just CardInvalid
65guessFailure 422 "Error code D2005. Invalid Card." = Just CardInvalid
62guessFailure 422 "Amount field don't allow a value greater than $999,999.99" = Just InvalidAmount
66guessFailure 422 "Amount field don't allow a value greater than $999,999.99" = Just InvalidAmount
67+guessFailure 422 "Error code D2999. General CardAuth Decline." = Just GeneralDecline
68+guessFailure 422 txt = Just (OtherProcessingError txt)
63guessFailure _ _ = Nothing
69guessFailure _ _ = Nothing
64
70
65-- | Error response from Connexpay
71-- | Error response from Connexpay