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 }