module Web.MangoPay.Refunds where
import Web.MangoPay.Monad
import Web.MangoPay.Payins
import Web.MangoPay.Types
import Web.MangoPay.Users
import Web.MangoPay.Wallets
import Data.Text
import Data.Typeable (Typeable)
import Data.Aeson
import Data.Time.Clock.POSIX (POSIXTime)
import Control.Applicative
import qualified Network.HTTP.Types as HT
refundTransfer :: (MPUsableMonad m) => TransferID -> AnyUserID -> AccessToken -> MangoPayT m Refund
refundTransfer tid authID at= do
url<-getClientURLMultiple ["/transfers/",tid,"/refunds"]
postExchange url (Just at) (RefundRequest authID Nothing Nothing)
refundPayin :: (MPUsableMonad m) => AnyPayinID -> RefundRequest -> AccessToken -> MangoPayT m Refund
refundPayin pid rr at= do
url<-getClientURLMultiple ["/payins/",pid,"/refunds"]
postExchange url (Just at) rr
fetchRefund :: (MPUsableMonad m) => RefundID -> AccessToken -> MangoPayT m Refund
fetchRefund rid at=do
url<-getClientURLMultiple ["/refunds/",rid]
req<-getGetRequest url (Just at) ([]::HT.Query)
getJSONResponse req
data RefundRequest=RefundRequest{
rrAuthorId :: AnyUserID
,rrDebitedFunds :: Maybe Amount
,rrFees :: Maybe Amount
}deriving (Show,Eq,Ord,Typeable)
instance ToJSON RefundRequest where
toJSON rr=object ["AuthorId" .= rrAuthorId rr,"DebitedFunds" .= rrDebitedFunds rr,
"Fees" .= rrFees rr]
type RefundID = Text
data Refund=Refund{
rId :: RefundID
,rCreationDate :: POSIXTime
,rTag :: Maybe Text
,rAuthorId :: AnyUserID
,rDebitedFunds :: Amount
,rFees :: Amount
,rCreditedFunds :: Amount
,rStatus :: TransferStatus
,rResultCode :: Text
,rResultMessage :: Maybe Text
,rExecutionDate :: POSIXTime
,rType :: TransactionType
,rNature :: TransactionNature
,rCreditedUserId :: Maybe AnyUserID
,rInitialTransactionId :: TransactionID
,rInitialTransactionType :: TransactionType
,rDebitedWalletId :: WalletID
,rCreditedWalletID :: Maybe WalletID
} deriving (Show,Eq,Ord,Typeable)
instance FromJSON Refund where
parseJSON (Object v) =Refund <$>
v .: "Id" <*>
v .: "CreationDate" <*>
v .:? "Tag" <*>
v .: "AuthorId" <*>
v .: "DebitedFunds" <*>
v .: "Fees" <*>
v .: "CreditedFunds" <*>
v .: "Status" <*>
v .: "ResultCode" <*>
v .:? "ResultMessage" <*>
v .: "ExecutionDate" <*>
v .: "Type" <*>
v .: "Nature" <*>
v .:? "CreditedUserId" <*>
v .: "InitialTransactionId" <*>
v .: "InitialTransactionType" <*>
v .: "DebitedWalletId" <*>
v .:? "CreditedWalletID"
parseJSON _=fail "Refund"