package providers import ( "encoding/json" "fmt" "net/http" ) const SMSFACTOR_API = "https://api.smsfactor.com" type SMSFactorProvider struct { Token string } func NewSMSFactorProvider(token string) *SMSFactorProvider { return &SMSFactorProvider{ Token: token, } } func (p *SMSFactorProvider) Send(phoneNumber string, message string, sender string) error { req, err := http.NewRequest("GET", SMSFACTOR_API+"/send", nil) fmt.Println(p.Token) req.Header.Add("Authorization", "Bearer "+p.Token) req.Header.Add("Accept", "application/json") q := req.URL.Query() q.Add("to", phoneNumber) q.Add("text", message) q.Add("sender", sender) req.URL.RawQuery = q.Encode() fmt.Println(req.URL) client := &http.Client{} resp, err := client.Do(req) if err != nil { return err } var response map[string]any err = json.NewDecoder(resp.Body).Decode(&response) if err != nil { return err } if status, ok := response["status"].(float64); ok { if status != 1 { return fmt.Errorf("error sending sms : %s - %s", response["message"], response["details"]) } } else { return fmt.Errorf("invalid response : status %s", response["status"]) } return nil }