收到未知响应正文

我正在实施 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())

    }

当我不知道要使用哪个结构时,关于如何解组响应的任何建议?


绝地无双
浏览 102回答 1
1回答

哆啦的时光机

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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go