Liking cljdoc? Tell your friends :D

payments.stripe

ci-cd Clojars Project

A Duct library that provides an Integrant key for interacting with the Stripe API.

Table of contents

Installation

Clojars Project

Usage

Configuration

To use this library add the following key to your configuration:

:dev.gethop.paymets/stripe

This key expects a configuration map with one unique mandatory key, plus another three optional ones. These are the mandatory keys:

  • :api-key : API key to authenticate requests

These are the optional keys:

  • :timeout: Timeout value (in milli-seconds) for an connection attempt with Stripe.
  • :max-retries: If the connection attempt fails, how many retries we want to attempt before giving up.
  • :backoff-ms: This is a vector in the form [initial-delay-ms max-delay-ms multiplier] to control the delay between each retry. The delay for nth retry will be (max (* initial-delay-ms n multiplier) max-delay-ms). If multiplier is not specified (or if it is nil), a multiplier of 2 is used. All times are in milli-seconds.
  • :webhook-tolerance : Used when verifying webhook headers. Maximum difference in seconds allowed between the header's timestamp and the current time. Default value is 300 seconds.
  • :idempotent-post-reqs?: Boolean value that determines whether idempotency keys should be used in POST requests or not. The default value is true.

Key initialization returns a Stripe record that can be used to perform the Stripe operations described below.

Configuration example

Basic configuration:

  :dev.gethop.payments/stripe
   {:api-key #duct/env ["STRIPE_API_KEY" Str :or "pk_test_TYooMQauvdEDq54NiTphI7jx"]}

Configuration with custom request retry policy:

  :dev.gethop.payments/stripe
   {:api-key #duct/env ["STRIPE_API_KEY" Str :or "pk_test_TYooMQauvdEDq54NiTphI7jx"]
    :timeout 1000
    :max-retries 3
    :backoff-ms [10 500]}

Obtaining a Stripe record

If you are using the library as part of a Duct-based project, adding any of the previous configurations to your config.edn file will perform all the steps necessary to initialize the key and return a Stripe record for the associated configuration. In order to show a few interactive usages of the library, we will do all the steps manually in the REPL.

First we require the relevant namespaces:

user> (require '[dev.gethop.payments.core :as core]
               '[integrant.core :as ig])
nil
user>

Next we create the configuration var holding the Stripe integration configuration details:

user> (def config {:api-key #duct/env ["STRIPE_API_KEY" Str :or "pk_test_TYooMQauvdEDq54NiTphI7jx"]})
#'user/config
user>

Now that we have all pieces in place, we can initialize the :dev.gethop.payments/stripe Integrant key to get a Stripe record. As we are doing all this from the REPL, we have to manually require dev.gethop.payments.stripe namespace, where the init-key multimethod for that key is defined (this is not needed when Duct takes care of initializing the key as part of the application start up):

user> (require '[dev.gethop.payments.stripe :as stripe])
nil
user>

And we finally initialize the key with the configuration defined above, to get our Stripe record:

user> (def stripe-record (->
                       config
                       (->> (ig/init-key :dev.gethop.payments/stripe))))
#'user/stripe-record
user> stripe-record
#dev.gethop.payments.stripe.Stripe{:api-key #duct/env ["STRIPE_API_KEY" Str :or "pk_test_TYooMQauvdEDq54NiTphI7jx"]
                                   :timeout 2000,
                                   :max-retries 10,
                                   :backoff-ms [500 1000 2.0]}
user>

Now that we have our Stripe record, we are ready to use the methods defined by the protocols defined in dev.gethop.payments.core namespace.

Available methods

This are the methods available to interact with the Stripe API. The mapping for the methods is one to one, so refer to the Stripe official documentation for details.

All the responses will include a :success? key. When :success? is false, :reason and error-details keys will be also included. The possible reasons are: :bad-request, not-found, access-denied and error. The error-details will include a map with the error information provided by the Stripe API.

License

Copyright (c) 2022 Magnet S. Coop

This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/

Can you improve this documentation? These fine people already did:
spietras, Bingen Galartza Iparragirre, lucassousaf, SignSpice, Bingen Galartza, Mihael Konjevic & usasigain
Edit on GitHub

cljdoc is a website building & hosting documentation for Clojure/Script libraries

× close