代码拉取完成,页面将自动刷新
同步操作将从 大淘客/openapi-sdk-go 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
package sdk
import (
"crypto/md5"
"fmt"
"io/ioutil"
"net/http"
"net/url"
"sort"
"strings"
)
const (
POST = "post"
GET = "get"
)
type Client struct {
appKey string
appSecret string
version string
}
func NewClientWithAccessKey(appKey, appSecret, version string) (*Client, *Error) {
if appKey == "" || appSecret == "" || version == "" {
return nil, &Error{
Code: "10001",
Msg: "请完善参数",
}
}
return &Client{
appKey: appKey,
appSecret: appSecret,
version: version,
}, nil
}
func (c *Client) Check() bool {
if c.appKey == "" || c.appSecret == "" || c.version == "" {
return false
}
return true
}
func (c *Client) Request(apiUrl string, params map[string]string, method string) (string, *Error) {
if !c.Check() {
return "", &Error{
Code: "10001",
Msg: "请完善参数: app key, app secret, version",
}
}
method = strings.ToLower(method)
if method != GET && method != POST {
return "", &Error{
Code: "10001",
Msg: "method错误",
}
}
data := url.Values{}
_, doParams := c.makeSign(params)
for k, v := range doParams {
data.Set(k, v)
}
var req *http.Request
var rsp *http.Response
var err error
if method == GET {
rsp, err = http.Get(apiUrl + "?" + data.Encode())
if err != nil {
return "", nil
}
} else {
body := strings.NewReader(data.Encode())
req, err = http.NewRequest(POST, apiUrl, body)
if err != nil {
return "", &Error{
Code: "10001",
Msg: err.Error(),
}
}
req.Header.Set("Content-Type", "application/json")
cli := http.Client{}
rsp, err = cli.Do(req)
if err != nil {
return "", &Error{
Code: "10001",
Msg: err.Error(),
}
}
}
rs, err := ioutil.ReadAll(rsp.Body)
if err != nil {
return "", &Error{
Code: "10001",
Msg: err.Error(),
}
}
return string(rs), nil
}
func (c *Client) makeSign(params map[string]string) (string, map[string]string) {
var keys []string
var data string
if _, ok := params["appKey"]; !ok {
params["appKey"] = c.appKey
}
if _, ok := params["version"]; !ok {
params["version"] = c.version
}
for key, _ := range params {
keys = append(keys, key)
}
sort.Strings(keys)
//拼接
for _, k := range keys {
data = fmt.Sprintf("%s%s=%s&", data, k, params[k])
}
data = fmt.Sprintf("%skey=%s", data, c.appSecret)
data = strings.Trim(data, "&")
m := md5.New()
m.Write([]byte(data))
sign := strings.ToUpper(fmt.Sprintf("%x", m.Sum(nil)))
params["sign"] = sign
return sign, params
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。