about summary refs log tree commit diff
path: root/website/sandbox/learnpianochords/src/server/Stripe.hs
blob: 5370b90abebf849dad0a9e684c82ed706113f8e5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE DataKinds #-}
--------------------------------------------------------------------------------
module Stripe where
--------------------------------------------------------------------------------
import RIO
import Prelude (print)
import Data.String.Conversions (cs)
import Data.Aeson
import Network.HTTP.Req

import qualified Types as T
--------------------------------------------------------------------------------

endpoint :: Text -> Url 'Https
endpoint slug =
  https "api.stripe.com" /: "v1" /: slug

post :: (FromJSON b) => Text -> Text -> T.PaymentIntent -> IO (JsonResponse b)
post apiKey slug T.PaymentIntent{..} = runReq defaultHttpConfig $ do
  let params = "amount" =: paymentIntentAmount
            <> "currency" =: paymentIntentCurrency
  req POST (endpoint slug) (ReqBodyUrlEnc params) jsonResponse (oAuth2Bearer (cs apiKey))

createPaymentIntent :: T.Context -> T.PaymentIntent -> IO T.Secret
createPaymentIntent T.Context{..} pmtIntent = do
  res <- post contextStripeAPIKey "payment_intents" pmtIntent
  let T.StripePaymentIntent{..} = responseBody res :: T.StripePaymentIntent
  pure pmtIntentClientSecret