-
Notifications
You must be signed in to change notification settings - Fork 1
/
sms_activate.go
74 lines (66 loc) · 1.46 KB
/
sms_activate.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package sms_activate_go
import (
"net/http"
"net/url"
)
const (
apiKeyLength = 32
apiBaseURL = "https://api.sms-activate.org/stubs/handler_api.php"
maxAvailableCountries = 196
allCountries = -1
)
const (
apiKeyQuery = "api_key"
actionQuery = "action"
operatorQuery = "operator"
countryQuery = "country"
refCode = "194015"
)
type (
SMSActivate struct {
APIKey string
BaseURL *url.URL
RefCode string
httpClient *http.Client
}
baseRequest struct {
APIKey string `url:"api_key"`
Action string `url:"action"`
Service string `url:"service,omitempty"`
FreePrice bool `url:"freePrice,omitempty"`
ActivationID string `url:"id,omitempty"`
Status int `url:"status,omitempty"`
}
option func(*SMSActivate)
)
func WithNonDefURL(newURL *url.URL) option {
return func(act *SMSActivate) {
act.BaseURL = newURL
}
}
func WithRefCode(code string) option {
return func(act *SMSActivate) {
act.RefCode = code
}
}
func WithHTTPClient(client *http.Client) option {
return func(act *SMSActivate) {
act.httpClient = client
}
}
func New(apikey string, option ...option) (*SMSActivate, error) {
if len(apikey) != apiKeyLength {
return nil, ErrBadLengthKey
}
baseURL, _ := url.Parse(apiBaseURL)
act := &SMSActivate{
APIKey: apikey,
BaseURL: baseURL,
httpClient: http.DefaultClient,
RefCode: refCode,
}
for _, opt := range option {
opt(act)
}
return act, nil
}