github.com/stripe/stripe-go/v76@v76.25.0/webhook/client_handler_test.go (about)

     1  package webhook_test
     2  
     3  import (
     4  	"fmt"
     5  	"io/ioutil"
     6  	"log"
     7  	"net/http"
     8  
     9  	"github.com/stripe/stripe-go/v76/webhook"
    10  )
    11  
    12  func Example() {
    13  	http.HandleFunc("/webhook", func(w http.ResponseWriter, req *http.Request) {
    14  		// Protects against a malicious client streaming us an endless request
    15  		// body
    16  		const MaxBodyBytes = int64(65536)
    17  		req.Body = http.MaxBytesReader(w, req.Body, MaxBodyBytes)
    18  
    19  		body, err := ioutil.ReadAll(req.Body)
    20  		if err != nil {
    21  			w.WriteHeader(http.StatusBadRequest)
    22  			return
    23  		}
    24  
    25  		// Pass the request body & Stripe-Signature header to ConstructEvent, along with the webhook signing key
    26  		event, err := webhook.ConstructEvent(body, req.Header.Get("Stripe-Signature"), "whsec_DaLRHCRs35vEXqOE8uTEAXGLGUOnyaFf")
    27  
    28  		if err != nil {
    29  			w.WriteHeader(http.StatusBadRequest) // Return a 400 error on a bad signature
    30  			fmt.Fprintf(w, "%v", err)
    31  			return
    32  		}
    33  
    34  		fmt.Fprintf(w, "Received signed event: %v", event)
    35  	})
    36  	log.Fatal(http.ListenAndServe(":8080", nil))
    37  }