Skip to content

Commit a6f81f8

Browse files
authored
Merge pull request #2 from i-pva/error-handler
bugfix: improvement for response
2 parents 7d93a71 + e42790c commit a6f81f8

File tree

2 files changed

+18
-17
lines changed

2 files changed

+18
-17
lines changed

liqpay.go

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,14 @@ import (
66
"encoding/base64"
77
"encoding/json"
88
"errors"
9+
"fmt"
910
"html/template"
1011
"net/http"
1112
"net/url"
1213
)
1314

1415
const liqpayURL = "https://www.liqpay.ua/api/"
1516

16-
var defaultClient = http.Client{}
17-
1817
type formData struct {
1918
Data string
2019
Signature string
@@ -33,7 +32,7 @@ type Response map[string]interface{}
3332
func New(pubKey string, privKey string, client *http.Client) *Client {
3433
var c *http.Client
3534
if client == nil {
36-
c = &defaultClient
35+
c = &http.Client{}
3736
} else {
3837
c = client
3938
}
@@ -64,15 +63,22 @@ func (c Client) Send(apiUrl string, req Request) (Response, error) {
6463
return nil, err
6564
}
6665
defer resp.Body.Close()
66+
67+
if resp.StatusCode != 200 {
68+
return nil, errors.New(fmt.Sprintf("bad response status code, status code is %d", resp.StatusCode))
69+
}
70+
6771
var res Response
6872
if err := json.NewDecoder(resp.Body).Decode(&res); err != nil {
6973
return nil, err
7074
}
71-
errMsg := res["err_description"].(string)
72-
if resp.StatusCode != 200 {
73-
return res, errors.New(errMsg)
74-
} else if res["status"] == "error" {
75-
return res, errors.New(errMsg)
75+
76+
if res["status"] == "error" {
77+
errMsg, ok := res["err_description"].(string)
78+
if ok {
79+
return nil, errors.New(errMsg)
80+
}
81+
return nil, errors.New("response body has status error but didn't get error description")
7682
}
7783

7884
return res, nil

liqpay_test.go

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package liqpay
33
import (
44
"encoding/base64"
55
"encoding/json"
6+
"errors"
67
"net/http"
78
"reflect"
89
"testing"
@@ -22,7 +23,7 @@ func TestClient_Send(t *testing.T) {
2223
name string
2324
fields fields
2425
args args
25-
want Response
26+
want error
2627
wantErr bool
2728
}{
2829
{
@@ -39,13 +40,7 @@ func TestClient_Send(t *testing.T) {
3940
"num": 124.0,
4041
},
4142
},
42-
want: Response{
43-
"result": "error",
44-
"status": "error",
45-
"code": "public_key_not_found",
46-
"err_code": "public_key_not_found",
47-
"err_description": "Не найден public_key",
48-
},
43+
want: errors.New("Не найден public_key"),
4944
wantErr: true,
5045
},
5146
}
@@ -61,7 +56,7 @@ func TestClient_Send(t *testing.T) {
6156
t.Errorf("Client.Send() error = %v, wantErr %v", err, tt.wantErr)
6257
return
6358
}
64-
if !reflect.DeepEqual(got, tt.want) {
59+
if !reflect.DeepEqual(err, tt.want) {
6560
t.Errorf("Client.Send() = %v, want %v", got, tt.want)
6661
}
6762
})

0 commit comments

Comments
 (0)