75 lines
2.5 KiB
Go
75 lines
2.5 KiB
Go
package snipcart
|
|
|
|
import (
|
|
"encoding/base64"
|
|
"fmt"
|
|
"net/http"
|
|
"time"
|
|
)
|
|
|
|
type TaxShippingInfo struct {
|
|
Fees float64 `json:"fees"`
|
|
Method string `json:"method"`
|
|
}
|
|
|
|
type TaxContent struct {
|
|
Created time.Time `json:"creationDate"`
|
|
Modified time.Time `json:"modificationDate"`
|
|
Token string `json:"token"`
|
|
Email string `json:"email"`
|
|
ShipToBillingAddress bool `json:"shipToBillingAddress"`
|
|
BillingAddress Address `json:"billingAddress"`
|
|
ShippingAddress Address `json:"shippingAddress"`
|
|
InvoiceNumber string `json:"invoiceNumber"`
|
|
ShippingInformation TaxShippingInfo `json:"shippingInformation"`
|
|
Items []Item `json:"items"`
|
|
Discounts []any `json:"discounts"`
|
|
CustomFields []CustomField `json:"customFields"`
|
|
Plans []any `json:"plans"`
|
|
Refunds []any `json:"refunds"`
|
|
Taxes []any `json:"taxes"`
|
|
Currency string `json:"currency"`
|
|
Total float64 `json:"total"`
|
|
DiscountsTotal float64 `json:"discountsTotal"`
|
|
ItemsTotal float64 `json:"itemsTotal"`
|
|
TaxesTotal float64 `json:"taxesTotal"`
|
|
PlansTotal float64 `json:"plansTotal"`
|
|
TaxProvider any `json:"taxProvider"`
|
|
Metadata any `json:"metadata"`
|
|
}
|
|
|
|
type Tax struct {
|
|
Name string `json:"name"`
|
|
Amount float64 `json:"amount"`
|
|
NumberForInvoice string `json:"numberForInvoice"`
|
|
Rate float64 `json:"rate"`
|
|
}
|
|
|
|
type TaxResponse struct {
|
|
Taxes []Tax `json:"taxes"`
|
|
}
|
|
|
|
func (s *Client) ValidateWebhook(token string) error {
|
|
validateRequest, err := http.NewRequest("GET", validationUri+token, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
client := &http.Client{}
|
|
|
|
auth := base64.StdEncoding.EncodeToString([]byte(s.Key + ":"))
|
|
validateRequest.Header.Set("Authorization", fmt.Sprintf("Basic %s", auth))
|
|
validateRequest.Header.Set("Accept", "application/json")
|
|
|
|
validateResponse, err := client.Do(validateRequest)
|
|
if err != nil {
|
|
return fmt.Errorf("error validating webhook: %s", err.Error())
|
|
}
|
|
|
|
if validateResponse.StatusCode < 200 || validateResponse.StatusCode >= 300 {
|
|
return fmt.Errorf("non-2XX status code for validating webhook: %d", validateResponse.StatusCode)
|
|
}
|
|
|
|
return nil
|
|
}
|