Aller au contenu

SDK Go

Le module github.com/sangho/sangho-go est le client officiel Sangho pour Go 1.21+. Il est idiomatique, entièrement typé et conçu pour les environnements de production — sans dépendances tierces superflues.

Installation

bash
go get github.com/sangho/sangho-go

Modules disponibles

AppsAddressesPaymentIntentsCheckoutSessionsTransactionsRefundsPaymentLinksCustomersPaymentMethodsProductsInvoicesReceiptsSubscriptionsWebhooksSecurityTerminal
Idiomatic Go

Toutes les réponses API retournent un tuple (result, error). Les paramètres optionnels sont passés via des structs dédiés suffixés Params — ex. PaymentIntentCreateParams. Zéro interface{} vide dans le code critique.

Initialisation

go
package main


import (
    "os"
    sangho "github.com/sangho/sangho-go"
)


func main() {
    // Clé directe (déconseillé en production)
    client := sangho.NewClient("sk_live_xxxxxxxxxxxx")


    // Depuis variable d'environnement (recommandé)
    client := sangho.NewClient(os.Getenv("SANGHO_SECRET_KEY"))


    // Options avancées
    client := sangho.NewClient(
        os.Getenv("SANGHO_SECRET_KEY"),
        sangho.WithBaseURL("https://api.sangho.com/v1/"),
        sangho.WithTimeout(30*time.Second),
        sangho.WithMaxRetries(3),
    )
}

Gestion des erreurs

Les erreurs retournées par le SDK sont de type *sangho.Error. Utilisez errors.As pour accéder aux champs métier Code, Message et HTTPStatus.

Pagination

Les endpoints de liste retournent un type générique sangho.ListResponse[T] avec les champs Count, Next, Previous et Results. Utilisez les paramètres Page et PageSize pour naviguer.

Retry automatique

Le SDK retente automatiquement les erreurs 429 (rate limit) et 5xx avec un backoff exponentiel. Configurez WithMaxRetries à l’initialisation (défaut : 3).

Gestion des erreurs

go
package main


import (
    "errors"
    "fmt"
    "os"
    sangho "github.com/sangho/sangho-go"
)


func main() {
    client := sangho.NewClient(os.Getenv("SANGHO_SECRET_KEY"))


    intent, err := client.PaymentIntents.Create(ctx,
        sangho.PaymentIntentCreateParams{
            Amount:             5000,
            Currency:           "XAF",
            PaymentMethodTypes: []string{"mobile_money"},
        },
    )
    if err != nil {
        var sErr *sangho.Error
        if errors.As(err, &sErr) {
            fmt.Println(sErr.Code)       // Code métier Sangho
            fmt.Println(sErr.Message)    // Message lisible
            fmt.Println(sErr.HTTPStatus) // Code HTTP (400, 401, 422…)
        }
        return
    }
    fmt.Println(intent.ID)
}

Pagination

go
// Page 1
page1, err := client.Transactions.List(ctx,
    sangho.TransactionListParams{
        Status:   "completed",
        Page:     1,
        PageSize: 20,
    },
)
if err != nil { /* ... */ }


fmt.Println(page1.Count)   // Total de résultats
fmt.Println(page1.Results) // Slice de la page courante


// Page suivante
if page1.Next != "" {
    page2, err := client.Transactions.List(ctx,
        sangho.TransactionListParams{
            Status:   "completed",
            Page:     2,
            PageSize: 20,
        },
    )
    _ = page2
    _ = err
}