Golang Gin Stripe Configuration
The original documentation comes from my documentation website here
This is a small "Hello, World!" to show a charge being made for Golang + Gin web server.
Resources
- Go Docs Stripe
- Stripe API
- Stripe Testing Cards
- Github Stripe Go Charge Testing
- Gin Github
- Golang Dotenv Github
Setting up
We need a few libs to get this all going. Run the following to fetch prerequisite packages:
# Gin server lib
go get -u github.com/gin-gonic/gin
# Stripe Go API
go get github.com/stripe/stripe-go
# Dotenv package for Golang
go get github.com/joho/godotenv
Setting up main.go
The Golang API (in my opinion) has some more complexity as opposed to others for setting up a basic charge.
Reading over their tests (like resource [4]) is the perfect way to see how to conform and adhere to the types -- particularly for our basic example.
package main
import (
"log"
"net/http"
"os"
"github.com/gin-gonic/gin"
"github.com/joho/godotenv"
"github.com/stripe/stripe-go"
"github.com/stripe/stripe-go/charge"
)
type ChargeJSON struct {
Amount int64 `json:"amount"`
ReceiptEmail string `json:"receiptEmail"`
}
func main() {
err := godotenv.Load()
if err != nil {
log.Fatal("Error loading .env file")
}
r := gin.Default()
r.GET("/", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "Hello, World!",
})
})
r.POST("/api/charge", func(c *gin.Context) {
var json ChargeJSON
c.BindJSON(&json)
apiKey := os.Getenv("SK_TEST_KEY")
stripe.Key = apiKey
_, err := charge.New(&stripe.ChargeParams{
Amount: stripe.Int64(json.Amount),
Currency: stripe.String(string(stripe.CurrencyUSD)),
Source: &stripe.SourceParams{Token: stripe.String("tok_visa")},
ReceiptEmail: stripe.String(json.ReceiptEmail)})
if err != nil {
c.String(http.StatusBadRequest, "Request failed")
return
}
c.String(http.StatusCreated, "Successfully charged")
})
r.Run(":8080")
}
Making A Test Charge
We can run our server with the following:
go run main.go
In another terminal, run http POST http://localhost:8080/api/charge amount:=500 receiptEmail=hello@example.com
(using HTTPie) and we will get back Successfully charged
! Hooray! We made it.