dw-sdk/params.go

55 lines
1.1 KiB
Go

package dw_sdk
import (
"crypto/md5"
"fmt"
"net/url"
"strings"
"github.com/bytedance/sonic"
"github.com/google/go-querystring/query"
)
type PublicParams struct {
AppKey string `json:"app_key" url:"app_key"`
Sign string `json:"sign" url:"sign,omitempty"`
AccessToken string `json:"access_token,omitempty" url:"access_token,omitempty"`
Timestamp int64 `json:"timestamp" url:"timestamp"`
}
func (p *PublicParams) SetSign(sign string) {
p.Sign = sign
}
type SetSigner interface {
SetSign(string)
}
func Sign(signer SetSigner, secret string) {
v, _ := query.Values(signer)
stringSignTemp := v.Encode() + secret
data := []byte(stringSignTemp)
has := md5.Sum(data)
signer.SetSign(fmt.Sprintf("%X", has))
}
// 对sign中的数组处理
type ListParams[T any] []T
func (s ListParams[T]) EncodeValues(key string, v *url.Values) error {
var list = make([]string, 0, len(s))
for _, item := range s {
js, _ := sonic.MarshalString(&item)
list = append(list, js)
}
v.Set(key, strings.Join(list, ","))
return nil
}
type PublicResponse[T any] struct {
Msg string `json:"msg"`
Code int `json:"code"`
Data T `json:"data"`
}