10
10
package messagebird
11
11
12
12
import (
13
+ "bytes"
13
14
"encoding/json"
14
15
"errors"
15
16
"io/ioutil"
@@ -64,42 +65,40 @@ func New(AccessKey string) *Client {
64
65
return & Client {AccessKey : AccessKey , HTTPClient : & http.Client {}}
65
66
}
66
67
67
- func (c * Client ) request (v interface {}, path string , params * url. Values ) error {
68
+ func (c * Client ) request (v interface {}, path string , data interface {} ) error {
68
69
uri , err := url .Parse (Endpoint + "/" + path )
69
70
if err != nil {
70
71
return err
71
72
}
72
73
73
- var request * http.Request
74
- if params != nil {
75
- body := params .Encode ()
76
- if request , err = http .NewRequest ("POST" , uri .String (), strings .NewReader (body )); err != nil {
74
+ method := "GET"
75
+ var jsonEncoded []byte
76
+ if data != nil {
77
+ jsonEncoded , err = json .Marshal (data )
78
+ if err != nil {
77
79
return err
78
80
}
81
+ method = "POST"
82
+ }
79
83
80
- if c .DebugLog != nil {
81
- if unescapedBody , queryError := url .QueryUnescape (body ); queryError == nil {
82
- log .Printf ("HTTP REQUEST: POST %s %s" , uri .String (), unescapedBody )
83
- } else {
84
- log .Printf ("HTTP REQUEST: POST %s %s" , uri .String (), body )
85
- }
86
- }
84
+ request , err := http .NewRequest (method , uri .String (), bytes .NewBuffer (jsonEncoded ))
85
+ if err != nil {
86
+ return err
87
+ }
87
88
88
- request .Header .Set ("Content-Type" , "application/x-www-form-urlencoded" )
89
- } else {
90
- if request , err = http .NewRequest ("GET" , uri .String (), nil ); err != nil {
91
- return err
92
- }
89
+ request .Header .Set ("Content-Type" , "application/json" )
90
+ request .Header .Set ("Accept" , "application/json" )
91
+ request .Header .Set ("Authorization" , "AccessKey " + c .AccessKey )
92
+ request .Header .Set ("User-Agent" , "MessageBird/ApiClient/" + ClientVersion + " Go/" + runtime .Version ())
93
93
94
- if c .DebugLog != nil {
95
- log .Printf ("HTTP REQUEST: GET %s" , uri .String ())
94
+ if c .DebugLog != nil {
95
+ if data != nil {
96
+ log .Printf ("HTTP REQUEST: %s %s %s" , method , uri .String (), jsonEncoded )
97
+ } else {
98
+ log .Printf ("HTTP REQUEST: %s %s" , method , uri .String ())
96
99
}
97
100
}
98
101
99
- request .Header .Add ("Accept" , "application/json" )
100
- request .Header .Add ("Authorization" , "AccessKey " + c .AccessKey )
101
- request .Header .Add ("User-Agent" , "MessageBird/ApiClient/" + ClientVersion + " Go/" + runtime .Version ())
102
-
103
102
response , err := c .HTTPClient .Do (request )
104
103
if err != nil {
105
104
return err
@@ -182,14 +181,15 @@ func (c *Client) HLRs() (*HLRList, error) {
182
181
}
183
182
184
183
// NewHLR retrieves the information of an existing HLR.
185
- func (c * Client ) NewHLR (msisdn , reference string ) (* HLR , error ) {
186
- params := & url. Values {
187
- "msisdn" : { msisdn },
188
- "reference" : { reference },
184
+ func (c * Client ) NewHLR (msisdn string , reference string ) (* HLR , error ) {
185
+ requestData , err := requestDataForHLR ( msisdn , reference )
186
+ if err != nil {
187
+ return nil , err
189
188
}
190
189
191
190
hlr := & HLR {}
192
- if err := c .request (hlr , HLRPath , params ); err != nil {
191
+
192
+ if err := c .request (hlr , HLRPath , requestData ); err != nil {
193
193
if err == ErrResponse {
194
194
return hlr , err
195
195
}
@@ -235,17 +235,13 @@ func (c *Client) Messages(msgListParams *MessageListParams) (*MessageList, error
235
235
236
236
// NewMessage creates a new message for one or more recipients.
237
237
func (c * Client ) NewMessage (originator string , recipients []string , body string , msgParams * MessageParams ) (* Message , error ) {
238
- params , err := paramsForMessage ( msgParams )
238
+ requestData , err := requestDataForMessage ( originator , recipients , body , msgParams )
239
239
if err != nil {
240
240
return nil , err
241
241
}
242
242
243
- params .Set ("originator" , originator )
244
- params .Set ("body" , body )
245
- params .Set ("recipients" , strings .Join (recipients , "," ))
246
-
247
243
message := & Message {}
248
- if err := c .request (message , MessagePath , params ); err != nil {
244
+ if err := c .request (message , MessagePath , requestData ); err != nil {
249
245
if err == ErrResponse {
250
246
return message , err
251
247
}
@@ -322,12 +318,13 @@ func (c *Client) VoiceMessages() (*VoiceMessageList, error) {
322
318
323
319
// NewVoiceMessage creates a new voice message for one or more recipients.
324
320
func (c * Client ) NewVoiceMessage (recipients []string , body string , params * VoiceMessageParams ) (* VoiceMessage , error ) {
325
- urlParams := paramsForVoiceMessage (params )
326
- urlParams .Set ("body" , body )
327
- urlParams .Set ("recipients" , strings .Join (recipients , "," ))
321
+ requestData , err := requestDataForVoiceMessage (recipients , body , params )
322
+ if err != nil {
323
+ return nil , err
324
+ }
328
325
329
326
message := & VoiceMessage {}
330
- if err := c .request (message , VoiceMessagePath , urlParams ); err != nil {
327
+ if err := c .request (message , VoiceMessagePath , requestData ); err != nil {
331
328
if err == ErrResponse {
332
329
return message , err
333
330
}
@@ -340,11 +337,13 @@ func (c *Client) NewVoiceMessage(recipients []string, body string, params *Voice
340
337
341
338
// NewVerify generates a new One-Time-Password for one recipient.
342
339
func (c * Client ) NewVerify (recipient string , params * VerifyParams ) (* Verify , error ) {
343
- urlParams := paramsForVerify (params )
344
- urlParams .Set ("recipient" , recipient )
340
+ requestData , err := requestDataForVerify (recipient , params )
341
+ if err != nil {
342
+ return nil , err
343
+ }
345
344
346
345
verify := & Verify {}
347
- if err := c .request (verify , VerifyPath , urlParams ); err != nil {
346
+ if err := c .request (verify , VerifyPath , requestData ); err != nil {
348
347
if err == ErrResponse {
349
348
return verify , err
350
349
}
@@ -393,11 +392,11 @@ func (c *Client) Lookup(phoneNumber string, params *LookupParams) (*Lookup, erro
393
392
394
393
// NewLookupHLR creates a new HLR lookup for the specified number.
395
394
func (c * Client ) NewLookupHLR (phoneNumber string , params * LookupParams ) (* HLR , error ) {
396
- urlParams := paramsForLookup (params )
395
+ requestData := requestDataForLookup (params )
397
396
path := LookupPath + "/" + phoneNumber + "/" + HLRPath
398
397
399
398
hlr := & HLR {}
400
- if err := c .request (hlr , path , urlParams ); err != nil {
399
+ if err := c .request (hlr , path , requestData ); err != nil {
401
400
if err == ErrResponse {
402
401
return hlr , err
403
402
}
0 commit comments