WooCommerce Go REST API Library - A comprehensive Go client for the WooCommerce REST API v3.
- Full WooCommerce REST API v3 coverage
- Context support for cancellation and timeout
- Automatic retry with rate limiting
- Comprehensive error handling
- Type-safe API responses
go get github.com/chenyangguang/woocommercepackage main
import (
"fmt"
"log"
woo "github.com/chenyangguang/woocommerce"
)
func main() {
// Create an app with your WooCommerce credentials
app := woo.App{
CustomerKey: "your_consumer_key",
CustomerSecret: "your_consumer_secret",
}
// Create a client for your shop
client := app.NewClient("your-shop.com")
// List products
var products []woo.Product
err := client.Product.List(nil, &products)
if err != nil {
log.Fatal(err)
}
for _, p := range products {
fmt.Printf("Product: %s - %s\n", p.Name, p.Price)
}
}| Resource | Methods |
|---|---|
| Products | List, Get, Create, Update, Delete, Batch |
| Product Variations | List, Get, Create, Update, Delete, Batch |
| Product Categories | List, Get, Create, Update, Delete, Batch |
| Product Tags | List, Get, Create, Update, Delete, Batch |
| Product Attributes | List, Get, Create, Update, Delete, Batch |
| Product Shipping Classes | List, Get, Create, Update, Delete, Batch |
| Product Reviews | List, Get, Create, Update, Delete, Batch |
| Orders | List, Get, Create, Update, Delete, Batch |
| Order Notes | List, Get, Create, Delete |
| Order Refunds | List, Get, Create, Delete |
| Customers | List, Get, Create, Update, Delete, Batch |
| Coupons | List, Get, Create, Update, Delete, Batch |
| Payment Gateways | List, Get, Update |
| Webhooks | List, Get, Create, Update, Delete, Batch |
| Settings | Get, Update |
All API methods have context-aware variants for timeout and cancellation control:
import "context"
// Create a context with timeout
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
// Use context-aware methods
var products []woo.Product
err := client.Product.ListWithContext(ctx, nil, &products)The library provides typed errors for proper error handling:
import "errors"
err := client.Product.Get(999, nil, &product)
if err != nil {
var respErr woo.ResponseError
if errors.As(err, &respErr) {
fmt.Printf("API Error (Status %d): %s\n", respErr.Status, respErr.Message)
}
var rateLimitErr woo.RateLimitError
if errors.As(err, &rateLimitErr) {
fmt.Printf("Rate limited. Retry after %d seconds\n", rateLimitErr.RetryAfter)
}
}// With custom HTTP client
client := app.NewClient("your-shop.com", woo.WithHTTPClient(customClient))
// With custom logger
client := app.NewClient("your-shop.com", woo.WithLogger(myLogger))
// With retry support
client := app.NewClient("your-shop.com", woo.WithRetry(3))For complete API documentation, see:
- Go 1.21+
- WooCommerce 3.5+
MIT License - see LICENSE for details.