Skip to content

SDK Go

Bibliothèque officielle pour Go 1.19+. Disponible sur pkg.go.dev.

Intégration par IA (Prompt pour Marchands)

Si vous utilisez un assistant IA (comme Cursor, GitHub Copilot, ChatGPT, Claude, etc.), vous pouvez copier-coller le prompt suivant pour intégrer ce SDK de A à Z dans votre projet :

text
Agis en tant qu'expert en développement backend Go. Je souhaite intégrer le SDK Go officiel de HayBTech (`github.com/haybtech/haybtech-go-sdk`) pour accepter des paiements mobiles de A à Z.

Voici ma stack technique actuelle :
- Framework HTTP : [ex: Gin, Fiber, Chi, net/http standard]
- Base de données : [ex: GORM avec PostgreSQL, SQLx avec MySQL]
- Structure de commande : [décrivez brièvement votre struct de commande]

Tâches à accomplir dans le code généré :
1. **Initialisation** : Instancier le client avec `haybtech.NewClient(os.Getenv("HAYBTECH_SECRET_KEY"))`.
2. **Création de la session de paiement** : Définir un handler de checkout. Appeler `client.Payments.Create(...)` avec les paramètres requis (merchant_ref, amount, currency='XOF', success_url, failed_url, callback_url) et retourner l'URL de paiement dans une réponse JSON pour rediriger le client.
3. **Webhook sécurisé** : Définir le handler de webhook. Il doit :
   - Lire le payload brut (`io.ReadAll(r.Body)`) et récupérer le header `X-HayBTech-Signature` (ou `X-HayB-Signature`).
   - Appeler `haybtech.ConstructEvent(payload, signature, secret)` avec le secret de webhook (`HAYBTECH_WEBHOOK_SECRET`) pour authentifier la requête.
   - Interroger la base de données et mettre à jour la commande de manière idempotente sur réception de `payment.success` et `payment.failed`.
   - Répondre avec un statut HTTP 200.
4. **Sécurité & Gestion d'erreurs** : Gérer proprement les erreurs, implémenter un mécanisme de protection contre le rejeu de requêtes et logger les pannes sans fuite de secrets d'API.

Génère du code Go robuste, performant, commenté et conforme aux idiomes de Go.

Installation

bash
go get github.com/haybtech/haybtech-go-sdk

Configuration

go
import "github.com/haybtech/haybtech-go-sdk"

client, _ := haybtech.NewClient(os.Getenv("HAYBTECH_SECRET_KEY"))

Paiements

go
result, err := client.Payments.Create(map[string]interface{}{
    "merchant_ref": "ORDER-123",
    "amount":       5000,
    "currency":     "XOF",
    "success_url":  "https://monsite.sn/succes",
    "failed_url":   "https://monsite.sn/echec",
    "callback_url": "https://monsite.sn/webhook",
})
if err != nil {
    log.Fatal(err)
}
data := result["data"].(map[string]interface{})
fmt.Println("Payment URL:", data["payment_url"])

Webhooks (Gin)

go
func handleWebhook(c *gin.Context) {
    body, _ := io.ReadAll(c.Request.Body)
    signature := c.GetHeader("X-HayB-Signature")
    secret := os.Getenv("HAYBTECH_WEBHOOK_SECRET")

    event, err := haybtech.Webhook.ConstructEvent(body, signature, secret)
    if err != nil {
        c.JSON(400, gin.H{"error": "Invalid signature"})
        return
    }

    // Traitez l'événement
    c.Status(200)
}

Webhooks (Echo)

go
e.POST("/webhook", func(c echo.Context) error {
    body, _ := io.ReadAll(c.Request().Body)
    signature := c.Request().Header.Get("X-HayB-Signature")
    
    event, err := haybtech.Webhook.ConstructEvent(body, signature, os.Getenv("HAYBTECH_WEBHOOK_SECRET"))
    if err != nil {
        return c.NoContent(400)
    }

    return c.NoContent(200)
})

Sécurité

  • Zéro dépendance : Utilise uniquement net/http et crypto/hmac.
  • Timing Attack : Utilise hmac.Equal.
  • Masquage : Clé masquée dans la méthode String().

Documentation de l'API de paiement HayBTech.