Appearance
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-sdkConfiguration
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/httpetcrypto/hmac. - Timing Attack : Utilise
hmac.Equal. - Masquage : Clé masquée dans la méthode
String().
