为了账号安全,请及时绑定邮箱和手机立即绑定

收到未知响应正文

收到未知响应正文

Go
绝地无双 2023-03-07 14:23:16
我正在实施 Authorize.net 信用卡 API。API 总是给我一个 200 响应代码,无论交易是成功还是被拒绝。但它为成功的交易提供了一个响应主体,为拒绝的交易提供了不同的响应主体。type AuthorizeApprovedResponse struct {    TransactionResponse struct {        ResponseCode   string `json:"responseCode"`        AuthCode       string `json:"authCode"`        AvsResultCode  string `json:"avsResultCode"`        CvvResultCode  string `json:"cvvResultCode"`        CavvResultCode string `json:"cavvResultCode"`        TransID        string `json:"transId"`        RefTransID     string `json:"refTransID"`        TransHash      string `json:"transHash"`        TestRequest    string `json:"testRequest"`        AccountNumber  string `json:"accountNumber"`        AccountType    string `json:"accountType"`        Messages       []struct {            Code        string `json:"code"`            Description string `json:"description"`        } `json:"messages"`        UserFields []struct {            Name  string `json:"name"`            Value string `json:"value"`        } `json:"userFields"`        TransHashSha2                          string `json:"transHashSha2"`        SupplementalDataQualificationIndicator int    `json:"SupplementalDataQualificationIndicator"`        NetworkTransID                         string `json:"networkTransId"`    } `json:"transactionResponse"`    RefID    string `json:"refId"`    Messages struct {        ResultCode string `json:"resultCode"`        Message    []struct {            Code string `json:"code"`            Text string `json:"text"`        } `json:"message"`    } `json:"messages"`}     这是我的问题,要使用哪个结构。我在考虑尝试使用 interface{} 然后尝试将其转换为结构?err := json.Unmarshal(b, &whichStructToUse)    if err != nil {        panic(err.Error())    }当我不知道要使用哪个结构时,关于如何解组响应的任何建议?
查看完整描述

1 回答

?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

API 总是给我一个 200 响应代码,无论交易是成功还是被拒绝。


我感觉到你的痛苦。


两个响应之间只有一个区别,success hasMessages和 failure has Errors。结合它们。


type CommonResponse struct {

    TransactionResponse struct {

        ResponseCode   string `json:"responseCode"`

        AuthCode       string `json:"authCode"`

        AvsResultCode  string `json:"avsResultCode"`

        CvvResultCode  string `json:"cvvResultCode"`

        CavvResultCode string `json:"cavvResultCode"`

        TransID        string `json:"transId"`

        RefTransID     string `json:"refTransID"`

        TransHash      string `json:"transHash"`

        TestRequest    string `json:"testRequest"`

        AccountNumber  string `json:"accountNumber"`

        AccountType    string `json:"accountType"`

        Messages       []struct {

            Code        string `json:"code"`

            Description string `json:"description"`

        } `json:"messages"`

        Errors         []struct {

            ErrorCode string `json:"errorCode"`

            ErrorText string `json:"errorText"`

        } `json:"errors"`

        UserFields []struct {

            Name  string `json:"name"`

            Value string `json:"value"`

        } `json:"userFields"`

        TransHashSha2                          string `json:"transHashSha2"`

        SupplementalDataQualificationIndicator int    `json:"SupplementalDataQualificationIndicator"`

        NetworkTransID                         string `json:"networkTransId"`

    } `json:"transactionResponse"`

    RefID    string `json:"refId"`

    Messages struct {

        ResultCode string `json:"resultCode"`

        Message    []struct {

            Code string `json:"code"`

            Text string `json:"text"`

        } `json:"message"`

    } `json:"messages"`

}

然后使用它来解组并检查错误。


    var response CommonResponse;

    json.Unmarshal([]byte(jsonString), &response)

    if len(response.Error) == 0 {

        fmt.Println("Success!")

    } else {

        fmt.Println("Error!")

    }

对于更一般的情况,您可以解组为map[string]interface{}.


var result map[string]interface{}

json.Unmarshal([]byte(jsonString), &result)


查看完整回答
反对 回复 2023-03-07
  • 1 回答
  • 0 关注
  • 101 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信