first commit

This commit is contained in:
Yangtao
2025-11-18 17:48:20 +08:00
commit 6e56cab848
196 changed files with 65809 additions and 0 deletions

View File

@ -0,0 +1,122 @@
package YiDun
import (
"bytes"
"crypto/md5"
"encoding/json"
"errors"
"fmt"
"net/http"
"servicebase/pkg/common/HyTools"
"sort"
"strconv"
"time"
"github.com/anxpp/beego/logs"
"github.com/spf13/viper"
)
const ()
// 易盾API 一键登录等
type YiDunClient struct {
SecretId string
SecretKey string
}
func NewYiDunClient() *YiDunClient {
secretId := viper.GetString("netease.yidun.secretId")
secretKey := viper.GetString("netease.yidun.secretKey")
return &YiDunClient{SecretId: secretId, SecretKey: secretKey}
}
// 生成易盾签名
func (client *YiDunClient) GenerateSign(params map[string]string) (sign string) {
var keys []string
for key, _ := range params {
keys = append(keys, key)
}
sort.Strings(keys)
buf := bytes.NewBufferString("")
for _, key := range keys {
buf.WriteString(key + params[key])
}
buf.WriteString(client.SecretKey)
has := md5.Sum(buf.Bytes())
sign = fmt.Sprintf("%x", has)
return
}
// 获取易盾请求公共参数
func (client *YiDunClient) GetCommonParams(businessId string) (params map[string]string) {
params = make(map[string]string, 0)
params["secretId"] = client.SecretId
params["businessId"] = businessId
params["version"] = "v1"
params["timestamp"] = strconv.FormatInt(time.Now().Unix(), 10)
params["nonce"] = HyTools.GetUUID()
return
}
// 一键登录API
func (client *YiDunClient) OneClickApi(params map[string]string) (mobile string, resultErr error) {
apiUrl := "https://ye.dun.163.com/v1/oneclick/check"
paramString := ""
for k, v := range params {
kv := k + "=" + v + "&"
paramString += kv
}
if len(paramString) > 0 {
paramString = HyTools.Substr(paramString, 0, len(paramString)-1)
}
logs.Info("oneClick params:" + paramString)
headerMap := make(map[string]string, 0)
headerMap["Content-Type"] = "application/x-www-form-urlencoded;charset=utf-8"
result, err := HyTools.HttpDo(http.MethodPost, apiUrl, headerMap, paramString)
logs.Info("oneClick result:" + result)
if err != nil {
logs.Error("一键登录失败,请求API失败:" + err.Error())
resultErr = err
}
//{"code":200,"msg":"ok","data":{"phone":"13079217909","resultCode":"0"}}
var resultDTO struct {
Code int64 `json:"code"`
Msg string `json:"msg"`
Data map[string]interface{} `json:"data"`
}
err2 := json.Unmarshal([]byte(result), &resultDTO)
if err2 != nil {
logs.Error("一键登录失败:解析API结果失败" + err2.Error())
resultErr = err2
return
}
if resultDTO.Code != 200 {
logs.Error("一键登录失败(%s) code[%v]:"+resultDTO.Msg, "", resultDTO.Code)
resultErr = errors.New(resultDTO.Msg)
return
}
// 结果
if phone, ok := resultDTO.Data["phone"]; ok {
mobile = phone.(string)
}
return
}