module Web.Stripe.Charge
(
chargeCustomer
, chargeCardByToken
, chargeCustomerByCardId
, chargeCard
, chargeBase
, getCharge
, getChargeExpandable
, getCharges
, getChargesExpandable
, getCustomerCharges
, getCustomerChargesExpandable
, updateCharge
, captureCharge
, Charge (..)
, TokenId (..)
, ChargeId (..)
, CustomerId (..)
, Customer (..)
, Currency (..)
, CardNumber (..)
, CVC (..)
, ExpMonth (..)
, ExpYear (..)
, StripeList (..)
, Email (..)
, Description
, StatementDescription
, Amount
, Capture
) where
import Web.Stripe.Client.Internal (Method (GET, POST), Stripe,
StripeRequest (..), callAPI,
getParams, toMetaData, toText, toExpandable,
toTextLower, (</>))
import Web.Stripe.Types (Amount, CVC (..), Capture,
CardNumber (..), Charge (..),
ChargeId (..), Currency (..),
CustomerId (..), Description,
EndingBefore, ExpMonth (..),
ExpYear (..), Limit, MetaData,
Email (..), StartingAfter, Customer(..),
StatementDescription(..), ExpandParams,
StripeList (..), TokenId (..), CardId(..))
import Web.Stripe.Types.Util (getCardId, getChargeId, getCustomerId)
chargeCustomer
:: CustomerId
-> Currency
-> Amount
-> Maybe Description
-> Stripe Charge
chargeCustomer customerid currency amount description =
chargeBase amount currency description (Just customerid)
Nothing Nothing Nothing True
Nothing Nothing Nothing Nothing []
chargeCustomerByCardId
:: CustomerId
-> CardId
-> Currency
-> Amount
-> Maybe Description
-> Stripe Charge
chargeCustomerByCardId
customerid
cardid
currency
amount
description =
chargeBase amount currency description
(Just customerid) (Just $ TokenId $ getCardId cardid) Nothing
Nothing True Nothing Nothing
Nothing Nothing []
chargeCardByToken
:: TokenId
-> Currency
-> Amount
-> Maybe Description
-> Stripe Charge
chargeCardByToken tokenId currency amount description =
chargeBase amount currency description Nothing (Just tokenId)
Nothing Nothing True Nothing Nothing Nothing Nothing []
chargeCard
:: CardNumber
-> ExpMonth
-> ExpYear
-> CVC
-> Currency
-> Amount
-> Maybe Description
-> Stripe Charge
chargeCard cardNumber expMonth expYear cvc currency amount description =
chargeBase amount currency description
Nothing Nothing Nothing Nothing True
(Just cardNumber) (Just expMonth)
(Just expYear) (Just cvc) []
chargeBase
:: Amount
-> Currency
-> Maybe Description
-> Maybe CustomerId
-> Maybe TokenId
-> Maybe StatementDescription
-> Maybe Email
-> Capture
-> Maybe CardNumber
-> Maybe ExpMonth
-> Maybe ExpYear
-> Maybe CVC
-> MetaData
-> Stripe Charge
chargeBase
amount
currency
description
customerid
tokenId
statementDescription
receiptEmail
capture
cardNumber
expMonth
expYear
cvc'
metadata = callAPI request
where request = StripeRequest POST url params
url = "charges"
params = toMetaData metadata ++ getParams [
("amount", toText `fmap` Just amount)
, ("customer", (\(CustomerId cid) -> cid) `fmap` customerid)
, ("currency", toTextLower `fmap` Just currency)
, ("card", (\(TokenId tokenid) -> tokenid) `fmap` tokenId)
, ("description", description)
, ("statement_description", (\(StatementDescription x) -> x) `fmap` statementDescription)
, ("receipt_email", (\(Email email) -> email) `fmap` receiptEmail)
, ("capture", (\x -> if x then "true" else "false") `fmap` Just capture)
, ("card[number]", (\(CardNumber c) -> c) `fmap` cardNumber)
, ("card[exp_month]", (\(ExpMonth m) -> toText m) `fmap` expMonth)
, ("card[exp_year]", (\(ExpYear y) -> toText y) `fmap` expYear)
, ("card[cvc]", (\(CVC c) -> c) `fmap` cvc')
]
getCharge
:: ChargeId
-> Stripe Charge
getCharge chargeid = getChargeExpandable chargeid []
getChargeExpandable
:: ChargeId
-> ExpandParams
-> Stripe Charge
getChargeExpandable
chargeid
expandParams = callAPI request
where request = StripeRequest GET url params
url = "charges" </> getChargeId chargeid
params = toExpandable expandParams
getCharges
:: Limit
-> StartingAfter ChargeId
-> EndingBefore ChargeId
-> Stripe (StripeList Charge)
getCharges
limit
startingAfter
endingBefore =
getChargesExpandable limit startingAfter endingBefore []
getChargesExpandable
:: Limit
-> StartingAfter ChargeId
-> EndingBefore ChargeId
-> ExpandParams
-> Stripe (StripeList Charge)
getChargesExpandable
limit
startingAfter
endingBefore
expandParams = callAPI request
where request = StripeRequest GET url params
url = "charges"
params = getParams [
("limit", toText `fmap` limit )
, ("starting_after", (\(ChargeId x) -> x) `fmap` startingAfter)
, ("ending_before", (\(ChargeId x) -> x) `fmap` endingBefore)
] ++ toExpandable expandParams
getCustomerCharges
:: CustomerId
-> Limit
-> StartingAfter ChargeId
-> EndingBefore ChargeId
-> Stripe (StripeList Charge)
getCustomerCharges
customerid
limit
startingAfter
endingBefore =
getCustomerChargesExpandable customerid limit
startingAfter endingBefore []
getCustomerChargesExpandable
:: CustomerId
-> Limit
-> StartingAfter ChargeId
-> EndingBefore ChargeId
-> ExpandParams
-> Stripe (StripeList Charge)
getCustomerChargesExpandable
customerid
limit
startingAfter
endingBefore
expandParams = callAPI request
where request = StripeRequest GET url params
url = "charges"
params = getParams [
("customer", Just $ getCustomerId customerid )
, ("limit", toText `fmap` limit )
, ("starting_after", (\(ChargeId x) -> x) `fmap` startingAfter)
, ("ending_before", (\(ChargeId x) -> x) `fmap` endingBefore)
] ++ toExpandable expandParams
updateCharge
:: ChargeId
-> Description
-> MetaData
-> Stripe Charge
updateCharge
chargeid
description
metadata = callAPI request
where request = StripeRequest POST url params
url = "charges" </> getChargeId chargeid
params = toMetaData metadata ++ getParams [
("description", Just description)
]
captureCharge
:: ChargeId
-> Maybe Amount
-> Maybe Email
-> Stripe Charge
captureCharge
chargeid
amount
receiptEmail = callAPI request
where request = StripeRequest POST url params
url = "charges" </> getChargeId chargeid </> "capture"
params = getParams [
("amount", toText `fmap` amount)
, ("receipt_email", (\(Email email) -> email) `fmap` receiptEmail)
]