10
10
package messagebird
11
11
12
12
import (
13
+ "bytes"
13
14
"encoding/json"
14
15
"errors"
16
+ "fmt"
15
17
"io/ioutil"
16
18
"log"
17
19
"net/http"
18
20
"net/url"
19
21
"runtime"
20
- "strings"
21
22
)
22
23
23
24
const (
@@ -49,41 +50,46 @@ func New(AccessKey string) *Client {
49
50
return & Client {AccessKey : AccessKey , HTTPClient : & http.Client {}}
50
51
}
51
52
52
- func (c * Client ) request (v interface {}, path string , params * url. Values ) error {
53
+ func (c * Client ) request (v interface {}, path string , data interface {} ) error {
53
54
uri , err := url .Parse (Endpoint + "/" + path )
54
55
if err != nil {
55
56
return err
56
57
}
57
58
58
- var request * http.Request
59
- if params != nil {
60
- body := params .Encode ()
61
- if request , err = http .NewRequest ("POST" , uri .String (), strings .NewReader (body )); err != nil {
59
+ method := "GET"
60
+ var jsonEncoded []byte
61
+ if data != nil {
62
+ jsonEncoded , err = json .Marshal (data )
63
+ method = "POST"
64
+ if err != nil {
62
65
return err
63
66
}
67
+ }
64
68
65
- if c .DebugLog != nil {
66
- if unescapedBody , queryError := url .QueryUnescape (body ); queryError == nil {
67
- log .Printf ("HTTP REQUEST: POST %s %s" , uri .String (), unescapedBody )
68
- } else {
69
- log .Printf ("HTTP REQUEST: POST %s %s" , uri .String (), body )
70
- }
71
- }
69
+ request , err := http .NewRequest (method , uri .String (), bytes .NewBuffer (jsonEncoded ))
70
+ if err != nil {
71
+ return err
72
+ }
72
73
73
- request .Header .Set ("Content-Type" , "application/x-www-form-urlencoded" )
74
- } else {
75
- if request , err = http .NewRequest ("GET" , uri .String (), nil ); err != nil {
76
- return err
77
- }
74
+ request .Header .Set ("Content-Type" , "application/json" )
75
+ request .Header .Set ("Accept" , "application/json" )
76
+ request .Header .Set ("Authorization" , "AccessKey " + c .AccessKey )
77
+ request .Header .Add ("User-Agent" , "MessageBird/ApiClient/" + ClientVersion + " Go/" + runtime .Version ())
78
78
79
- if c .DebugLog != nil {
80
- log .Printf ("HTTP REQUEST: GET %s" , uri .String ())
79
+ if c .DebugLog != nil {
80
+ if data != nil {
81
+ log .Printf ("HTTP REQUEST: %s %s %s" , method , uri .String (), jsonEncoded )
82
+ } else {
83
+ log .Printf ("HTTP REQUEST: %s %s" , method , uri .String ())
81
84
}
82
85
}
83
86
84
- request .Header .Add ("Accept" , "application/json" )
85
- request .Header .Add ("Authorization" , "AccessKey " + c .AccessKey )
86
- request .Header .Add ("User-Agent" , "MessageBird/ApiClient/" + ClientVersion + " Go/" + runtime .Version ())
87
+ // TODO remove this
88
+ if data != nil {
89
+ fmt .Printf ("HTTP REQUEST: %s %s %s\n " , method , uri .String (), jsonEncoded )
90
+ } else {
91
+ fmt .Printf ("HTTP REQUEST: %s %s\n " , method , uri .String ())
92
+ }
87
93
88
94
response , err := c .HTTPClient .Do (request )
89
95
if err != nil {
@@ -101,6 +107,9 @@ func (c *Client) request(v interface{}, path string, params *url.Values) error {
101
107
log .Printf ("HTTP RESPONSE: %s" , string (responseBody ))
102
108
}
103
109
110
+ // TODO remove this
111
+ fmt .Printf ("HTTP RESPONSE: %s\n " , string (responseBody ))
112
+
104
113
// Status code 500 is a server error and means nothing can be done at this
105
114
// point.
106
115
if response .StatusCode == 500 {
@@ -152,14 +161,14 @@ func (c *Client) HLR(id string) (*HLR, error) {
152
161
}
153
162
154
163
// NewHLR retrieves the information of an existing HLR.
155
- func (c * Client ) NewHLR (msisdn , reference string ) (* HLR , error ) {
156
- params := & url. Values {
157
- "msisdn" : { msisdn },
158
- "reference" : { reference },
164
+ func (c * Client ) NewHLR (msisdn string , reference string ) (* HLR , error ) {
165
+ requestData , err := requestDataForHLR ( msisdn , reference )
166
+ if err != nil {
167
+ return nil , err
159
168
}
160
169
161
170
hlr := & HLR {}
162
- if err := c .request (hlr , "hlr" , params ); err != nil {
171
+ if err := c .request (hlr , "hlr" , requestData ); err != nil {
163
172
if err == ErrResponse {
164
173
return hlr , err
165
174
}
@@ -186,17 +195,13 @@ func (c *Client) Message(id string) (*Message, error) {
186
195
187
196
// NewMessage creates a new message for one or more recipients.
188
197
func (c * Client ) NewMessage (originator string , recipients []string , body string , msgParams * MessageParams ) (* Message , error ) {
189
- params , err := paramsForMessage ( msgParams )
198
+ requestData , err := requestDataForMessage ( originator , recipients , body , msgParams )
190
199
if err != nil {
191
200
return nil , err
192
201
}
193
202
194
- params .Set ("originator" , originator )
195
- params .Set ("body" , body )
196
- params .Set ("recipients" , strings .Join (recipients , "," ))
197
-
198
203
message := & Message {}
199
- if err := c .request (message , "messages" , params ); err != nil {
204
+ if err := c .request (message , "messages" , requestData ); err != nil {
200
205
if err == ErrResponse {
201
206
return message , err
202
207
}
@@ -223,12 +228,13 @@ func (c *Client) VoiceMessage(id string) (*VoiceMessage, error) {
223
228
224
229
// NewVoiceMessage creates a new voice message for one or more recipients.
225
230
func (c * Client ) NewVoiceMessage (recipients []string , body string , params * VoiceMessageParams ) (* VoiceMessage , error ) {
226
- urlParams := paramsForVoiceMessage (params )
227
- urlParams .Set ("body" , body )
228
- urlParams .Set ("recipients" , strings .Join (recipients , "," ))
231
+ requestData , err := requestDataForVoiceMessage (recipients , body , params )
232
+ if err != nil {
233
+ return nil , err
234
+ }
229
235
230
236
message := & VoiceMessage {}
231
- if err := c .request (message , "voicemessages" , urlParams ); err != nil {
237
+ if err := c .request (message , "voicemessages" , requestData ); err != nil {
232
238
if err == ErrResponse {
233
239
return message , err
234
240
}
@@ -241,11 +247,13 @@ func (c *Client) NewVoiceMessage(recipients []string, body string, params *Voice
241
247
242
248
// NewVerify generates a new One-Time-Password for one recipient.
243
249
func (c * Client ) NewVerify (recipient string , params * VerifyParams ) (* Verify , error ) {
244
- urlParams := paramsForVerify (params )
245
- urlParams .Set ("recipient" , recipient )
250
+ requestData , err := requestDataForVerify (recipient , params )
251
+ if err != nil {
252
+ return nil , err
253
+ }
246
254
247
255
verify := & Verify {}
248
- if err := c .request (verify , "verify" , urlParams ); err != nil {
256
+ if err := c .request (verify , "verify" , requestData ); err != nil {
249
257
if err == ErrResponse {
250
258
return verify , err
251
259
}
@@ -294,11 +302,11 @@ func (c *Client) Lookup(phoneNumber string, params *LookupParams) (*Lookup, erro
294
302
295
303
// NewLookupHLR creates a new HLR lookup for the specified number.
296
304
func (c * Client ) NewLookupHLR (phoneNumber string , params * LookupParams ) (* HLR , error ) {
297
- urlParams := paramsForLookup (params )
305
+ requestData := requestDataForLookup (params )
298
306
path := "lookup/" + phoneNumber + "/hlr"
299
307
300
308
hlr := & HLR {}
301
- if err := c .request (hlr , path , urlParams ); err != nil {
309
+ if err := c .request (hlr , path , requestData ); err != nil {
302
310
if err == ErrResponse {
303
311
return hlr , err
304
312
}
0 commit comments