2023-08-31 17:32:45 +08:00

90 lines
2.9 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package verifyDun
import (
"encoding/json"
"errors"
"io"
"net/http"
"net/url"
"strconv"
"strings"
"time"
)
// 请求返回值
type bankCardResultResponseData struct {
Code int `json:"code"` // 接口调用状态。200正常其它值调用出错
Msg string `json:"msg"` // 结果说明。如果接口调用出错,那么返回错误描述。成功则返回 ok
Result bankCardResult `json:"result"` // 接口返回结果,各个接口自定义,数据结构参考具体文档说明
}
type bankCardResult struct {
Status int `json:"status"` // 认证结果1-通过 2-不通过原因见reasonType) 0-待定
ReasonType int `json:"reasonType"` // 原因详情
TaskId string `json:"taskId"` // 本次请求数据标识,可以根据该标识在控制台进行数据查询
IsPayed int `json:"isPayed"` // 本次请求是否收费标识1代表收费0代表不收费
}
// CheckBankCard 银行卡三/四要素认证
func CheckBankCard(name, bankCardNo, idCardNo string) (bool, error) {
formData := url.Values{}
formData.Set("name", name)
formData.Set("bankCardNo", bankCardNo)
formData.Set("idCardNo", idCardNo)
formData.Set("secretId", secretId)
formData.Set("businessId", "3cb726bd85104161b25613153c4fba7c")
formData.Set("version", "v1")
formData.Set("timestamp", strconv.FormatInt(time.Now().UnixNano()/1000000, 10))
formData.Set("nonce", string(make([]byte, 32)))
formData.Set("signature", GenSignature(formData))
resp, err := http.Post(apiUrl+"/"+version+"/bankcard/check", "application/x-www-form-urlencoded", strings.NewReader(formData.Encode()))
if err != nil {
return false, errors.New("调用API接口失败:" + err.Error())
}
defer func(Body io.ReadCloser) {
_ = Body.Close()
}(resp.Body)
body, err := io.ReadAll(resp.Body)
if err != nil {
return false, err
}
var responseData idCardResponseData
err = json.Unmarshal(body, &responseData)
if err != nil {
// json解析失败
return false, err
}
if responseData.Code != 200 {
if responseData.Msg != "" {
return false, errors.New(responseData.Msg)
} else {
return false, errors.New("身份证认证失败")
}
}
if responseData.Result.Status == 2 {
if responseData.Result.ReasonType == 2 {
return false, errors.New("持卡人信息与输入信息不一致")
} else if responseData.Result.ReasonType == 3 {
return false, errors.New("查无此银行卡")
} else if responseData.Result.ReasonType == 4 {
return false, errors.New("查无此身份证")
} else if responseData.Result.ReasonType == 5 {
return false, errors.New("手机号码格式不正确")
} else if responseData.Result.ReasonType == 6 {
return false, errors.New("银行卡号不正确")
} else if responseData.Result.ReasonType == 7 {
return false, errors.New("其他出错,请联系客服")
} else {
return false, errors.New("银行卡认证失败")
}
}
return true, nil
}