Go Stripe
Summary
The official Stripe Go client library.
Versioning
Each revision of the binding is tagged and the version is updated accordingly.
Given Go's lack of built-in versioning, it is highly recommended you use a package mangement tool in order to ensure a newer version of the binding does not affect backwards compatibility.
To see the list of past versions, run git tag
. To manually get an older
version of the client, clone this repo, checkout the specific tag and build the
library:
git clone https://github.com/stripe/stripe-go.git
cd stripe
git checkout api_version_tag
make build
For more details on changes between versions, see the binding changelog and API changelog.
Installation
go get github.com/stripe/stripe-go
Usage
While some resources may contain more/less APIs, the following pattern is
applied throughout the library for a given resource
:
Without a Client
If you're only dealing with a single key, you can simply import the packages required for the resources you're interacting with without the need to create a client.
import (
"github.com/stripe/stripe-go"
"github.com/stripe/stripe-go/resource"
)
// Setup
stripe.Key = "sk_key"
stripe.SetBackend(backend) // optional, useful for mocking
// Create
resource, err := resource.New(stripe.ResourceParams)
// Get
resource, err := resource.Get(id, stripe.ResourceParams)
// Update
resource, err := resource.Update(stripe.ResourceParams)
// Delete
err := resource.Del(id)
// List
i := resource.List(stripe.ResourceListParams)
for !i.Stop() {
resource, err := i.Next()
}
With a Client
If you're dealing with multiple keys, it is recommended you use the
client.API
. This allows you to create as many clients as needed, each with
their own individual key.
import (
"github.com/stripe/stripe-go"
"github.com/stripe/stripe-go/client"
)
// Setup
sc := &client.API{}
sc.Init("sk_key", nil)
// the second parameter represents the Backend used by the client. It can be
// useful to set one explicitly to either get a custom http.Client or mock it
// entirely in tests.
// Create
resource, err := sc.Resources.New(stripe.ResourceParams)
// Get
resource, err := sc.Resources.Get(id, stripe.ResourceParams)
// Update
resource, err := sc.Resources.Update(stripe.ResourceParams)
// Delete
err := sc.Resources.Del(id)
// List
i := sc.Resources.List(stripe.ResourceListParams)
for !i.Stop() {
resource, err := i.Next()
}
Connect Flows
If you're using an access token
you will need to use a client. Simply pass
the access token
value as the tok
when initalizing the client.
import (
"github.com/stripe/stripe-go"
"github.com/stripe/stripe-go/client"
)
stripe := &client.API{}
stripe.Init("access_token", nil)
Documentation
For a comprehensive list of examples, check out the API documentation.
For details on all the functionality in this library, see the GoDoc documentation.
Below are a few simple examples:
Customers
params := &stripe.CustomerParams{
Balance: -123,
Card: &stripe.CardParams{
Name: "Go Stripe",
Number: "378282246310005",
Month: "06",
Year: "15",
},
Desc: "Stripe Developer",
Email: "gostripe@stripe.com",
}
customer, err := customer.New(params)
Charges
params := &stripe.ChargeListParams{Customer: customer.Id}
params.Filters.AddFilter("include", "", "total_count")
i := charge.List(params)
for !i.Stop() {
c, err := i.Next()
// perform an action on each charge
}
Events
i := event.List(nil)
for !i.Stop() {
e, err := i.Next()
// access event data via e.GetObjValue("resource_name_based_on_type", "resource_property_name")
// alternatively you can access values via e.Data.Obj["resource_name_based_on_type"].(map[string]interface{})["resource_property_name"]
// access previous attributes via e.GetPrevValue("resource_name_based_on_type", "resource_property_name")
// alternatively you can access values via e.Data.Prev["resource_name_based_on_type"].(map[string]interface{})["resource_property_name"]
}
Development
Pull requests from the community are welcome. If you submit one, please keep the following guidelines in mind:
- Code should be
go fmt
compliant. - All types, structs and funcs should be documented.
- Ensure that
make checkin
succeeds.
Test
For running additional tests, follow the steps below:
Set the STRIPE_KEY environment variable to match your test private key:
export STRIPE_KEY=YOUR_API_KEY
Then run:
make test
For any requests, bug or comments, please open an issue or submit a pull request.