{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} ------------------------------------------- -- | -- Module : Web.Stripe.Refund -- Copyright : (c) David Johnson, 2014 -- Maintainer : djohnson.m@gmail.com -- Stability : experimental -- Portability : POSIX -- -- < https:/\/\stripe.com/docs/api#refunds > -- -- @ -- import Web.Stripe -- import Web.Stripe.Customer -- import Web.Stripe.Charge -- import Web.Stripe.Refund -- -- main :: IO () -- main = do -- let config = SecretKey "secret_key" -- credit = CardNumber "4242424242424242" -- em = ExpMonth 12 -- ey = ExpYear 2015 -- cvc = CVC "123" -- result <- stripe config $ do -- Customer { customerId = cid } <- createCustomerByCard cn em ey cvc -- Charge { chargeId = chid } <- chargeCustomer cid USD 100 Nothing -- createRefund chid ([] :: MetaData) -- case result of -- Right refund -> print refund -- Left stripeError -> print stripeError -- @ module Web.Stripe.Refund ( -- * API createRefund , getRefund , getRefundExpandable , getRefunds , getRefundsExpandable , updateRefund -- * Types , Refund (..) , RefundId (..) , ChargeId (..) , Charge (..) , StripeList (..) ) where import Web.Stripe.Client.Internal (Method (GET, POST), Stripe, StripeRequest (..), callAPI, getParams, toMetaData, toText, (), toExpandable) import Web.Stripe.Types (Charge (..), ChargeId (..), EndingBefore, Limit, MetaData, Refund (..), Refund (..), RefundId (..), StartingAfter, ExpandParams, StripeList (..)) import Web.Stripe.Types.Util (getChargeId) ------------------------------------------------------------------------------ -- | `Refund` a `Charge` createRefund :: ChargeId -- ^ `ChargeId` associated with the `Charge` to be refunded -> MetaData -- ^ `MetaData` associated with a `Refund` -> Stripe Refund createRefund chargeid metadata = callAPI request where request = StripeRequest POST url params url = "charges" getChargeId chargeid "refunds" params = toMetaData metadata ------------------------------------------------------------------------------ -- | Retrieve a `Refund` by `ChargeId` and `RefundId` getRefund :: ChargeId -- ^ `ChargeId` associated with the `Refund` to be retrieved -> RefundId -- ^ `RefundId` associated with the `Refund` to be retrieved -> Stripe Refund getRefund chargeid (RefundId refundid) = callAPI request where request = StripeRequest GET url params url = "charges" getChargeId chargeid "refunds" refundid params = [] ------------------------------------------------------------------------------ -- | Retrieve a `Refund` by `ChargeId` and `RefundId` with `ExpandParams` getRefundExpandable :: ChargeId -- ^ `ChargeId` associated with the `Charge` to be retrieved -> RefundId -- ^ `RefundId` associated with the `Refund` to be retrieved -> ExpandParams -- ^ `ExpandParams` of object for expansion -> Stripe Refund getRefundExpandable chargeid (RefundId refundid) expandParams = callAPI request where request = StripeRequest GET url params url = "charges" getChargeId chargeid "refunds" refundid params = toExpandable expandParams ------------------------------------------------------------------------------ -- | Update a `Refund` by `ChargeId` and `RefundId` updateRefund :: ChargeId -- ^ `ChargeId` associated with the `Charge` to be updated -> RefundId -- ^ `RefundId` associated with the `Refund` to be retrieved -> MetaData -- ^ `MetaData` associated with a `Refund` -> Stripe Refund updateRefund chargeid (RefundId refid) metadata = callAPI request where request = StripeRequest POST url params url = "charges" getChargeId chargeid "refunds" refid params = toMetaData metadata ------------------------------------------------------------------------------ -- | Retrieve a lot of Refunds by `ChargeId` getRefunds :: ChargeId -- ^ `ChargeId` associated with the `Charge` to be updated -> Limit -- ^ Defaults to 10 if `Nothing` specified -> StartingAfter RefundId -- ^ Paginate starting after the following `RefundId` -> EndingBefore RefundId -- ^ Paginate ending before the following `RefundId` -> Stripe (StripeList Refund) getRefunds chargeid limit startingAfter endingBefore = getRefundsExpandable chargeid limit startingAfter endingBefore [] ------------------------------------------------------------------------------ -- | Retrieve a lot of Refunds by `ChargeId` with `ExpandParams` getRefundsExpandable :: ChargeId -- ^ `ChargeId` associated with the `Charge` to be updated -> Limit -- ^ Defaults to 10 if `Nothing` specified -> StartingAfter RefundId -- ^ Paginate starting after the following `RefundId` -> EndingBefore RefundId -- ^ Paginate ending before the following `RefundId` -> ExpandParams -- ^ `MetaData` associated with a `Refund` -> Stripe (StripeList Refund) getRefundsExpandable chargeid limit startingAfter endingBefore expandParams = callAPI request where request = StripeRequest GET url params url = "charges" getChargeId chargeid "refunds" params = getParams [ ("limit", toText `fmap` limit ) , ("starting_after", (\(RefundId x) -> x) `fmap` startingAfter) , ("ending_before", (\(RefundId x) -> x) `fmap` endingBefore) ] ++ toExpandable expandParams