packagemainimport("encoding/json""log""net/http""os"nethttp"github.com/openlibx402/go/openlibx402-nethttp")funcmain(){// Initialize X402 with configurationnethttp.InitX402(&nethttp.Config{PaymentAddress:os.Getenv("X402_PAYMENT_ADDRESS"),TokenMint:os.Getenv("X402_TOKEN_MINT"),Network:"solana-devnet",AutoVerify:true,})// Free endpoint (no payment required)http.HandleFunc("/api/free",func(whttp.ResponseWriter,r*http.Request){json.NewEncoder(w).Encode(map[string]string{"message":"Free data","data":"Available to everyone",})})// Premium endpoint (requires $0.10)http.Handle("/api/premium",nethttp.PaymentRequired(nethttp.PaymentRequiredOptions{Amount:"0.10",Description:"Premium data access",})(http.HandlerFunc(premiumHandler)))log.Println("Server listening on :8080")log.Fatal(http.ListenAndServe(":8080",nil))}funcpremiumHandler(whttp.ResponseWriter,r*http.Request){// Access payment details if neededauth:=nethttp.GetPaymentAuthorization(r)ifauth!=nil{log.Printf("Payment received: %s USDC",auth.ActualAmount)}json.NewEncoder(w).Encode(map[string]interface{}{"message":"Premium data","data":"You paid for this!","premium":true,})}
{"max_amount_required":"0.10","asset_type":"SPL","asset_address":"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v","payment_address":"YOUR_WALLET_ADDRESS","network":"solana-devnet","expires_at":"2025-01-01T00:05:00Z","payment_id":"...","resource":"/api/premium","description":"Premium data access"}
// Basic tier: $0.05http.Handle("/api/basic",nethttp.PaymentRequired(nethttp.PaymentRequiredOptions{Amount:"0.05",Description:"Basic data access",})(basicHandler))// Standard tier: $0.10http.Handle("/api/standard",nethttp.PaymentRequired(nethttp.PaymentRequiredOptions{Amount:"0.10",Description:"Standard data access",})(standardHandler))// Premium tier: $1.00http.Handle("/api/premium",nethttp.PaymentRequired(nethttp.PaymentRequiredOptions{Amount:"1.00",Description:"Premium data access",})(premiumHandler))
funcrateLimitHandler(whttp.ResponseWriter,r*http.Request){auth:=nethttp.GetPaymentAuthorization(r)// Allow 100 requests per $1 paidifauth!=nil{amount,_:=strconv.ParseFloat(auth.ActualAmount,64)requestsAllowed:=int(amount*100)// Implement rate limiting based on payment}json.NewEncoder(w).Encode(data)}