GitPedia

Sleet

Payment abstraction library - one interface for multiple payment processors ( inspired by Ruby's ActiveMerchant )

From BoltApp·Updated August 11, 2025·View on GitHub·
·Archived

Payment abstraction library - interact with different Payment Service Providers (PsP) with one unified interface. The project is written primarily in Go, distributed under the MIT License license, first published in 2019. Key topics include: adyen, authorizenet, bolt, braintree, cybersource.

Latest release: v1.1.1372
February 29, 2024View Changelog →

Sleet

CircleCI status
GoDoc
Go Report Card

Payment abstraction library - interact with different Payment Service Providers (PsP) with one unified interface.

Installation

go get github.com/BoltApp/sleet

Methodology

Wherever possible, we try to use native Golang implementations of the PsP's API. We also assume that the caller can pass along raw credit card information (i.e. are PCI compliant)

Supported Gateway API Calls

  1. Authorize
  2. Capture
  3. Void
  4. Refund

Webhooks Support

We support abstracting PsP Webhook notifications into a common interface.

PsP Support Matrix

PsPGateway APIsWebhooks
Adyen
Authorize.Net
Braintree
CyberSource
Checkout.com
FirstData
NMI
Orbital
RocketGate
Stripe

To run tests

Unit test

go test -v -tags=unit $(go list ./... | grep -v integration-tests)

Integration test

The following environment variables are needed in order to run tests

shell
$ export ADYEN_USERNAME="YOUR_ADYEN_WEBSERVICE_USERNAME" $ export ADYEN_ACCOUNT="YOUR_ADYEN_MERCHANT_ACCOUNT" $ export ADYEN_PASSWORD="YOUR_ADYEN_WEBSERVICE_PASSWORD" $ export STRIPE_TEST_KEY="YOUR_STRIPE_API_KEY" $ export AUTH_NET_LOGIN_ID="YOUR_AUTHNET_LOGIN" $ export AUTH_NET_TXN_KEY="YOUR_AUTHNET_TXN_KEY" $ export BRAINTREE_MERCHANT_ID="YOUR_BRAINTREE_MERCHANT_ACCOUNT" $ export BRAINTREE_PUBLIC_KEY="YOUR_BRAINTREE_PUBLIC_KEY" $ export BRAINTREE_PRIVATE_ID="YOUR_BRAINTREE_PRIVATE_KEY" $ export CYBERSOURCE_ACCOUNT="YOUR_CYBS_ACCOUNT" $ export CYBERSOURCE_API_KEY="YOUR_CYBS_KEY" $ export CYBERSOURCE_SHARED_SECRET="YOUR_CYBS_SECRET" $ export NMI_SECURITY_KEY="YOUR_NMI_PRIVATE_KEY" $ export CHECKOUTCOM_TEST_KEY="YOUR_CHECKOUTCOM_PRIVATE_KEY" $ export CHECKOUTCOM_TEST_KEY_WITH_PCID="YOUR_CHECKOUTCOM_PRIVATE_KEY_WITH_PROCESSING_CHANNEL_ID" $ export CHECKOUTCOM_TEST_PCID="YOUR_CHECKOUTCOM_PROCESSING_CHANNEL_ID"

Then run tests with: go test ./integration-tests/

Code Example for Auth + Capture

go
import ( "github.com/BoltApp/sleet" "github.com/BoltApp/sleet/gateways/authorize_net" ) // Generate a client using your own credentials client := authorize_net.NewClient("AUTH_NET_LOGIN_ID", "AUTH_NET_TXN_KEY") amount := sleet.Amount{ Amount: 100, Currency: "USD", } card := sleet.CreditCard{ FirstName: "Bolt", LastName: "Checkout", Number: "4111111111111111", ExpMonth: 8, EpxYear: 2010, CVV: "000", } streetAddress := "22 Linda St." locality := "Hoboken" regionCode := "NJ" postalCode := "07030" countryCode := "US" address := sleet.BillingAddress{ StreetAddress1: &streetAddress, Locality: &locality, RegionCode: &regionCode, PostalCode: &postalCode, CountryCode: &countryCode, } // To get specific response headers, add them to the request options. // They will be attached to the AuthorizationResponse options := make(map[string]interface{}) options["ResponseHeader"] = []string{"x-test-header"} authorizeRequest := sleet.AuthorizationRequest{ Amount: &amount, CreditCard: &card, BillingAddress: &address, Options: options, } authorizeResponse, _ := client.Authorize(&authorizeRequest) captureRequest := sleet.CaptureRequest{ Amount: &amount, TransactionReference: authorizeResponse.TransactionReference, } client.Capture(&captureRequest)

Contributors

Showing top 12 contributors by commit count.

View all contributors on GitHub →

This article is auto-generated from BoltApp/sleet via the GitHub API.Last fetched: 6/28/2026