Files
servicebase/pkg/partner/ali_auth/client.go
2025-11-19 10:23:05 +08:00

152 lines
4.3 KiB
Go

package ali_auth
import (
"fmt"
"strings"
"gitea.ddegame.cn/open/servicebase/pkg/log"
"github.com/pkg/errors"
"github.com/spf13/viper"
"github.com/go-resty/resty/v2"
)
const (
url = "https://telvertify.market.alicloudapi.com/lianzhuo/telvertify"
urlSimple = "https://checkone.market.alicloudapi.com/communication/personal/10101"
urlSimpleV2 = "https://kzidcardv1.market.alicloudapi.com/api-mall/api/id_card/check"
)
type AuthResult struct {
Data struct {
Areacode string `json:"areacode"`
Isp string `json:"isp"`
ID string `json:"id"`
City string `json:"city"`
Mobile string `json:"Mobile"`
Name string `json:"Name"`
Postcode string `json:"postcode"`
} `json:"data"`
Resp struct {
Code string `json:"code"`
Desc string `json:"desc"`
} `json:"resp"`
}
type AuthSimpleResult struct {
// {"code":"10000","message":"成功","data":{"result":"1","birthday":"","address":"","sex":""},"seqNo":"YMX7AK4J250820134839851"}
Code string `json:"code"`
Message string `json:"message"`
Data struct {
Result string `json:"result"`
Birthday string `json:"birthday"`
Address string `json:"address"`
Sex string `json:"sex"`
} `json:"data"`
SeqNo string `json:"seqNo"`
}
type AuthSimpleResultV2 struct {
// {"code":"10000","message":"成功","data":{"result":"1","birthday":"","address":"","sex":""},"seqNo":"YMX7AK4J250820134839851"}
Code int `json:"code"`
Message string `json:"msg"`
Data struct {
OrderNo string `json:"orderNo"`
Result int `json:"result"`
Birthday string `json:"birthday"`
Address string `json:"address"`
Sex string `json:"sex"`
Desc string `json:"desc"`
} `json:"data"`
}
func RealAuth(name, mobile, id string) (result AuthResult, e error) {
if strings.HasPrefix(mobile, "1601234") {
result = AuthResult{Data: struct {
Areacode string `json:"areacode"`
Isp string `json:"isp"`
ID string `json:"id"`
City string `json:"city"`
Mobile string `json:"Mobile"`
Name string `json:"Name"`
Postcode string `json:"postcode"`
}{
Areacode: "",
Isp: "",
ID: id,
City: "",
Mobile: mobile,
Name: name,
Postcode: "",
}, Resp: struct {
Code string `json:"code"`
Desc string `json:"desc"`
}{
Code: "0",
Desc: "",
}}
return
}
client := resty.New()
if _, e = client.R().
SetHeader("Authorization", fmt.Sprintf("APPCODE %s", viper.GetString("aliyun.auth.appCode"))).
SetQueryParams(map[string]string{
"telnumber": mobile,
"name": name,
"id": id,
}).
SetResult(&result). // or SetResult(AuthSuccess{}).
Get(url); e != nil {
fmt.Printf("RealAuth error: %v", e)
return
}
return
}
func RealAuthSimple(name, id string) (result AuthSimpleResult, e error) {
client := resty.New()
var i *resty.Response
if i, e = client.R().
SetHeader("Authorization", fmt.Sprintf("APPCODE %s", viper.GetString("aliyun.auth.appCode"))).
SetHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8").
SetBody(fmt.Sprintf("name=%s&idcard=%s", name, id)).
SetResult(&result). // or SetResult(AuthSuccess{}).
Post(urlSimple); e != nil {
fmt.Printf("RealAuthSimple error: %v", e)
return
} else if i != nil {
fmt.Printf("RealAuthSimple success: %v", i.String())
}
return
}
// RealAuthSimpleV2 https://market.aliyun.com/detail/cmapi00066570#sku=yuncode6057000002
func RealAuthSimpleV2(name, id string) (*AuthSimpleResultV2, error) {
var (
result *AuthSimpleResultV2
err error
)
client := resty.New()
var i *resty.Response
i, err = client.R().
SetHeader("Authorization", fmt.Sprintf("APPCODE %s", viper.GetString("aliyun.auth.appCode"))).
SetHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8").
SetBody(fmt.Sprintf("name=%s&idcard=%s", name, id)).
SetResult(&result). // or SetResult(AuthSuccess{}).
Post(urlSimpleV2)
if err != nil {
fmt.Printf("RealAuthSimple error: %v", err)
return nil, errors.WithStack(err)
}
if i == nil {
log.Error("身份信息二要素返回结果为nil")
return nil, errors.New("身份信息二要素认证请求失败")
}
if i.StatusCode() != 200 {
log.ErrorF("身份信息二要素返回http code (%d) not 200", i.StatusCode())
return nil, errors.New("身份信息二要素认证请求失败")
}
return result, nil
}