@@ -1,6 +1,7 @@
1{-# LANGUAGE OverloadedStrings #-}
1{-# LANGUAGE OverloadedStrings #-}
2module Web.Connexpay.Types where
2module Web.Connexpay.Types where
4+import Web.Connexpay.Data
4import Web.Connexpay.Utils
5import Web.Connexpay.Utils
6import Control.Concurrent.Async
7import Control.Concurrent.Async
@@ -9,7 +10,6 @@ import Control.Monad.Except (MonadError, ExceptT, runExceptT, throwError)
9import Control.Monad.IO.Class
10import Control.Monad.IO.Class
10import Control.Monad.Reader
11import Control.Monad.Reader
11import Data.Aeson
12import Data.Aeson
12−import Data.Aeson.Types (typeMismatch)
13import Data.Text (Text)
13import Data.Text (Text)
14import Data.Text qualified as Text
14import Data.Text qualified as Text
15import Data.UUID (UUID)
15import Data.UUID (UUID)
@@ -32,38 +32,6 @@ data Connexpay = Connexpay { logAction :: Text -> IO ()
32 , password :: Text
32 , password :: Text
35−-- | Payment failure types.
36−-- This type describes failures that related to either credit card being invalid,
37−-- client account having insufficient funds, and other non-technical conditions.
38−-- FIXME: this list is not exhaustive. Add more values whenever we encounter them.
39−data PaymentFailure = CVVFailed -- ^ CVV verification failure
40− | CardInvalid -- ^ Credit card details are invalid
41− | InvalidAmount -- ^ Money amount is invalid
42− | LocalTransaction -- ^ Special case for transactions that were registered but did't go through somehow.
45−-- | Guess failure type from HTTP code and supplied error string.
46−guessFailure :: Int -> Text -> Maybe PaymentFailure
47−guessFailure 422 "Error code D2020. CVV2 verification failed." = Just CVVFailed
48−guessFailure 422 "Error code D2005. Invalid Card." = Just CardInvalid
49−guessFailure 422 "Amount field don't allow a value greater than $999,999.99" = Just InvalidAmount
50−guessFailure _ _ = Nothing
52−-- | Error response from Connexpay
53−data ErrorMessage = ErrorMessage { message :: Text
56−instance FromJSON ErrorMessage where
57− parseJSON (Object o) = ErrorMessage <$> o .: "message"
59− parseJSON v = typeMismatch "ErrorMessage" v
61−data PaymentError = ParseError String
62− | InvalidUrl String String
63− | HttpFailure HttpExceptionContent
64− | PaymentFailure PaymentFailure
67newtype ConnexpayM a = ConnexpayM (ReaderT Connexpay (ExceptT PaymentError IO) a)
35newtype ConnexpayM a = ConnexpayM (ReaderT Connexpay (ExceptT PaymentError IO) a)
68 deriving (Functor, Applicative, Monad, MonadIO, MonadReader Connexpay, MonadError PaymentError)
36 deriving (Functor, Applicative, Monad, MonadIO, MonadReader Connexpay, MonadError PaymentError)