stripe-haskell-0.1.0.0: src/Web/Stripe/Refund.hs
{-# 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