1
0
mirror of https://github.com/silenceper/wechat.git synced 2026-02-04 12:52:27 +08:00

return *CommonError instead of errorString (#568)

This commit is contained in:
sū hǎi
2022-05-17 10:33:53 +08:00
committed by GitHub
parent 890e9fed43
commit f2e7979a9f
2 changed files with 67 additions and 2 deletions

View File

@@ -8,10 +8,15 @@ import (
// CommonError 微信返回的通用错误json // CommonError 微信返回的通用错误json
type CommonError struct { type CommonError struct {
apiName string
ErrCode int64 `json:"errcode"` ErrCode int64 `json:"errcode"`
ErrMsg string `json:"errmsg"` ErrMsg string `json:"errmsg"`
} }
func (c *CommonError) Error() string {
return fmt.Sprintf("%s Error , errcode=%d , errmsg=%s", c.apiName, c.ErrCode, c.ErrMsg)
}
// DecodeWithCommonError 将返回值按照CommonError解析 // DecodeWithCommonError 将返回值按照CommonError解析
func DecodeWithCommonError(response []byte, apiName string) (err error) { func DecodeWithCommonError(response []byte, apiName string) (err error) {
var commError CommonError var commError CommonError
@@ -19,8 +24,9 @@ func DecodeWithCommonError(response []byte, apiName string) (err error) {
if err != nil { if err != nil {
return return
} }
commError.apiName = apiName
if commError.ErrCode != 0 { if commError.ErrCode != 0 {
return fmt.Errorf("%s Error , errcode=%d , errmsg=%s", apiName, commError.ErrCode, commError.ErrMsg) return &commError
} }
return nil return nil
} }
@@ -45,7 +51,11 @@ func DecodeWithError(response []byte, obj interface{}, apiName string) error {
return fmt.Errorf("errcode or errmsg is invalid") return fmt.Errorf("errcode or errmsg is invalid")
} }
if errCode.Int() != 0 { if errCode.Int() != 0 {
return fmt.Errorf("%s Error , errcode=%d , errmsg=%s", apiName, errCode.Int(), errMsg.String()) return &CommonError{
apiName: apiName,
ErrCode: errCode.Int(),
ErrMsg: errMsg.String(),
}
} }
return nil return nil
} }

55
util/error_test.go Normal file
View File

@@ -0,0 +1,55 @@
package util
import "testing"
var okErrData string = `{"errcode": 0}`
var errData string = `{"errcode": 43101, "errmsg": "user refuse to accept the msg"}`
var expectError string = "Send Error , errcode=43101 , errmsg=user refuse to accept the msg"
func TestDecodeWithCommonErrorNoError(t *testing.T) {
err := DecodeWithCommonError([]byte(okErrData), "Send")
if err != nil {
t.Error("DecodeWithCommonError should not return error")
return
}
}
func TestDecodeWithCommonError(t *testing.T) {
err := DecodeWithCommonError([]byte(errData), "Send")
if err == nil {
t.Error("DecodeWithCommonError should return error")
return
}
cErr, ok := err.(*CommonError)
if !ok {
t.Errorf("DecodeWithCommonError should return *CommonError but %T", err)
return
}
if !(cErr.ErrCode == 43101 && cErr.ErrMsg == "user refuse to accept the msg" && cErr.Error() == expectError) {
t.Error("DecodeWithCommonError return bad *CommonError")
return
}
}
func TestDecodeWithError(t *testing.T) {
type DE struct {
CommonError
}
var obj DE
err := DecodeWithError([]byte(errData), &obj, "Send")
if err == nil {
t.Error("DecodeWithError should return error")
return
}
cErr, ok := err.(*CommonError)
if !ok {
t.Errorf("DecodeWithError should return *CommonError but %T", err)
return
}
if !(cErr.ErrCode == 43101 && cErr.ErrMsg == "user refuse to accept the msg" && cErr.Error() == expectError) {
t.Error("DecodeWithError return bad *CommonError")
return
}
}