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
|
|
}
|