package service import ( "context" "encoding/json" "fmt" v1 "github.com/go-nunu/nunu-layout-advanced/api/v1" "github.com/spf13/viper" ) type CdnService interface { GetToken(ctx context.Context) (string, error) } func NewCdnService( service *Service, conf *viper.Viper, request RequestService, ) CdnService { return &cdnService{ Service: service, Url: conf.GetString("flexCdn.Url"), AccessKeyID: conf.GetString("flexCdn.AccessKeyID"), AccessKeySecret: conf.GetString("flexCdn.AccessKeySecret"), request: request, } } type cdnService struct { *Service Url string AccessKeyID string AccessKeySecret string request RequestService } func (s *cdnService) GetToken(ctx context.Context) (string, error) { formData := map[string]interface{}{ "type": "admin", "accessKeyId": s.AccessKeyID, "accessKey": s.AccessKeySecret, } apiUrl := s.Url + "APIAccessTokenService/getAPIAccessToken" resBody, err := s.request.Request(ctx, formData, apiUrl, "\"X-Cloud-Access-Token\"", "") if err != nil { return "", err } var res v1.GeneralResponse[v1.FlexCdnTokenResponse] if err := json.Unmarshal(resBody, &res); err != nil { return "", fmt.Errorf("反序列化响应 JSON 失败 (内容: %s): %w", string(resBody), err) } if res.Code != 200 { return "", fmt.Errorf("API 错误: code %d, msg '%s'", res.Code, res.Message) } return res.Data.Token, nil }