package alicloud import ( "errors" "fmt" "io" "net/http" "net/url" "strings" ) var ( ErrDatasource = errors.New("数据源异常") ErrSystem = errors.New("系统异常") ) // AlicloudConfig 阿里云配置 type AlicloudConfig struct { Host string AppCode string } // AlicloudService 阿里云服务 type AlicloudService struct { config AlicloudConfig } // NewAlicloudService 创建阿里云服务实例 func NewAlicloudService(host, appCode string) *AlicloudService { return &AlicloudService{ config: AlicloudConfig{ Host: host, AppCode: appCode, }, } } // CallAPI 调用阿里云API的通用方法 // path: API路径(如 "api-mall/api/id_card/check") // params: 请求参数 func (a *AlicloudService) CallAPI(path string, params map[string]interface{}) (respBytes []byte, err error) { // 构建请求URL reqURL := a.config.Host + "/" + path // 构建请求参数 formData := url.Values{} for key, value := range params { formData.Set(key, fmt.Sprintf("%v", value)) } // 创建HTTP请求 req, err := http.NewRequest("POST", reqURL, strings.NewReader(formData.Encode())) if err != nil { return nil, fmt.Errorf("%w: %s", ErrSystem, err.Error()) } // 设置请求头 req.Header.Set("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8") req.Header.Set("Authorization", "APPCODE "+a.config.AppCode) // 发送请求 client := &http.Client{} resp, err := client.Do(req) if err != nil { return nil, fmt.Errorf("%w: %s", ErrSystem, err.Error()) } defer resp.Body.Close() // 读取响应体 body, err := io.ReadAll(resp.Body) if err != nil { return nil, fmt.Errorf("%w: %s", ErrSystem, err.Error()) } // 直接返回原始响应body,让调用方自己处理 return body, nil } // GetConfig 获取配置信息 func (a *AlicloudService) GetConfig() AlicloudConfig { return a.config }