package main
import (
"io"
"net/http"
openpay "github.com/openlankapay/openlankapay-go-sdk"
)
func webhookHandler(w http.ResponseWriter, r *http.Request) {
payload, err := io.ReadAll(r.Body)
if err != nil {
http.Error(w, "failed to read body", http.StatusBadRequest)
return
}
signature := r.Header.Get("X-Webhook-Signature")
timestamp := r.Header.Get("X-Webhook-Timestamp")
valid, err := client.Webhooks.VerifySignature(payload, signature, timestamp)
if err != nil || !valid {
http.Error(w, "invalid signature", http.StatusUnauthorized)
return
}
event, err := openpay.ParseWebhookEvent(payload)
if err != nil {
http.Error(w, "invalid payload", http.StatusBadRequest)
return
}
switch event.Type {
case "payment.completed":
log.Printf("Payment completed: %s", event.Data.PaymentID)
// Fulfill the order
case "payment.failed":
log.Printf("Payment failed: %s", event.Data.PaymentID)
case "payment.expired":
log.Printf("Payment expired: %s", event.Data.PaymentID)
}
w.WriteHeader(http.StatusOK)
w.Write([]byte(`{"received": true}`))
}