first commit
This commit is contained in:
122
pkg/partner/YiDun/YiDunClient.go
Normal file
122
pkg/partner/YiDun/YiDunClient.go
Normal 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
|
||||
}
|
||||
Reference in New Issue
Block a user