Skip to content
Open
Show file tree
Hide file tree
Changes from 36 commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
da36176
wrote some types
Sep 2, 2019
48628b4
a bunch of json instances
Sep 13, 2019
3de99f6
More json
Sep 13, 2019
e05d004
some completed api
Sep 13, 2019
23b37b2
little bit of cleanup
Sep 13, 2019
5870ac5
started on sessions
Sep 23, 2019
083b077
some more on sessions
Sep 24, 2019
2341b2a
more about sessions
Sep 24, 2019
a9a1ace
managed to actually create a session
Sep 25, 2019
0ea6581
Tried to figure out events
Sep 30, 2019
4ff9969
Got rid of 'mzero
Sep 30, 2019
b8a44d6
managed to fetch a payment intent
Sep 30, 2019
b14fd63
intermediary commit
Oct 1, 2019
c562c89
intermediate commmit
Oct 2, 2019
ab23e8d
some more about sessions
Oct 3, 2019
7ced8ce
a bit more sophisticated sessions
Jan 2, 2020
80b4911
more on payment intents
Jun 19, 2020
65fb8b6
more payment methods for sessions
Jul 16, 2020
008e992
Merge remote-tracking branch 'upstream/master' into api-upgrade
Jul 22, 2020
96078dd
Merge branch 'master' into api-upgrade
emhoracek Dec 8, 2020
f12a74f
Fix missing imports (lost in merge)
emhoracek Dec 21, 2020
d5d0fd6
'cards' fields now called 'sources'
emhoracek Dec 21, 2020
4b94850
Remove application fee metadata field
emhoracek Dec 21, 2020
1db862f
Add PaymentIntent PaymentMethodId params
emhoracek Dec 22, 2020
f599dff
Add PaymentIntent PaymentMethodId params
emhoracek Dec 22, 2020
ec544e9
Add SetupFutureUsage
emhoracek Dec 22, 2020
3364734
Add amount and currenct to UpdatePaymentIntent
emhoracek Dec 22, 2020
a4e6645
Add Description to CreatePaymentIntent params
emhoracek Dec 29, 2020
44d6643
Merge branch 'sca-upgrade' of github.com:positiondev/stripe into sca-…
emhoracek Dec 29, 2020
2f16fbc
modify UpdatePaymentIntent to accept some more optional params
lgdean Dec 29, 2020
b5b8bd7
test for some new updatePaymentIntent params
lgdean Dec 29, 2020
9e31895
Export PaymentIntent params
emhoracek Dec 31, 2020
42f61c6
Add SetupIntents
emhoracek Jan 7, 2021
b6df3ed
Add PaymentMethod
emhoracek Jan 14, 2021
536840f
Add OffSession and Confirm params
emhoracek Jan 14, 2021
fb83adc
Update version
emhoracek Feb 10, 2021
376969f
Add statement descriptors to payment intent
remeike Nov 23, 2021
f68db5d
Merge pull request #3 from jacobinmag/add-payment-intent-statement-de…
emhoracek Feb 7, 2022
3623046
Add customer invoice settings fields
emhoracek Feb 7, 2022
f0a1379
Add Source as param to createCharge
emhoracek Oct 30, 2023
5e6d532
Update customer invoice settings
emhoracek Jul 18, 2024
a400c76
Change version
emhoracek Jul 19, 2024
de935eb
Bump versions
emhoracek Jul 19, 2024
91dfa90
Try again sending default payment method id
emhoracek Jul 19, 2024
7b81fc3
Fix typo
emhoracek Jul 19, 2024
9488ebd
Use Expandable on PaymentMethod
emhoracek Jul 22, 2024
e424a89
Add type for payment intent payment method
emhoracek Jul 24, 2024
3d51570
Add type for setup intent payment method
emhoracek Jul 24, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 8 additions & 7 deletions stripe-core/src/Web/Stripe/Client.hs
Original file line number Diff line number Diff line change
Expand Up @@ -93,17 +93,17 @@ handleStream
handleStream decodeValue statusCode r =
case statusCode of
200 -> case r of
Error message -> parseFail message
Error message -> parseFail message Nothing
(Success value) ->
case decodeValue value of
(Error message) -> parseFail message
(Error message) -> parseFail message (Just value)
(Success a) -> (Right a)
code | code >= 400 ->
case r of
Error message -> parseFail message
Error message -> parseFail message Nothing
(Success value) ->
case fromJSON value of
(Error message) -> parseFail message
(Error message) -> parseFail message (Just value)
(Success stripeError) ->
Left $ setErrorHTTP code stripeError
_ -> unknownCode
Expand All @@ -119,16 +119,17 @@ attemptDecode code = code == 200 || code >= 400
-- | lift a parser error to be a StripeError
parseFail
:: String -- ^ error message
-> Maybe Value
-> Either StripeError a
parseFail errorMessage =
Left $ StripeError ParseFailure (T.pack errorMessage) Nothing Nothing Nothing
parseFail errorMessage mval =
Left $ StripeError ParseFailure (T.pack errorMessage) Nothing Nothing Nothing mval

------------------------------------------------------------------------------
-- | `StripeError` to return when we don't know what to do with the
-- received HTTP status code.
unknownCode :: Either StripeError a
unknownCode =
Left $ StripeError UnknownErrorType mempty Nothing Nothing Nothing
Left $ StripeError UnknownErrorType mempty Nothing Nothing Nothing Nothing

------------------------------------------------------------------------------
-- | set the `errorHTTP` field of the `StripeError` based on the HTTP
Expand Down
4 changes: 3 additions & 1 deletion stripe-core/src/Web/Stripe/Error.hs
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ data StripeError = StripeError {
, errorCode :: Maybe StripeErrorCode
, errorParam :: Maybe Text
, errorHTTP :: Maybe StripeErrorHTTPCode
, errorValue :: Maybe Value
} deriving (Show, Typeable)

instance Exception StripeError
Expand Down Expand Up @@ -109,5 +110,6 @@ instance FromJSON StripeError where
msg <- e .: "message"
code <- fmap toErrorCode <$> e .:? "code"
param <- e .:? "param"
return $ StripeError typ msg code param Nothing
value <- e .:? "value"
return $ StripeError typ msg code param Nothing value
parseJSON _ = mzero
2 changes: 1 addition & 1 deletion stripe-core/src/Web/Stripe/Event.hs
Original file line number Diff line number Diff line change
Expand Up @@ -84,4 +84,4 @@ instance StripeHasParam GetEvents Created
instance StripeHasParam GetEvents (EndingBefore EventId)
instance StripeHasParam GetEvents Limit
instance StripeHasParam GetEvents (StartingAfter EventId)
-- instance StripeHasParam GetEvents EventType -- FIXME
instance StripeHasParam GetEvents EventType
189 changes: 189 additions & 0 deletions stripe-core/src/Web/Stripe/PaymentIntent.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,189 @@
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeFamilies #-}
-------------------------------------------
-- |
-- Module : Web.Stripe.PaymentIntent
-- Copyright : (c) David Johnson, 2014
-- Maintainer : djohnson.m@gmail.com
-- Stability : experimental
-- Portability : POSIX
module Web.Stripe.PaymentIntent
( -- * API
CreatePaymentIntent
, createPaymentIntent
, GetPaymentIntent
, getPaymentIntent
, UpdatePaymentIntent
, updatePaymentIntent
, ConfirmPaymentIntent
, confirmPaymentIntent
, CapturePaymentIntent
, capturePaymentIntent
, CancelPaymentIntent
, cancelPaymentIntent
, GetPaymentIntents
, getPaymentIntents
-- * Types
, Amount (..)
, CardId (..)
, Charge (..)
, ChargeId (..)
, Currency (..)
, CustomerId (..)
, Description (..)
, EndingBefore (..)
, ExpandParams (..)
, Confirm (..)
, OffSession (..)
, PaymentIntent (..)
, PaymentIntentId (..)
, PaymentMethodId (..)
, PaymentMethodTypes (..)
, PaymentMethodType (..)
, PaymentIntentUsage (..)
, Usage (..)
, StripeList (..)
, Token (..)
) where

import Web.Stripe.StripeRequest (Method (GET, POST),
StripeHasParam, StripeReturn,
StripeRequest (..), toStripeParam, mkStripeRequest)
import Web.Stripe.Util ((</>))
import Web.Stripe.Types (Amount(..), Charge (..), CardId (..), ChargeId (..),
Confirm(..), Currency(..), CustomerId(..),
Description(..), EndingBefore(..), Limit(..),
MetaData(..), PaymentIntent (..), PaymentMethodId (..), PaymentMethodTypes(..), PaymentMethodType(..),
PaymentIntentId (..), OffSession(..), ReceiptEmail(..),
PaymentIntentUsage(..), Usage (..), StartingAfter(..), ExpandParams(..),
StripeList (..), Token (..))

------------------------------------------------------------------------------
-- | create a `PaymentIntent`
createPaymentIntent
:: Amount
-> Currency
-> StripeRequest CreatePaymentIntent
createPaymentIntent
amount
currency = request
where request = mkStripeRequest POST url params
url = "payment_intents"
params = toStripeParam amount $
toStripeParam currency $
[]

data CreatePaymentIntent
type instance StripeReturn CreatePaymentIntent = PaymentIntent
instance StripeHasParam CreatePaymentIntent CustomerId
instance StripeHasParam CreatePaymentIntent Description
instance StripeHasParam CreatePaymentIntent ReceiptEmail
instance StripeHasParam CreatePaymentIntent PaymentMethodTypes
instance StripeHasParam CreatePaymentIntent PaymentIntentUsage
instance StripeHasParam CreatePaymentIntent PaymentMethodId
instance StripeHasParam CreatePaymentIntent Confirm
instance StripeHasParam CreatePaymentIntent MetaData
instance StripeHasParam CreatePaymentIntent OffSession

------------------------------------------------------------------------------
-- | Retrieve a `PaymentIntent` by `ChargeId` and `PaymentIntentId`
getPaymentIntent
:: PaymentIntentId -- ^ `PaymentIntentId` associated with the `PaymentIntent` to be retrieved
-> StripeRequest GetPaymentIntent
getPaymentIntent
(PaymentIntentId paymentIntentid) = request
where request = mkStripeRequest GET url params
url = "payment_intents" </> paymentIntentid
params = []

data GetPaymentIntent
type instance StripeReturn GetPaymentIntent = PaymentIntent
instance StripeHasParam GetPaymentIntent ExpandParams

------------------------------------------------------------------------------
-- | Update a `PaymentIntent` by `ChargeId` and `PaymentIntentId`
updatePaymentIntent
:: PaymentIntentId -- ^ `PaymentIntentId` associated with the `PaymentIntent` to be retrieved
-> StripeRequest UpdatePaymentIntent
updatePaymentIntent
(PaymentIntentId paymentIntentid)
= request
where request = mkStripeRequest POST url params
url = "payment_intents" </> paymentIntentid
params = []

data UpdatePaymentIntent
type instance StripeReturn UpdatePaymentIntent = PaymentIntent
instance StripeHasParam UpdatePaymentIntent MetaData
instance StripeHasParam UpdatePaymentIntent PaymentMethodId
instance StripeHasParam UpdatePaymentIntent Amount
instance StripeHasParam UpdatePaymentIntent Currency
instance StripeHasParam UpdatePaymentIntent CustomerId
instance StripeHasParam UpdatePaymentIntent Description
instance StripeHasParam UpdatePaymentIntent PaymentMethodTypes
instance StripeHasParam UpdatePaymentIntent ReceiptEmail
instance StripeHasParam UpdatePaymentIntent PaymentIntentUsage
-- TODO shipping, statement descriptor, statement descriptor suffix

confirmPaymentIntent
:: PaymentIntentId
-> StripeRequest ConfirmPaymentIntent
confirmPaymentIntent
(PaymentIntentId paymentIntentid)
= request
where request = mkStripeRequest POST url params
url = "payment_intents" </> paymentIntentid </> "confirm"
params = []

data ConfirmPaymentIntent
type instance StripeReturn ConfirmPaymentIntent = PaymentIntent
instance StripeHasParam ConfirmPaymentIntent MetaData
instance StripeHasParam ConfirmPaymentIntent OffSession
instance StripeHasParam ConfirmPaymentIntent PaymentMethodId

capturePaymentIntent
:: PaymentIntentId
-> StripeRequest CapturePaymentIntent
capturePaymentIntent
(PaymentIntentId paymentIntentid)
= request
where request = mkStripeRequest POST url params
url = "payment_intents" </> paymentIntentid </> "capture"
params = []

data CapturePaymentIntent
type instance StripeReturn CapturePaymentIntent = PaymentIntent
instance StripeHasParam CapturePaymentIntent MetaData

cancelPaymentIntent
:: PaymentIntentId
-> StripeRequest CancelPaymentIntent
cancelPaymentIntent
(PaymentIntentId paymentIntentid)
= request
where request = mkStripeRequest POST url params
url = "payment_intents" </> paymentIntentid </> "cancel"
params = []

data CancelPaymentIntent
type instance StripeReturn CancelPaymentIntent = PaymentIntent
instance StripeHasParam CancelPaymentIntent MetaData

------------------------------------------------------------------------------
-- | Retrieve a list of PaymentIntents
getPaymentIntents
:: StripeRequest GetPaymentIntents
getPaymentIntents
= request
where request = mkStripeRequest GET url params
url = "payment_intents"
params = []

data GetPaymentIntents
type instance StripeReturn GetPaymentIntents = StripeList PaymentIntent
instance StripeHasParam GetPaymentIntents ExpandParams
instance StripeHasParam GetPaymentIntents (EndingBefore PaymentIntentId)
instance StripeHasParam GetPaymentIntents Limit
instance StripeHasParam GetPaymentIntents (StartingAfter PaymentIntentId)
Loading