Skip to content
Open
Show file tree
Hide file tree
Changes from all 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
10 changes: 3 additions & 7 deletions stack.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
#
# resolver: ./custom-snapshot.yaml
# resolver: https://example.com/snapshots/2018-01-01.yaml
resolver: nightly-2020-09-02
resolver: lts-18.19

# User packages to be built.
# Various formats can be used as shown in the example below.
Expand All @@ -37,12 +37,8 @@ packages:
# These entries can reference officially published versions as well as
# forks / in-progress versions pinned to a git hash. For example:
#
# extra-deps:
# - acme-missiles-0.3
# - git: https://github.com/commercialhaskell/stack.git
# commit: e7b331f14bcffb8367cd58fbfc8b40ec7642100a
#
# extra-deps: []
extra-deps:
- random-1.2.1.1@sha256:dea1f11e5569332dc6c8efaad1cb301016a5587b6754943a49f9de08ae0e56d9

# Override default flag values for local packages and extra-deps
# flags: {}
Expand Down
17 changes: 12 additions & 5 deletions stack.yaml.lock
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,17 @@
# For more information, please see the documentation at:
# https://docs.haskellstack.org/en/stable/lock_files

packages: []
packages:
- completed:
hackage: random-1.2.1.1@sha256:dea1f11e5569332dc6c8efaad1cb301016a5587b6754943a49f9de08ae0e56d9,6541
pantry-tree:
sha256: 646ee77fe01178837ee928b61ae8653dcf190e9b5353ebebd094079c77a18b76
size: 1528
original:
hackage: random-1.2.1.1@sha256:dea1f11e5569332dc6c8efaad1cb301016a5587b6754943a49f9de08ae0e56d9
snapshots:
- completed:
size: 527775
url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/nightly/2020/9/2.yaml
sha256: 92ec78ae38830f06ec9307c5ce346ae93982fab6179eb10dec9d57d5069c7f14
original: nightly-2020-09-02
sha256: 32716534fff554b7f90762130fdb985cabf29f157758934dd1c8f3892a646430
size: 586103
url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/18/19.yaml
original: lts-18.19
6 changes: 4 additions & 2 deletions stripe-core/src/Web/Stripe/Charge.hs
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ module Web.Stripe.Charge
, MetaData (..)
, NewCard (..)
, ReceiptEmail (..)
, Source (..)
, StartingAfter (..)
, StatementDescription (..)
, StripeList (..)
Expand All @@ -95,11 +96,11 @@ import Web.Stripe.Types (Amount(..), ApplicationFeeAmount(..
CustomerId (..), Description(..),
EndingBefore(..), ExpMonth (..),
ExpYear (..), Limit(..), MetaData(..),
NewCard(..), Email (..),
NewCard(..), Email (..), PaymentMethodId(..),
StartingAfter(..),
ReceiptEmail(..),
StatementDescription(..),
ExpandParams(..),
ExpandParams(..), Source(..),
StripeList (..), TokenId (..))
import Web.Stripe.Types.Util (getChargeId)

Expand All @@ -124,6 +125,7 @@ instance StripeHasParam CreateCharge ExpandParams
instance StripeHasParam CreateCharge CustomerId
instance StripeHasParam CreateCharge NewCard
instance StripeHasParam CreateCharge TokenId
instance StripeHasParam CreateCharge (Source PaymentMethodId)
instance StripeHasParam CreateCharge Description
instance StripeHasParam CreateCharge MetaData
instance StripeHasParam CreateCharge Capture
Expand Down
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
6 changes: 4 additions & 2 deletions stripe-core/src/Web/Stripe/Customer.hs
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ module Web.Stripe.Customer
, ExpandParams (..)
, ExpMonth (..)
, ExpYear (..)
, InvoiceSettings (..)
, Limit (..)
, MetaData (..)
, mkNewCard
Expand All @@ -80,8 +81,8 @@ import Web.Stripe.Types (AccountBalance(..), CVC (..),
CustomerId (..), DefaultCard(..),
Description(..), Email (..),
EndingBefore(..), ExpMonth (..),
ExpYear (..), Limit(..), PlanId (..),
Quantity (..), MetaData(..),
ExpYear (..), Limit(..), InvoiceSettings (..),
PlanId (..), Quantity (..), MetaData(..),
mkNewCard, NewCard(..), StartingAfter(..),
StripeDeleteResult (..),
StripeList (..), TokenId (..),
Expand Down Expand Up @@ -141,6 +142,7 @@ instance StripeHasParam UpdateCustomer TokenId
instance StripeHasParam UpdateCustomer NewCard
instance StripeHasParam UpdateCustomer CouponId
instance StripeHasParam UpdateCustomer DefaultCard
instance StripeHasParam UpdateCustomer InvoiceSettings
instance StripeHasParam UpdateCustomer Description
instance StripeHasParam UpdateCustomer Email
instance StripeHasParam UpdateCustomer MetaData
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
193 changes: 193 additions & 0 deletions stripe-core/src/Web/Stripe/PaymentIntent.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,193 @@
{-# 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 (..), StatementDescriptor(..), StatementDescriptorSuffix(..))

------------------------------------------------------------------------------
-- | 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
instance StripeHasParam CreatePaymentIntent StatementDescriptor
instance StripeHasParam CreatePaymentIntent StatementDescriptorSuffix

------------------------------------------------------------------------------
-- | 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
instance StripeHasParam UpdatePaymentIntent StatementDescriptor
instance StripeHasParam UpdatePaymentIntent StatementDescriptorSuffix
-- 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