Passed
Branch main (ea1667)
by linnenn
01:44
created

backcard.BankCardInfo   C

Complexity

Conditions 8

Size

Total Lines 53
Code Lines 45

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 8
eloc 45
nop 1
dl 0
loc 53
rs 6.9333
c 0
b 0
f 0

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
package backcard
2
3
import (
4
	"bytes"
5
	"encoding/json"
6
	"errors"
7
	"fmt"
8
	"io"
9
	"net/http"
10
	"net/url"
11
)
12
13
type BankCardInfoStruct struct {
14
	Validated       bool   `json:"validated"`
15
	ValidatedMsg    string `json:"validated_msg"`
16
	BankENShortName string `json:"bank_en_short_name"`
17
	BankENFullName  string `json:"bank_en_full_name"`
18
	BankCNShortName string `json:"bank_cn_short_name"`
19
	BankCNFullName  string `json:"bank_cn_full_name"`
20
	BankImg         string `json:"bank_img"`
21
	CardType        string `json:"card_type"`
22
	CardTypeName    string `json:"card_type_name"`
23
}
24
25
func BankCardInfo(cardNO string) (error, *BankCardInfoStruct) {
26
	form := url.Values{}
27
	form.Add("_input_charset", "utf-8")
28
	form.Add("cardNo", cardNO)
29
	form.Add("cardBinCheck", "true")
30
	req, err := http.NewRequest(http.MethodPost, fmt.Sprintf(getBankInfo, form.Encode()), nil)
31
	if err != nil {
32
		return err, nil
33
	}
34
	resp, err := commonHttpClient5s.Do(req)
35
	if err != nil {
36
		return err, nil
37
	}
38
	defer resp.Body.Close()
39
	var body bytes.Buffer
40
	if len, err := io.Copy(&body, resp.Body); err != nil && len > 0 {
41
		return err, nil
42
	}
43
	type AliPayBankInfo struct {
44
		Messages []struct {
45
			ErrorCodes string `json:"errorCodes"`
46
			Name       string `json:"name"`
47
		} `json:"messages"`
48
		CardType  string `json:"cardType"`
49
		Bank      string `json:"bank"`
50
		Key       string `json:"key"`
51
		Validated bool   `json:"validated"`
52
		Stat      string `json:"stat"`
53
	}
54
	result := new(AliPayBankInfo)
55
	if err := json.Unmarshal(body.Bytes(), result); err != nil {
56
		return err, nil
57
	}
58
	if !result.Validated {
59
		err := errors.New(result.Messages[0].ErrorCodes)
60
		return err, &BankCardInfoStruct{
61
			Validated:    false,
62
			ValidatedMsg: "cardNO error",
63
		}
64
	}
65
	bankName := ""
66
	if bank, ok := bankShortNameMap[result.Bank]; ok {
67
		bankName = bank
68
	}
69
	return nil, &BankCardInfoStruct{
70
		Validated:       true,
71
		BankENShortName: result.Bank,
72
		BankENFullName:  result.Bank,
73
		BankCNShortName: bankName,
74
		BankCNFullName:  bankName,
75
		BankImg:         fmt.Sprintf(bankImageUrl, result.Bank),
76
		CardType:        result.CardType,
77
		CardTypeName:    bankCardTypeMap[result.CardType],
78
	}
79
}
80