173 lines
3.6 KiB
Go
173 lines
3.6 KiB
Go
|
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
|
||
|
}
|