xiaoetech/service/client.go
2026-07-30 18:11:06 +08:00

99 lines
3.3 KiB
Go

package service
import (
"encoding/json"
"io"
"net/http"
"net/url"
"strings"
)
const (
contentTypeApplicationJson = "application/json"
)
var (
AccessTokenUrl = "https://api.xiaoe-tech.com/token" // 获取access_token
RegisterUserUrl = "https://api.xiaoe-tech.com/xe.user.register/1.0.0" // 注册用户
UpdateUserUrl = "https://api.xiaoe-tech.com/xe.user.info.update/1.0.0" // 修改用户信息
GetUserInfoUrl = "https://api.xiaoe-tech.com/xe.user.info.get/1.0.0" // 获取用户信息
GetUserListUrl = "https://api.xiaoe-tech.com/xe.user.batch.get/2.0.0" // 获取用户列表
GetAliveListUrl = "https://api.xiaoe-tech.com/xe.alive.list.get/2.0.0" // 获取直播列表
GetAliveDetailUrl = "https://api.xiaoe-tech.com/xe.alive.detail.get/2.0.0" // 获取直播详情
GetClassListUrl = "https://api.xiaoe-tech.com/xe.big_class.list.get/1.0.0" // 获取班课列表
GetGoodsListUrl = "https://api.xiaoe-tech.com/xe.goods.list.get/4.0.0" // 获取商品列表
GetGoodsInfoUrl = "https://api.xiaoe-tech.com/xe.goods.detail.get/4.0.0" // 获取商品详情
GetCampTaskListURL = "https://api.xiaoe-tech.com/xe.camp.task.list/1.0.0" // 获取训练营营期任务
GetCourseListUrl = "https://api.xiaoe-tech.com/xe.course.course.list/1.0.0" // 获取课程列表
GetSubCourseListUrl = "https://api.xiaoe-tech.com/xe.course.sub.course.list/1.0.0" // 获取子课程列表
GetCourseChapterListUrl = "https://api.xiaoe-tech.com/xe.course.course.chapter.get/1.0.0" // 获取课程章节列表
OrderDeliveryUrl = "https://api.xiaoe-tech.com/xe.order.delivery/2.0.0" // 用户开通产品包权益
OrderDeliveryUrlV1 = "https://api.xiaoe-tech.com/xe.order.delivery/1.0.0" // 用户开通产品包权益1.0
PermissionCheckUrl = "https://api.xiaoe-tech.com/xe.user.permission.check/1.0.0" // 查询用户资源权益
PurchaseDeleteUrl = "https://api.xiaoe-tech.com/xe.purchase.delete/1.0.0" // 取消订购
)
// NewClient
func NewClient(AccessTokenManager AccessTokenManager) (client *Client) {
return &Client{
AccessTokenManager: AccessTokenManager,
HttpClient: http.DefaultClient,
}
}
type Client struct {
AccessTokenManager AccessTokenManager
HttpClient *http.Client
}
// CurlDo 执行 请求
func (client *Client) CurlDo(method string, methodUrl string, paramsMap map[string]interface{}) (resp []byte, err error) {
// 添加 access_token
accessToken, err := client.AccessTokenManager.GetAccessToken()
if err != nil {
return
}
params := make(map[string]interface{})
params["access_token"] = accessToken
for k, v := range paramsMap {
params[k] = v
}
str, _ := json.Marshal(params)
payload := strings.NewReader(string(str))
req, _ := http.NewRequest(method, methodUrl, payload)
// 检测URL
if !strings.HasPrefix(req.URL.String(), "http") {
parse, _ := url.Parse(AccessTokenUrl)
req.URL.Host = parse.Host
req.URL.Scheme = parse.Scheme
}
// 默认 Header Content-Type
if req.Method == http.MethodPost && req.Header.Get("Content-Type") == "" {
req.Header.Set("Content-Type", contentTypeApplicationJson)
}
response, err := client.HttpClient.Do(req)
if err != nil {
return
}
defer response.Body.Close()
resp, err = io.ReadAll(response.Body)
if err != nil {
return
}
return
}