micro-account/pkg/common/utils/idnum/idnum_net.go

173 lines
3.6 KiB
Go
Raw Normal View History

2025-02-20 08:18:23 +00:00
package idnum
import (
"encoding/json"
"errors"
"fmt"
"github.com/fonchain_enterprise/micro-account/pkg/cache"
"io/ioutil"
"net/http"
"net/url"
"strings"
"time"
)
var param = map[string]string{
"grant_type": "client_credentials",
"client_id": "AlbWwhnZINIy1YqWP3agQA42",
"client_secret": "NL2nT4rnGHIcpopBI93a7G85WscluOEH",
}
type IDCheckRes struct {
ErrorCode int `json:"error_code"`
ErrorMsg string `json:"error_msg"`
LogID int `json:"log_id"`
Timestamp int `json:"timestamp"`
Cached int `json:"cached"`
Result interface{} `json:"result"`
}
type TokenInfo struct {
RefreshToken string `json:"refresh_token"`
ExpiresIn int `json:"expires_in"`
Scope string `json:"scope"`
SessionKey string `json:"session_key"`
AccessToken string `json:"access_token"`
SessionSecret string `json:"session_secret"`
}
/*
Tru89O1zosjSCIN2uUlEctbE
rLgGU2gwNvEQAo0UooTwArtvqBTaL3Y3
25346530
*/
func CheckIDNumFromNet(idNum string, name string) error {
var host = "https://aip.baidubce.com/rest/2.0/face/v3/person/idmatch"
accessToken, err := getAccessToken()
fmt.Println("1百度生成token---", accessToken, err)
if err != nil {
return err
}
uri, err := url.Parse(host)
if err != nil {
fmt.Println(err)
return err
}
query := uri.Query()
query.Set("access_token", accessToken)
uri.RawQuery = query.Encode()
var params = map[string]string{}
params["id_card_number"] = idNum
params["name"] = name
sendBody, err := json.Marshal(params)
if err != nil {
fmt.Println(err)
return err
}
sendData := string(sendBody)
client := &http.Client{}
request, err := http.NewRequest("POST", uri.String(), strings.NewReader(sendData))
if err != nil {
fmt.Println(err)
return err
}
request.Header.Set("Content-Type", "application/json")
response, err := client.Do(request)
defer response.Body.Close()
result, err := ioutil.ReadAll(response.Body)
if err != nil {
fmt.Println(err)
return err
}
fmt.Println(string(result))
var res IDCheckRes
err = json.Unmarshal(result, &res)
fmt.Println(string(result))
if err != nil {
fmt.Println(err)
return err
}
if res.ErrorCode != 0 {
if res.ErrorCode == 222351 {
return errors.New("不匹配或者身份证不存在")
}
return errors.New("实名认证未通过")
}
return nil
}
func getAccessToken() (string, error) {
var tokenInfo TokenInfo
var err error
key := "baidu:Id:access_token" + param["client_id"]
strCmd := cache.RedisClient.Get(key)
accessToken := strCmd.Val()
if accessToken != "" {
err := json.Unmarshal([]byte(accessToken), &tokenInfo)
if err != nil {
return "", err
}
return tokenInfo.AccessToken, nil
}
accessToken, err = getNewAccessToken()
if err != nil {
return "", err
}
if merr := cache.RedisClient.Set(key, accessToken, 5*60*1000*time.Millisecond).Err(); merr != nil {
return "", merr
}
err = json.Unmarshal([]byte(accessToken), &tokenInfo)
if err != nil {
return "", err
}
return tokenInfo.AccessToken, nil
}
func getNewAccessToken() (string, error) {
accessToken := ""
var host = "https://aip.baidubce.com/oauth/2.0/token"
uri, err := url.Parse(host)
fmt.Println(uri)
if err != nil {
fmt.Println(err)
return accessToken, err
}
query := uri.Query()
for k, v := range param {
query.Set(k, v)
}
uri.RawQuery = query.Encode()
response, err := http.Get(uri.String())
fmt.Println(response)
if err != nil {
fmt.Println(err)
return accessToken, err
}
result, err := ioutil.ReadAll(response.Body)
if err != nil {
fmt.Println(err)
return accessToken, err
}
fmt.Println(string(result))
return string(result), err
}