90 lines
2.9 KiB
Go
90 lines
2.9 KiB
Go
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
|
||
}
|