-
Notifications
You must be signed in to change notification settings - Fork 0
/
token.go
147 lines (126 loc) · 3.56 KB
/
token.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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
package culqi
import (
"bytes"
"encoding/json"
"net/url"
)
const (
tokensURL = baseURL + "/tokens"
)
// Token objeto request
type Token struct {
CardNumber string `json:"card_number"`
Cvv string `json:"cvv"`
ExpirationMonth string `json:"expiration_month"`
ExpirationYear string `json:"expiration_year"`
Email string `json:"email"`
Metadata map[string]string `json:"metadata"`
}
// ResponseToken objeto respuesta de token
type ResponseToken struct {
Object string `json:"object"`
ID string `json:"id"`
Type string `json:"type"`
CreationDate int `json:"creation_date"`
Email string `json:"email"`
CardNumber string `json:"card_number"`
LastFour string `json:"last_four"`
Active bool `json:"active"`
Iin struct {
Object string `json:"object"`
Bin string `json:"bin"`
CardBranch string `json:"card_branch"`
CardType string `json:"card_type"`
CardCategory string `json:"card_category"`
InstallmentsAllowed []int `json:"installments_allowed"`
Issuer struct {
Name string `json:"name"`
Country string `json:"country"`
CountryCode string `json:"country_code"`
Website string `json:"website"`
PhoneNumber string `json:"phone_number"`
} `json:"issuer"`
} `json:"iin"`
Client struct {
IP string `json:"ip"`
IPCountry string `json:"ip_country"`
IPCountryCode string `json:"ip_country_code"`
Browser string `json:"browser"`
DeviceFingerprint string `json:"device_fingerprint"`
DeviceType string `json:"device_type"`
} `json:"client"`
Metadata map[string]string `json:"metadata"`
}
// ResponseTokenAll respuesta de token para GetAll y Update
type ResponseTokenAll struct {
Data []ResponseToken `json:"data"`
WrapperResponse
}
// Create método para crear un token
func (tk *Token) Create() (*ResponseToken, error) {
j, err := json.Marshal(tk)
if err != nil {
return nil, err
}
res, err := do("POST", tokensURL, nil, bytes.NewBuffer(j))
if err != nil {
return nil, err
}
rt := &ResponseToken{}
if err = json.Unmarshal(res, rt); err != nil {
return nil, err
}
return rt, nil
}
// GetByID método para obtener un token por id
func (tk *Token) GetByID(id string) (*ResponseToken, error) {
if id == "" {
return nil, ErrParameter
}
res, err := do("GET", tokensURL+"/"+id, nil, nil)
if err != nil {
return nil, err
}
rt := &ResponseToken{}
if err = json.Unmarshal(res, rt); err != nil {
return nil, err
}
return rt, nil
}
// GetAll método para obtener la lista de tokens
func (tk *Token) GetAll(queryParams url.Values) (*ResponseTokenAll, error) {
res, err := do("GET", tokensURL, queryParams, nil)
if err != nil {
return nil, err
}
rts := &ResponseTokenAll{}
if err = json.Unmarshal(res, rts); err != nil {
return nil, err
}
return rts, nil
}
// Update método para agregar o remplazar información a los valores de la metadata de un token
func (tk *Token) Update(id string, metadata map[string]string) (*ResponseToken, error) {
if id == "" || len(metadata) == 0 {
return nil, ErrParameter
}
j, err := json.Marshal(
struct {
Metadata map[string]string `json:"metadata"`
}{
metadata,
},
)
if err != nil {
return nil, err
}
res, err := do("PATCH", tokensURL+"/"+id, nil, bytes.NewBuffer(j))
if err != nil {
return nil, err
}
rt := &ResponseToken{}
if err = json.Unmarshal(res, rt); err != nil {
return nil, err
}
return rt, nil
}