1885 lines
61 KiB
Go
1885 lines
61 KiB
Go
// This file is auto-generated, don't edit it. Thanks.
|
||
/**
|
||
* This is for OpenApi SDK
|
||
*/
|
||
package client
|
||
|
||
import (
|
||
spi "github.com/alibabacloud-go/alibabacloud-gateway-spi/client"
|
||
openapiutil "github.com/alibabacloud-go/openapi-util/service"
|
||
util "github.com/alibabacloud-go/tea-utils/v2/service"
|
||
xml "github.com/alibabacloud-go/tea-xml/service"
|
||
"github.com/alibabacloud-go/tea/tea"
|
||
credential "github.com/aliyun/credentials-go/credentials"
|
||
"io"
|
||
)
|
||
|
||
type GlobalParameters struct {
|
||
Headers map[string]*string `json:"headers,omitempty" xml:"headers,omitempty"`
|
||
Queries map[string]*string `json:"queries,omitempty" xml:"queries,omitempty"`
|
||
}
|
||
|
||
func (s GlobalParameters) String() string {
|
||
return tea.Prettify(s)
|
||
}
|
||
|
||
func (s GlobalParameters) GoString() string {
|
||
return s.String()
|
||
}
|
||
|
||
func (s *GlobalParameters) SetHeaders(v map[string]*string) *GlobalParameters {
|
||
s.Headers = v
|
||
return s
|
||
}
|
||
|
||
func (s *GlobalParameters) SetQueries(v map[string]*string) *GlobalParameters {
|
||
s.Queries = v
|
||
return s
|
||
}
|
||
|
||
/**
|
||
* Model for initing client
|
||
*/
|
||
type Config struct {
|
||
// accesskey id
|
||
AccessKeyId *string `json:"accessKeyId,omitempty" xml:"accessKeyId,omitempty"`
|
||
// accesskey secret
|
||
AccessKeySecret *string `json:"accessKeySecret,omitempty" xml:"accessKeySecret,omitempty"`
|
||
// security token
|
||
SecurityToken *string `json:"securityToken,omitempty" xml:"securityToken,omitempty"`
|
||
// http protocol
|
||
Protocol *string `json:"protocol,omitempty" xml:"protocol,omitempty"`
|
||
// http method
|
||
Method *string `json:"method,omitempty" xml:"method,omitempty"`
|
||
// region id
|
||
RegionId *string `json:"regionId,omitempty" xml:"regionId,omitempty"`
|
||
// read timeout
|
||
ReadTimeout *int `json:"readTimeout,omitempty" xml:"readTimeout,omitempty"`
|
||
// connect timeout
|
||
ConnectTimeout *int `json:"connectTimeout,omitempty" xml:"connectTimeout,omitempty"`
|
||
// http proxy
|
||
HttpProxy *string `json:"httpProxy,omitempty" xml:"httpProxy,omitempty"`
|
||
// https proxy
|
||
HttpsProxy *string `json:"httpsProxy,omitempty" xml:"httpsProxy,omitempty"`
|
||
// credential
|
||
Credential credential.Credential `json:"credential,omitempty" xml:"credential,omitempty"`
|
||
// endpoint
|
||
Endpoint *string `json:"endpoint,omitempty" xml:"endpoint,omitempty"`
|
||
// proxy white list
|
||
NoProxy *string `json:"noProxy,omitempty" xml:"noProxy,omitempty"`
|
||
// max idle conns
|
||
MaxIdleConns *int `json:"maxIdleConns,omitempty" xml:"maxIdleConns,omitempty"`
|
||
// network for endpoint
|
||
Network *string `json:"network,omitempty" xml:"network,omitempty"`
|
||
// user agent
|
||
UserAgent *string `json:"userAgent,omitempty" xml:"userAgent,omitempty"`
|
||
// suffix for endpoint
|
||
Suffix *string `json:"suffix,omitempty" xml:"suffix,omitempty"`
|
||
// socks5 proxy
|
||
Socks5Proxy *string `json:"socks5Proxy,omitempty" xml:"socks5Proxy,omitempty"`
|
||
// socks5 network
|
||
Socks5NetWork *string `json:"socks5NetWork,omitempty" xml:"socks5NetWork,omitempty"`
|
||
// endpoint type
|
||
EndpointType *string `json:"endpointType,omitempty" xml:"endpointType,omitempty"`
|
||
// OpenPlatform endpoint
|
||
OpenPlatformEndpoint *string `json:"openPlatformEndpoint,omitempty" xml:"openPlatformEndpoint,omitempty"`
|
||
// Deprecated
|
||
// credential type
|
||
Type *string `json:"type,omitempty" xml:"type,omitempty"`
|
||
// Signature Version
|
||
SignatureVersion *string `json:"signatureVersion,omitempty" xml:"signatureVersion,omitempty"`
|
||
// Signature Algorithm
|
||
SignatureAlgorithm *string `json:"signatureAlgorithm,omitempty" xml:"signatureAlgorithm,omitempty"`
|
||
// Global Parameters
|
||
GlobalParameters *GlobalParameters `json:"globalParameters,omitempty" xml:"globalParameters,omitempty"`
|
||
// privite key for client certificate
|
||
Key *string `json:"key,omitempty" xml:"key,omitempty"`
|
||
// client certificate
|
||
Cert *string `json:"cert,omitempty" xml:"cert,omitempty"`
|
||
// server certificate
|
||
Ca *string `json:"ca,omitempty" xml:"ca,omitempty"`
|
||
}
|
||
|
||
func (s Config) String() string {
|
||
return tea.Prettify(s)
|
||
}
|
||
|
||
func (s Config) GoString() string {
|
||
return s.String()
|
||
}
|
||
|
||
func (s *Config) SetAccessKeyId(v string) *Config {
|
||
s.AccessKeyId = &v
|
||
return s
|
||
}
|
||
|
||
func (s *Config) SetAccessKeySecret(v string) *Config {
|
||
s.AccessKeySecret = &v
|
||
return s
|
||
}
|
||
|
||
func (s *Config) SetSecurityToken(v string) *Config {
|
||
s.SecurityToken = &v
|
||
return s
|
||
}
|
||
|
||
func (s *Config) SetProtocol(v string) *Config {
|
||
s.Protocol = &v
|
||
return s
|
||
}
|
||
|
||
func (s *Config) SetMethod(v string) *Config {
|
||
s.Method = &v
|
||
return s
|
||
}
|
||
|
||
func (s *Config) SetRegionId(v string) *Config {
|
||
s.RegionId = &v
|
||
return s
|
||
}
|
||
|
||
func (s *Config) SetReadTimeout(v int) *Config {
|
||
s.ReadTimeout = &v
|
||
return s
|
||
}
|
||
|
||
func (s *Config) SetConnectTimeout(v int) *Config {
|
||
s.ConnectTimeout = &v
|
||
return s
|
||
}
|
||
|
||
func (s *Config) SetHttpProxy(v string) *Config {
|
||
s.HttpProxy = &v
|
||
return s
|
||
}
|
||
|
||
func (s *Config) SetHttpsProxy(v string) *Config {
|
||
s.HttpsProxy = &v
|
||
return s
|
||
}
|
||
|
||
func (s *Config) SetCredential(v credential.Credential) *Config {
|
||
s.Credential = v
|
||
return s
|
||
}
|
||
|
||
func (s *Config) SetEndpoint(v string) *Config {
|
||
s.Endpoint = &v
|
||
return s
|
||
}
|
||
|
||
func (s *Config) SetNoProxy(v string) *Config {
|
||
s.NoProxy = &v
|
||
return s
|
||
}
|
||
|
||
func (s *Config) SetMaxIdleConns(v int) *Config {
|
||
s.MaxIdleConns = &v
|
||
return s
|
||
}
|
||
|
||
func (s *Config) SetNetwork(v string) *Config {
|
||
s.Network = &v
|
||
return s
|
||
}
|
||
|
||
func (s *Config) SetUserAgent(v string) *Config {
|
||
s.UserAgent = &v
|
||
return s
|
||
}
|
||
|
||
func (s *Config) SetSuffix(v string) *Config {
|
||
s.Suffix = &v
|
||
return s
|
||
}
|
||
|
||
func (s *Config) SetSocks5Proxy(v string) *Config {
|
||
s.Socks5Proxy = &v
|
||
return s
|
||
}
|
||
|
||
func (s *Config) SetSocks5NetWork(v string) *Config {
|
||
s.Socks5NetWork = &v
|
||
return s
|
||
}
|
||
|
||
func (s *Config) SetEndpointType(v string) *Config {
|
||
s.EndpointType = &v
|
||
return s
|
||
}
|
||
|
||
func (s *Config) SetOpenPlatformEndpoint(v string) *Config {
|
||
s.OpenPlatformEndpoint = &v
|
||
return s
|
||
}
|
||
|
||
func (s *Config) SetType(v string) *Config {
|
||
s.Type = &v
|
||
return s
|
||
}
|
||
|
||
func (s *Config) SetSignatureVersion(v string) *Config {
|
||
s.SignatureVersion = &v
|
||
return s
|
||
}
|
||
|
||
func (s *Config) SetSignatureAlgorithm(v string) *Config {
|
||
s.SignatureAlgorithm = &v
|
||
return s
|
||
}
|
||
|
||
func (s *Config) SetGlobalParameters(v *GlobalParameters) *Config {
|
||
s.GlobalParameters = v
|
||
return s
|
||
}
|
||
|
||
func (s *Config) SetKey(v string) *Config {
|
||
s.Key = &v
|
||
return s
|
||
}
|
||
|
||
func (s *Config) SetCert(v string) *Config {
|
||
s.Cert = &v
|
||
return s
|
||
}
|
||
|
||
func (s *Config) SetCa(v string) *Config {
|
||
s.Ca = &v
|
||
return s
|
||
}
|
||
|
||
type OpenApiRequest struct {
|
||
Headers map[string]*string `json:"headers,omitempty" xml:"headers,omitempty"`
|
||
Query map[string]*string `json:"query,omitempty" xml:"query,omitempty"`
|
||
Body interface{} `json:"body,omitempty" xml:"body,omitempty"`
|
||
Stream io.Reader `json:"stream,omitempty" xml:"stream,omitempty"`
|
||
HostMap map[string]*string `json:"hostMap,omitempty" xml:"hostMap,omitempty"`
|
||
EndpointOverride *string `json:"endpointOverride,omitempty" xml:"endpointOverride,omitempty"`
|
||
}
|
||
|
||
func (s OpenApiRequest) String() string {
|
||
return tea.Prettify(s)
|
||
}
|
||
|
||
func (s OpenApiRequest) GoString() string {
|
||
return s.String()
|
||
}
|
||
|
||
func (s *OpenApiRequest) SetHeaders(v map[string]*string) *OpenApiRequest {
|
||
s.Headers = v
|
||
return s
|
||
}
|
||
|
||
func (s *OpenApiRequest) SetQuery(v map[string]*string) *OpenApiRequest {
|
||
s.Query = v
|
||
return s
|
||
}
|
||
|
||
func (s *OpenApiRequest) SetBody(v interface{}) *OpenApiRequest {
|
||
s.Body = v
|
||
return s
|
||
}
|
||
|
||
func (s *OpenApiRequest) SetStream(v io.Reader) *OpenApiRequest {
|
||
s.Stream = v
|
||
return s
|
||
}
|
||
|
||
func (s *OpenApiRequest) SetHostMap(v map[string]*string) *OpenApiRequest {
|
||
s.HostMap = v
|
||
return s
|
||
}
|
||
|
||
func (s *OpenApiRequest) SetEndpointOverride(v string) *OpenApiRequest {
|
||
s.EndpointOverride = &v
|
||
return s
|
||
}
|
||
|
||
type Params struct {
|
||
Action *string `json:"action,omitempty" xml:"action,omitempty" require:"true"`
|
||
Version *string `json:"version,omitempty" xml:"version,omitempty" require:"true"`
|
||
Protocol *string `json:"protocol,omitempty" xml:"protocol,omitempty" require:"true"`
|
||
Pathname *string `json:"pathname,omitempty" xml:"pathname,omitempty" require:"true"`
|
||
Method *string `json:"method,omitempty" xml:"method,omitempty" require:"true"`
|
||
AuthType *string `json:"authType,omitempty" xml:"authType,omitempty" require:"true"`
|
||
BodyType *string `json:"bodyType,omitempty" xml:"bodyType,omitempty" require:"true"`
|
||
ReqBodyType *string `json:"reqBodyType,omitempty" xml:"reqBodyType,omitempty" require:"true"`
|
||
Style *string `json:"style,omitempty" xml:"style,omitempty"`
|
||
}
|
||
|
||
func (s Params) String() string {
|
||
return tea.Prettify(s)
|
||
}
|
||
|
||
func (s Params) GoString() string {
|
||
return s.String()
|
||
}
|
||
|
||
func (s *Params) SetAction(v string) *Params {
|
||
s.Action = &v
|
||
return s
|
||
}
|
||
|
||
func (s *Params) SetVersion(v string) *Params {
|
||
s.Version = &v
|
||
return s
|
||
}
|
||
|
||
func (s *Params) SetProtocol(v string) *Params {
|
||
s.Protocol = &v
|
||
return s
|
||
}
|
||
|
||
func (s *Params) SetPathname(v string) *Params {
|
||
s.Pathname = &v
|
||
return s
|
||
}
|
||
|
||
func (s *Params) SetMethod(v string) *Params {
|
||
s.Method = &v
|
||
return s
|
||
}
|
||
|
||
func (s *Params) SetAuthType(v string) *Params {
|
||
s.AuthType = &v
|
||
return s
|
||
}
|
||
|
||
func (s *Params) SetBodyType(v string) *Params {
|
||
s.BodyType = &v
|
||
return s
|
||
}
|
||
|
||
func (s *Params) SetReqBodyType(v string) *Params {
|
||
s.ReqBodyType = &v
|
||
return s
|
||
}
|
||
|
||
func (s *Params) SetStyle(v string) *Params {
|
||
s.Style = &v
|
||
return s
|
||
}
|
||
|
||
type Client struct {
|
||
Endpoint *string
|
||
RegionId *string
|
||
Protocol *string
|
||
Method *string
|
||
UserAgent *string
|
||
EndpointRule *string
|
||
EndpointMap map[string]*string
|
||
Suffix *string
|
||
ReadTimeout *int
|
||
ConnectTimeout *int
|
||
HttpProxy *string
|
||
HttpsProxy *string
|
||
Socks5Proxy *string
|
||
Socks5NetWork *string
|
||
NoProxy *string
|
||
Network *string
|
||
ProductId *string
|
||
MaxIdleConns *int
|
||
EndpointType *string
|
||
OpenPlatformEndpoint *string
|
||
Credential credential.Credential
|
||
SignatureVersion *string
|
||
SignatureAlgorithm *string
|
||
Headers map[string]*string
|
||
Spi spi.ClientInterface
|
||
GlobalParameters *GlobalParameters
|
||
Key *string
|
||
Cert *string
|
||
Ca *string
|
||
}
|
||
|
||
/**
|
||
* Init client with Config
|
||
* @param config config contains the necessary information to create a client
|
||
*/
|
||
func NewClient(config *Config) (*Client, error) {
|
||
client := new(Client)
|
||
err := client.Init(config)
|
||
return client, err
|
||
}
|
||
|
||
func (client *Client) Init(config *Config) (_err error) {
|
||
if tea.BoolValue(util.IsUnset(config)) {
|
||
_err = tea.NewSDKError(map[string]interface{}{
|
||
"code": "ParameterMissing",
|
||
"message": "'config' can not be unset",
|
||
})
|
||
return _err
|
||
}
|
||
|
||
if !tea.BoolValue(util.Empty(config.AccessKeyId)) && !tea.BoolValue(util.Empty(config.AccessKeySecret)) {
|
||
if !tea.BoolValue(util.Empty(config.SecurityToken)) {
|
||
config.Type = tea.String("sts")
|
||
} else {
|
||
config.Type = tea.String("access_key")
|
||
}
|
||
|
||
credentialConfig := &credential.Config{
|
||
AccessKeyId: config.AccessKeyId,
|
||
Type: config.Type,
|
||
AccessKeySecret: config.AccessKeySecret,
|
||
}
|
||
credentialConfig.SecurityToken = config.SecurityToken
|
||
client.Credential, _err = credential.NewCredential(credentialConfig)
|
||
if _err != nil {
|
||
return _err
|
||
}
|
||
|
||
} else if !tea.BoolValue(util.IsUnset(config.Credential)) {
|
||
client.Credential = config.Credential
|
||
}
|
||
|
||
client.Endpoint = config.Endpoint
|
||
client.EndpointType = config.EndpointType
|
||
client.Network = config.Network
|
||
client.Suffix = config.Suffix
|
||
client.Protocol = config.Protocol
|
||
client.Method = config.Method
|
||
client.RegionId = config.RegionId
|
||
client.UserAgent = config.UserAgent
|
||
client.ReadTimeout = config.ReadTimeout
|
||
client.ConnectTimeout = config.ConnectTimeout
|
||
client.HttpProxy = config.HttpProxy
|
||
client.HttpsProxy = config.HttpsProxy
|
||
client.NoProxy = config.NoProxy
|
||
client.Socks5Proxy = config.Socks5Proxy
|
||
client.Socks5NetWork = config.Socks5NetWork
|
||
client.MaxIdleConns = config.MaxIdleConns
|
||
client.SignatureVersion = config.SignatureVersion
|
||
client.SignatureAlgorithm = config.SignatureAlgorithm
|
||
client.GlobalParameters = config.GlobalParameters
|
||
client.Key = config.Key
|
||
client.Cert = config.Cert
|
||
client.Ca = config.Ca
|
||
return nil
|
||
}
|
||
|
||
/**
|
||
* Encapsulate the request and invoke the network
|
||
* @param action api name
|
||
* @param version product version
|
||
* @param protocol http or https
|
||
* @param method e.g. GET
|
||
* @param authType authorization type e.g. AK
|
||
* @param bodyType response body type e.g. String
|
||
* @param request object of OpenApiRequest
|
||
* @param runtime which controls some details of call api, such as retry times
|
||
* @return the response
|
||
*/
|
||
func (client *Client) DoRPCRequest(action *string, version *string, protocol *string, method *string, authType *string, bodyType *string, request *OpenApiRequest, runtime *util.RuntimeOptions) (_result map[string]interface{}, _err error) {
|
||
_err = tea.Validate(request)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
_err = tea.Validate(runtime)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
_runtime := map[string]interface{}{
|
||
"timeouted": "retry",
|
||
"key": tea.StringValue(util.DefaultString(runtime.Key, client.Key)),
|
||
"cert": tea.StringValue(util.DefaultString(runtime.Cert, client.Cert)),
|
||
"ca": tea.StringValue(util.DefaultString(runtime.Ca, client.Ca)),
|
||
"readTimeout": tea.IntValue(util.DefaultNumber(runtime.ReadTimeout, client.ReadTimeout)),
|
||
"connectTimeout": tea.IntValue(util.DefaultNumber(runtime.ConnectTimeout, client.ConnectTimeout)),
|
||
"httpProxy": tea.StringValue(util.DefaultString(runtime.HttpProxy, client.HttpProxy)),
|
||
"httpsProxy": tea.StringValue(util.DefaultString(runtime.HttpsProxy, client.HttpsProxy)),
|
||
"noProxy": tea.StringValue(util.DefaultString(runtime.NoProxy, client.NoProxy)),
|
||
"socks5Proxy": tea.StringValue(util.DefaultString(runtime.Socks5Proxy, client.Socks5Proxy)),
|
||
"socks5NetWork": tea.StringValue(util.DefaultString(runtime.Socks5NetWork, client.Socks5NetWork)),
|
||
"maxIdleConns": tea.IntValue(util.DefaultNumber(runtime.MaxIdleConns, client.MaxIdleConns)),
|
||
"retry": map[string]interface{}{
|
||
"retryable": tea.BoolValue(runtime.Autoretry),
|
||
"maxAttempts": tea.IntValue(util.DefaultNumber(runtime.MaxAttempts, tea.Int(3))),
|
||
},
|
||
"backoff": map[string]interface{}{
|
||
"policy": tea.StringValue(util.DefaultString(runtime.BackoffPolicy, tea.String("no"))),
|
||
"period": tea.IntValue(util.DefaultNumber(runtime.BackoffPeriod, tea.Int(1))),
|
||
},
|
||
"ignoreSSL": tea.BoolValue(runtime.IgnoreSSL),
|
||
}
|
||
|
||
_resp := make(map[string]interface{})
|
||
for _retryTimes := 0; tea.BoolValue(tea.AllowRetry(_runtime["retry"], tea.Int(_retryTimes))); _retryTimes++ {
|
||
if _retryTimes > 0 {
|
||
_backoffTime := tea.GetBackoffTime(_runtime["backoff"], tea.Int(_retryTimes))
|
||
if tea.IntValue(_backoffTime) > 0 {
|
||
tea.Sleep(_backoffTime)
|
||
}
|
||
}
|
||
|
||
_resp, _err = func() (map[string]interface{}, error) {
|
||
request_ := tea.NewRequest()
|
||
request_.Protocol = util.DefaultString(client.Protocol, protocol)
|
||
request_.Method = method
|
||
request_.Pathname = tea.String("/")
|
||
globalQueries := make(map[string]*string)
|
||
globalHeaders := make(map[string]*string)
|
||
if !tea.BoolValue(util.IsUnset(client.GlobalParameters)) {
|
||
globalParams := client.GlobalParameters
|
||
if !tea.BoolValue(util.IsUnset(globalParams.Queries)) {
|
||
globalQueries = globalParams.Queries
|
||
}
|
||
|
||
if !tea.BoolValue(util.IsUnset(globalParams.Headers)) {
|
||
globalHeaders = globalParams.Headers
|
||
}
|
||
|
||
}
|
||
|
||
request_.Query = tea.Merge(map[string]*string{
|
||
"Action": action,
|
||
"Format": tea.String("json"),
|
||
"Version": version,
|
||
"Timestamp": openapiutil.GetTimestamp(),
|
||
"SignatureNonce": util.GetNonce(),
|
||
}, globalQueries,
|
||
request.Query)
|
||
headers, _err := client.GetRpcHeaders()
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
if tea.BoolValue(util.IsUnset(headers)) {
|
||
// endpoint is setted in product client
|
||
request_.Headers = tea.Merge(map[string]*string{
|
||
"host": client.Endpoint,
|
||
"x-acs-version": version,
|
||
"x-acs-action": action,
|
||
"user-agent": client.GetUserAgent(),
|
||
}, globalHeaders)
|
||
} else {
|
||
request_.Headers = tea.Merge(map[string]*string{
|
||
"host": client.Endpoint,
|
||
"x-acs-version": version,
|
||
"x-acs-action": action,
|
||
"user-agent": client.GetUserAgent(),
|
||
}, globalHeaders,
|
||
headers)
|
||
}
|
||
|
||
if !tea.BoolValue(util.IsUnset(request.Body)) {
|
||
m, _err := util.AssertAsMap(request.Body)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
tmp := util.AnyifyMapValue(openapiutil.Query(m))
|
||
request_.Body = tea.ToReader(util.ToFormString(tmp))
|
||
request_.Headers["content-type"] = tea.String("application/x-www-form-urlencoded")
|
||
}
|
||
|
||
if !tea.BoolValue(util.EqualString(authType, tea.String("Anonymous"))) {
|
||
accessKeyId, _err := client.GetAccessKeyId()
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
accessKeySecret, _err := client.GetAccessKeySecret()
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
securityToken, _err := client.GetSecurityToken()
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
if !tea.BoolValue(util.Empty(securityToken)) {
|
||
request_.Query["SecurityToken"] = securityToken
|
||
}
|
||
|
||
request_.Query["SignatureMethod"] = tea.String("HMAC-SHA1")
|
||
request_.Query["SignatureVersion"] = tea.String("1.0")
|
||
request_.Query["AccessKeyId"] = accessKeyId
|
||
var t map[string]interface{}
|
||
if !tea.BoolValue(util.IsUnset(request.Body)) {
|
||
t, _err = util.AssertAsMap(request.Body)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
}
|
||
|
||
signedParam := tea.Merge(request_.Query,
|
||
openapiutil.Query(t))
|
||
request_.Query["Signature"] = openapiutil.GetRPCSignature(signedParam, request_.Method, accessKeySecret)
|
||
}
|
||
|
||
response_, _err := tea.DoRequest(request_, _runtime)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
if tea.BoolValue(util.Is4xx(response_.StatusCode)) || tea.BoolValue(util.Is5xx(response_.StatusCode)) {
|
||
_res, _err := util.ReadAsJSON(response_.Body)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
err, _err := util.AssertAsMap(_res)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
requestId := DefaultAny(err["RequestId"], err["requestId"])
|
||
err["statusCode"] = response_.StatusCode
|
||
_err = tea.NewSDKError(map[string]interface{}{
|
||
"code": tea.ToString(DefaultAny(err["Code"], err["code"])),
|
||
"message": "code: " + tea.ToString(tea.IntValue(response_.StatusCode)) + ", " + tea.ToString(DefaultAny(err["Message"], err["message"])) + " request id: " + tea.ToString(requestId),
|
||
"data": err,
|
||
"description": tea.ToString(DefaultAny(err["Description"], err["description"])),
|
||
"accessDeniedDetail": DefaultAny(err["AccessDeniedDetail"], err["accessDeniedDetail"]),
|
||
})
|
||
return _result, _err
|
||
}
|
||
|
||
if tea.BoolValue(util.EqualString(bodyType, tea.String("binary"))) {
|
||
resp := map[string]interface{}{
|
||
"body": response_.Body,
|
||
"headers": response_.Headers,
|
||
"statusCode": tea.IntValue(response_.StatusCode),
|
||
}
|
||
_result = resp
|
||
return _result, _err
|
||
} else if tea.BoolValue(util.EqualString(bodyType, tea.String("byte"))) {
|
||
byt, _err := util.ReadAsBytes(response_.Body)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
_result = make(map[string]interface{})
|
||
_err = tea.Convert(map[string]interface{}{
|
||
"body": byt,
|
||
"headers": response_.Headers,
|
||
"statusCode": tea.IntValue(response_.StatusCode),
|
||
}, &_result)
|
||
return _result, _err
|
||
} else if tea.BoolValue(util.EqualString(bodyType, tea.String("string"))) {
|
||
str, _err := util.ReadAsString(response_.Body)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
_result = make(map[string]interface{})
|
||
_err = tea.Convert(map[string]interface{}{
|
||
"body": tea.StringValue(str),
|
||
"headers": response_.Headers,
|
||
"statusCode": tea.IntValue(response_.StatusCode),
|
||
}, &_result)
|
||
return _result, _err
|
||
} else if tea.BoolValue(util.EqualString(bodyType, tea.String("json"))) {
|
||
obj, _err := util.ReadAsJSON(response_.Body)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
res, _err := util.AssertAsMap(obj)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
_result = make(map[string]interface{})
|
||
_err = tea.Convert(map[string]interface{}{
|
||
"body": res,
|
||
"headers": response_.Headers,
|
||
"statusCode": tea.IntValue(response_.StatusCode),
|
||
}, &_result)
|
||
return _result, _err
|
||
} else if tea.BoolValue(util.EqualString(bodyType, tea.String("array"))) {
|
||
arr, _err := util.ReadAsJSON(response_.Body)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
_result = make(map[string]interface{})
|
||
_err = tea.Convert(map[string]interface{}{
|
||
"body": arr,
|
||
"headers": response_.Headers,
|
||
"statusCode": tea.IntValue(response_.StatusCode),
|
||
}, &_result)
|
||
return _result, _err
|
||
} else {
|
||
_result = make(map[string]interface{})
|
||
_err = tea.Convert(map[string]interface{}{
|
||
"headers": response_.Headers,
|
||
"statusCode": tea.IntValue(response_.StatusCode),
|
||
}, &_result)
|
||
return _result, _err
|
||
}
|
||
|
||
}()
|
||
if !tea.BoolValue(tea.Retryable(_err)) {
|
||
break
|
||
}
|
||
}
|
||
|
||
return _resp, _err
|
||
}
|
||
|
||
/**
|
||
* Encapsulate the request and invoke the network
|
||
* @param action api name
|
||
* @param version product version
|
||
* @param protocol http or https
|
||
* @param method e.g. GET
|
||
* @param authType authorization type e.g. AK
|
||
* @param pathname pathname of every api
|
||
* @param bodyType response body type e.g. String
|
||
* @param request object of OpenApiRequest
|
||
* @param runtime which controls some details of call api, such as retry times
|
||
* @return the response
|
||
*/
|
||
func (client *Client) DoROARequest(action *string, version *string, protocol *string, method *string, authType *string, pathname *string, bodyType *string, request *OpenApiRequest, runtime *util.RuntimeOptions) (_result map[string]interface{}, _err error) {
|
||
_err = tea.Validate(request)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
_err = tea.Validate(runtime)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
_runtime := map[string]interface{}{
|
||
"timeouted": "retry",
|
||
"key": tea.StringValue(util.DefaultString(runtime.Key, client.Key)),
|
||
"cert": tea.StringValue(util.DefaultString(runtime.Cert, client.Cert)),
|
||
"ca": tea.StringValue(util.DefaultString(runtime.Ca, client.Ca)),
|
||
"readTimeout": tea.IntValue(util.DefaultNumber(runtime.ReadTimeout, client.ReadTimeout)),
|
||
"connectTimeout": tea.IntValue(util.DefaultNumber(runtime.ConnectTimeout, client.ConnectTimeout)),
|
||
"httpProxy": tea.StringValue(util.DefaultString(runtime.HttpProxy, client.HttpProxy)),
|
||
"httpsProxy": tea.StringValue(util.DefaultString(runtime.HttpsProxy, client.HttpsProxy)),
|
||
"noProxy": tea.StringValue(util.DefaultString(runtime.NoProxy, client.NoProxy)),
|
||
"socks5Proxy": tea.StringValue(util.DefaultString(runtime.Socks5Proxy, client.Socks5Proxy)),
|
||
"socks5NetWork": tea.StringValue(util.DefaultString(runtime.Socks5NetWork, client.Socks5NetWork)),
|
||
"maxIdleConns": tea.IntValue(util.DefaultNumber(runtime.MaxIdleConns, client.MaxIdleConns)),
|
||
"retry": map[string]interface{}{
|
||
"retryable": tea.BoolValue(runtime.Autoretry),
|
||
"maxAttempts": tea.IntValue(util.DefaultNumber(runtime.MaxAttempts, tea.Int(3))),
|
||
},
|
||
"backoff": map[string]interface{}{
|
||
"policy": tea.StringValue(util.DefaultString(runtime.BackoffPolicy, tea.String("no"))),
|
||
"period": tea.IntValue(util.DefaultNumber(runtime.BackoffPeriod, tea.Int(1))),
|
||
},
|
||
"ignoreSSL": tea.BoolValue(runtime.IgnoreSSL),
|
||
}
|
||
|
||
_resp := make(map[string]interface{})
|
||
for _retryTimes := 0; tea.BoolValue(tea.AllowRetry(_runtime["retry"], tea.Int(_retryTimes))); _retryTimes++ {
|
||
if _retryTimes > 0 {
|
||
_backoffTime := tea.GetBackoffTime(_runtime["backoff"], tea.Int(_retryTimes))
|
||
if tea.IntValue(_backoffTime) > 0 {
|
||
tea.Sleep(_backoffTime)
|
||
}
|
||
}
|
||
|
||
_resp, _err = func() (map[string]interface{}, error) {
|
||
request_ := tea.NewRequest()
|
||
request_.Protocol = util.DefaultString(client.Protocol, protocol)
|
||
request_.Method = method
|
||
request_.Pathname = pathname
|
||
globalQueries := make(map[string]*string)
|
||
globalHeaders := make(map[string]*string)
|
||
if !tea.BoolValue(util.IsUnset(client.GlobalParameters)) {
|
||
globalParams := client.GlobalParameters
|
||
if !tea.BoolValue(util.IsUnset(globalParams.Queries)) {
|
||
globalQueries = globalParams.Queries
|
||
}
|
||
|
||
if !tea.BoolValue(util.IsUnset(globalParams.Headers)) {
|
||
globalHeaders = globalParams.Headers
|
||
}
|
||
|
||
}
|
||
|
||
request_.Headers = tea.Merge(map[string]*string{
|
||
"date": util.GetDateUTCString(),
|
||
"host": client.Endpoint,
|
||
"accept": tea.String("application/json"),
|
||
"x-acs-signature-nonce": util.GetNonce(),
|
||
"x-acs-signature-method": tea.String("HMAC-SHA1"),
|
||
"x-acs-signature-version": tea.String("1.0"),
|
||
"x-acs-version": version,
|
||
"x-acs-action": action,
|
||
"user-agent": util.GetUserAgent(client.UserAgent),
|
||
}, globalHeaders,
|
||
request.Headers)
|
||
if !tea.BoolValue(util.IsUnset(request.Body)) {
|
||
request_.Body = tea.ToReader(util.ToJSONString(request.Body))
|
||
request_.Headers["content-type"] = tea.String("application/json; charset=utf-8")
|
||
}
|
||
|
||
request_.Query = globalQueries
|
||
if !tea.BoolValue(util.IsUnset(request.Query)) {
|
||
request_.Query = tea.Merge(request_.Query,
|
||
request.Query)
|
||
}
|
||
|
||
if !tea.BoolValue(util.EqualString(authType, tea.String("Anonymous"))) {
|
||
accessKeyId, _err := client.GetAccessKeyId()
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
accessKeySecret, _err := client.GetAccessKeySecret()
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
securityToken, _err := client.GetSecurityToken()
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
if !tea.BoolValue(util.Empty(securityToken)) {
|
||
request_.Headers["x-acs-accesskey-id"] = accessKeyId
|
||
request_.Headers["x-acs-security-token"] = securityToken
|
||
}
|
||
|
||
stringToSign := openapiutil.GetStringToSign(request_)
|
||
request_.Headers["authorization"] = tea.String("acs " + tea.StringValue(accessKeyId) + ":" + tea.StringValue(openapiutil.GetROASignature(stringToSign, accessKeySecret)))
|
||
}
|
||
|
||
response_, _err := tea.DoRequest(request_, _runtime)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
if tea.BoolValue(util.EqualNumber(response_.StatusCode, tea.Int(204))) {
|
||
_result = make(map[string]interface{})
|
||
_err = tea.Convert(map[string]map[string]*string{
|
||
"headers": response_.Headers,
|
||
}, &_result)
|
||
return _result, _err
|
||
}
|
||
|
||
if tea.BoolValue(util.Is4xx(response_.StatusCode)) || tea.BoolValue(util.Is5xx(response_.StatusCode)) {
|
||
_res, _err := util.ReadAsJSON(response_.Body)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
err, _err := util.AssertAsMap(_res)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
requestId := DefaultAny(err["RequestId"], err["requestId"])
|
||
requestId = DefaultAny(requestId, err["requestid"])
|
||
err["statusCode"] = response_.StatusCode
|
||
_err = tea.NewSDKError(map[string]interface{}{
|
||
"code": tea.ToString(DefaultAny(err["Code"], err["code"])),
|
||
"message": "code: " + tea.ToString(tea.IntValue(response_.StatusCode)) + ", " + tea.ToString(DefaultAny(err["Message"], err["message"])) + " request id: " + tea.ToString(requestId),
|
||
"data": err,
|
||
"description": tea.ToString(DefaultAny(err["Description"], err["description"])),
|
||
"accessDeniedDetail": DefaultAny(err["AccessDeniedDetail"], err["accessDeniedDetail"]),
|
||
})
|
||
return _result, _err
|
||
}
|
||
|
||
if tea.BoolValue(util.EqualString(bodyType, tea.String("binary"))) {
|
||
resp := map[string]interface{}{
|
||
"body": response_.Body,
|
||
"headers": response_.Headers,
|
||
"statusCode": tea.IntValue(response_.StatusCode),
|
||
}
|
||
_result = resp
|
||
return _result, _err
|
||
} else if tea.BoolValue(util.EqualString(bodyType, tea.String("byte"))) {
|
||
byt, _err := util.ReadAsBytes(response_.Body)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
_result = make(map[string]interface{})
|
||
_err = tea.Convert(map[string]interface{}{
|
||
"body": byt,
|
||
"headers": response_.Headers,
|
||
"statusCode": tea.IntValue(response_.StatusCode),
|
||
}, &_result)
|
||
return _result, _err
|
||
} else if tea.BoolValue(util.EqualString(bodyType, tea.String("string"))) {
|
||
str, _err := util.ReadAsString(response_.Body)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
_result = make(map[string]interface{})
|
||
_err = tea.Convert(map[string]interface{}{
|
||
"body": tea.StringValue(str),
|
||
"headers": response_.Headers,
|
||
"statusCode": tea.IntValue(response_.StatusCode),
|
||
}, &_result)
|
||
return _result, _err
|
||
} else if tea.BoolValue(util.EqualString(bodyType, tea.String("json"))) {
|
||
obj, _err := util.ReadAsJSON(response_.Body)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
res, _err := util.AssertAsMap(obj)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
_result = make(map[string]interface{})
|
||
_err = tea.Convert(map[string]interface{}{
|
||
"body": res,
|
||
"headers": response_.Headers,
|
||
"statusCode": tea.IntValue(response_.StatusCode),
|
||
}, &_result)
|
||
return _result, _err
|
||
} else if tea.BoolValue(util.EqualString(bodyType, tea.String("array"))) {
|
||
arr, _err := util.ReadAsJSON(response_.Body)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
_result = make(map[string]interface{})
|
||
_err = tea.Convert(map[string]interface{}{
|
||
"body": arr,
|
||
"headers": response_.Headers,
|
||
"statusCode": tea.IntValue(response_.StatusCode),
|
||
}, &_result)
|
||
return _result, _err
|
||
} else {
|
||
_result = make(map[string]interface{})
|
||
_err = tea.Convert(map[string]interface{}{
|
||
"headers": response_.Headers,
|
||
"statusCode": tea.IntValue(response_.StatusCode),
|
||
}, &_result)
|
||
return _result, _err
|
||
}
|
||
|
||
}()
|
||
if !tea.BoolValue(tea.Retryable(_err)) {
|
||
break
|
||
}
|
||
}
|
||
|
||
return _resp, _err
|
||
}
|
||
|
||
/**
|
||
* Encapsulate the request and invoke the network with form body
|
||
* @param action api name
|
||
* @param version product version
|
||
* @param protocol http or https
|
||
* @param method e.g. GET
|
||
* @param authType authorization type e.g. AK
|
||
* @param pathname pathname of every api
|
||
* @param bodyType response body type e.g. String
|
||
* @param request object of OpenApiRequest
|
||
* @param runtime which controls some details of call api, such as retry times
|
||
* @return the response
|
||
*/
|
||
func (client *Client) DoROARequestWithForm(action *string, version *string, protocol *string, method *string, authType *string, pathname *string, bodyType *string, request *OpenApiRequest, runtime *util.RuntimeOptions) (_result map[string]interface{}, _err error) {
|
||
_err = tea.Validate(request)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
_err = tea.Validate(runtime)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
_runtime := map[string]interface{}{
|
||
"timeouted": "retry",
|
||
"key": tea.StringValue(util.DefaultString(runtime.Key, client.Key)),
|
||
"cert": tea.StringValue(util.DefaultString(runtime.Cert, client.Cert)),
|
||
"ca": tea.StringValue(util.DefaultString(runtime.Ca, client.Ca)),
|
||
"readTimeout": tea.IntValue(util.DefaultNumber(runtime.ReadTimeout, client.ReadTimeout)),
|
||
"connectTimeout": tea.IntValue(util.DefaultNumber(runtime.ConnectTimeout, client.ConnectTimeout)),
|
||
"httpProxy": tea.StringValue(util.DefaultString(runtime.HttpProxy, client.HttpProxy)),
|
||
"httpsProxy": tea.StringValue(util.DefaultString(runtime.HttpsProxy, client.HttpsProxy)),
|
||
"noProxy": tea.StringValue(util.DefaultString(runtime.NoProxy, client.NoProxy)),
|
||
"socks5Proxy": tea.StringValue(util.DefaultString(runtime.Socks5Proxy, client.Socks5Proxy)),
|
||
"socks5NetWork": tea.StringValue(util.DefaultString(runtime.Socks5NetWork, client.Socks5NetWork)),
|
||
"maxIdleConns": tea.IntValue(util.DefaultNumber(runtime.MaxIdleConns, client.MaxIdleConns)),
|
||
"retry": map[string]interface{}{
|
||
"retryable": tea.BoolValue(runtime.Autoretry),
|
||
"maxAttempts": tea.IntValue(util.DefaultNumber(runtime.MaxAttempts, tea.Int(3))),
|
||
},
|
||
"backoff": map[string]interface{}{
|
||
"policy": tea.StringValue(util.DefaultString(runtime.BackoffPolicy, tea.String("no"))),
|
||
"period": tea.IntValue(util.DefaultNumber(runtime.BackoffPeriod, tea.Int(1))),
|
||
},
|
||
"ignoreSSL": tea.BoolValue(runtime.IgnoreSSL),
|
||
}
|
||
|
||
_resp := make(map[string]interface{})
|
||
for _retryTimes := 0; tea.BoolValue(tea.AllowRetry(_runtime["retry"], tea.Int(_retryTimes))); _retryTimes++ {
|
||
if _retryTimes > 0 {
|
||
_backoffTime := tea.GetBackoffTime(_runtime["backoff"], tea.Int(_retryTimes))
|
||
if tea.IntValue(_backoffTime) > 0 {
|
||
tea.Sleep(_backoffTime)
|
||
}
|
||
}
|
||
|
||
_resp, _err = func() (map[string]interface{}, error) {
|
||
request_ := tea.NewRequest()
|
||
request_.Protocol = util.DefaultString(client.Protocol, protocol)
|
||
request_.Method = method
|
||
request_.Pathname = pathname
|
||
globalQueries := make(map[string]*string)
|
||
globalHeaders := make(map[string]*string)
|
||
if !tea.BoolValue(util.IsUnset(client.GlobalParameters)) {
|
||
globalParams := client.GlobalParameters
|
||
if !tea.BoolValue(util.IsUnset(globalParams.Queries)) {
|
||
globalQueries = globalParams.Queries
|
||
}
|
||
|
||
if !tea.BoolValue(util.IsUnset(globalParams.Headers)) {
|
||
globalHeaders = globalParams.Headers
|
||
}
|
||
|
||
}
|
||
|
||
request_.Headers = tea.Merge(map[string]*string{
|
||
"date": util.GetDateUTCString(),
|
||
"host": client.Endpoint,
|
||
"accept": tea.String("application/json"),
|
||
"x-acs-signature-nonce": util.GetNonce(),
|
||
"x-acs-signature-method": tea.String("HMAC-SHA1"),
|
||
"x-acs-signature-version": tea.String("1.0"),
|
||
"x-acs-version": version,
|
||
"x-acs-action": action,
|
||
"user-agent": util.GetUserAgent(client.UserAgent),
|
||
}, globalHeaders,
|
||
request.Headers)
|
||
if !tea.BoolValue(util.IsUnset(request.Body)) {
|
||
m, _err := util.AssertAsMap(request.Body)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
request_.Body = tea.ToReader(openapiutil.ToForm(m))
|
||
request_.Headers["content-type"] = tea.String("application/x-www-form-urlencoded")
|
||
}
|
||
|
||
request_.Query = globalQueries
|
||
if !tea.BoolValue(util.IsUnset(request.Query)) {
|
||
request_.Query = tea.Merge(request_.Query,
|
||
request.Query)
|
||
}
|
||
|
||
if !tea.BoolValue(util.EqualString(authType, tea.String("Anonymous"))) {
|
||
accessKeyId, _err := client.GetAccessKeyId()
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
accessKeySecret, _err := client.GetAccessKeySecret()
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
securityToken, _err := client.GetSecurityToken()
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
if !tea.BoolValue(util.Empty(securityToken)) {
|
||
request_.Headers["x-acs-accesskey-id"] = accessKeyId
|
||
request_.Headers["x-acs-security-token"] = securityToken
|
||
}
|
||
|
||
stringToSign := openapiutil.GetStringToSign(request_)
|
||
request_.Headers["authorization"] = tea.String("acs " + tea.StringValue(accessKeyId) + ":" + tea.StringValue(openapiutil.GetROASignature(stringToSign, accessKeySecret)))
|
||
}
|
||
|
||
response_, _err := tea.DoRequest(request_, _runtime)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
if tea.BoolValue(util.EqualNumber(response_.StatusCode, tea.Int(204))) {
|
||
_result = make(map[string]interface{})
|
||
_err = tea.Convert(map[string]map[string]*string{
|
||
"headers": response_.Headers,
|
||
}, &_result)
|
||
return _result, _err
|
||
}
|
||
|
||
if tea.BoolValue(util.Is4xx(response_.StatusCode)) || tea.BoolValue(util.Is5xx(response_.StatusCode)) {
|
||
_res, _err := util.ReadAsJSON(response_.Body)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
err, _err := util.AssertAsMap(_res)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
err["statusCode"] = response_.StatusCode
|
||
_err = tea.NewSDKError(map[string]interface{}{
|
||
"code": tea.ToString(DefaultAny(err["Code"], err["code"])),
|
||
"message": "code: " + tea.ToString(tea.IntValue(response_.StatusCode)) + ", " + tea.ToString(DefaultAny(err["Message"], err["message"])) + " request id: " + tea.ToString(DefaultAny(err["RequestId"], err["requestId"])),
|
||
"data": err,
|
||
"description": tea.ToString(DefaultAny(err["Description"], err["description"])),
|
||
"accessDeniedDetail": DefaultAny(err["AccessDeniedDetail"], err["accessDeniedDetail"]),
|
||
})
|
||
return _result, _err
|
||
}
|
||
|
||
if tea.BoolValue(util.EqualString(bodyType, tea.String("binary"))) {
|
||
resp := map[string]interface{}{
|
||
"body": response_.Body,
|
||
"headers": response_.Headers,
|
||
"statusCode": tea.IntValue(response_.StatusCode),
|
||
}
|
||
_result = resp
|
||
return _result, _err
|
||
} else if tea.BoolValue(util.EqualString(bodyType, tea.String("byte"))) {
|
||
byt, _err := util.ReadAsBytes(response_.Body)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
_result = make(map[string]interface{})
|
||
_err = tea.Convert(map[string]interface{}{
|
||
"body": byt,
|
||
"headers": response_.Headers,
|
||
"statusCode": tea.IntValue(response_.StatusCode),
|
||
}, &_result)
|
||
return _result, _err
|
||
} else if tea.BoolValue(util.EqualString(bodyType, tea.String("string"))) {
|
||
str, _err := util.ReadAsString(response_.Body)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
_result = make(map[string]interface{})
|
||
_err = tea.Convert(map[string]interface{}{
|
||
"body": tea.StringValue(str),
|
||
"headers": response_.Headers,
|
||
"statusCode": tea.IntValue(response_.StatusCode),
|
||
}, &_result)
|
||
return _result, _err
|
||
} else if tea.BoolValue(util.EqualString(bodyType, tea.String("json"))) {
|
||
obj, _err := util.ReadAsJSON(response_.Body)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
res, _err := util.AssertAsMap(obj)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
_result = make(map[string]interface{})
|
||
_err = tea.Convert(map[string]interface{}{
|
||
"body": res,
|
||
"headers": response_.Headers,
|
||
"statusCode": tea.IntValue(response_.StatusCode),
|
||
}, &_result)
|
||
return _result, _err
|
||
} else if tea.BoolValue(util.EqualString(bodyType, tea.String("array"))) {
|
||
arr, _err := util.ReadAsJSON(response_.Body)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
_result = make(map[string]interface{})
|
||
_err = tea.Convert(map[string]interface{}{
|
||
"body": arr,
|
||
"headers": response_.Headers,
|
||
"statusCode": tea.IntValue(response_.StatusCode),
|
||
}, &_result)
|
||
return _result, _err
|
||
} else {
|
||
_result = make(map[string]interface{})
|
||
_err = tea.Convert(map[string]interface{}{
|
||
"headers": response_.Headers,
|
||
"statusCode": tea.IntValue(response_.StatusCode),
|
||
}, &_result)
|
||
return _result, _err
|
||
}
|
||
|
||
}()
|
||
if !tea.BoolValue(tea.Retryable(_err)) {
|
||
break
|
||
}
|
||
}
|
||
|
||
return _resp, _err
|
||
}
|
||
|
||
/**
|
||
* Encapsulate the request and invoke the network
|
||
* @param action api name
|
||
* @param version product version
|
||
* @param protocol http or https
|
||
* @param method e.g. GET
|
||
* @param authType authorization type e.g. AK
|
||
* @param bodyType response body type e.g. String
|
||
* @param request object of OpenApiRequest
|
||
* @param runtime which controls some details of call api, such as retry times
|
||
* @return the response
|
||
*/
|
||
func (client *Client) DoRequest(params *Params, request *OpenApiRequest, runtime *util.RuntimeOptions) (_result map[string]interface{}, _err error) {
|
||
_err = tea.Validate(params)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
_err = tea.Validate(request)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
_err = tea.Validate(runtime)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
_runtime := map[string]interface{}{
|
||
"timeouted": "retry",
|
||
"key": tea.StringValue(util.DefaultString(runtime.Key, client.Key)),
|
||
"cert": tea.StringValue(util.DefaultString(runtime.Cert, client.Cert)),
|
||
"ca": tea.StringValue(util.DefaultString(runtime.Ca, client.Ca)),
|
||
"readTimeout": tea.IntValue(util.DefaultNumber(runtime.ReadTimeout, client.ReadTimeout)),
|
||
"connectTimeout": tea.IntValue(util.DefaultNumber(runtime.ConnectTimeout, client.ConnectTimeout)),
|
||
"httpProxy": tea.StringValue(util.DefaultString(runtime.HttpProxy, client.HttpProxy)),
|
||
"httpsProxy": tea.StringValue(util.DefaultString(runtime.HttpsProxy, client.HttpsProxy)),
|
||
"noProxy": tea.StringValue(util.DefaultString(runtime.NoProxy, client.NoProxy)),
|
||
"socks5Proxy": tea.StringValue(util.DefaultString(runtime.Socks5Proxy, client.Socks5Proxy)),
|
||
"socks5NetWork": tea.StringValue(util.DefaultString(runtime.Socks5NetWork, client.Socks5NetWork)),
|
||
"maxIdleConns": tea.IntValue(util.DefaultNumber(runtime.MaxIdleConns, client.MaxIdleConns)),
|
||
"retry": map[string]interface{}{
|
||
"retryable": tea.BoolValue(runtime.Autoretry),
|
||
"maxAttempts": tea.IntValue(util.DefaultNumber(runtime.MaxAttempts, tea.Int(3))),
|
||
},
|
||
"backoff": map[string]interface{}{
|
||
"policy": tea.StringValue(util.DefaultString(runtime.BackoffPolicy, tea.String("no"))),
|
||
"period": tea.IntValue(util.DefaultNumber(runtime.BackoffPeriod, tea.Int(1))),
|
||
},
|
||
"ignoreSSL": tea.BoolValue(runtime.IgnoreSSL),
|
||
}
|
||
|
||
_resp := make(map[string]interface{})
|
||
for _retryTimes := 0; tea.BoolValue(tea.AllowRetry(_runtime["retry"], tea.Int(_retryTimes))); _retryTimes++ {
|
||
if _retryTimes > 0 {
|
||
_backoffTime := tea.GetBackoffTime(_runtime["backoff"], tea.Int(_retryTimes))
|
||
if tea.IntValue(_backoffTime) > 0 {
|
||
tea.Sleep(_backoffTime)
|
||
}
|
||
}
|
||
|
||
_resp, _err = func() (map[string]interface{}, error) {
|
||
request_ := tea.NewRequest()
|
||
request_.Protocol = util.DefaultString(client.Protocol, params.Protocol)
|
||
request_.Method = params.Method
|
||
request_.Pathname = params.Pathname
|
||
globalQueries := make(map[string]*string)
|
||
globalHeaders := make(map[string]*string)
|
||
if !tea.BoolValue(util.IsUnset(client.GlobalParameters)) {
|
||
globalParams := client.GlobalParameters
|
||
if !tea.BoolValue(util.IsUnset(globalParams.Queries)) {
|
||
globalQueries = globalParams.Queries
|
||
}
|
||
|
||
if !tea.BoolValue(util.IsUnset(globalParams.Headers)) {
|
||
globalHeaders = globalParams.Headers
|
||
}
|
||
|
||
}
|
||
|
||
extendsHeaders := make(map[string]*string)
|
||
if !tea.BoolValue(util.IsUnset(runtime.ExtendsParameters)) {
|
||
extendsParameters := runtime.ExtendsParameters
|
||
if !tea.BoolValue(util.IsUnset(extendsParameters.Headers)) {
|
||
extendsHeaders = extendsParameters.Headers
|
||
}
|
||
|
||
}
|
||
|
||
request_.Query = tea.Merge(globalQueries,
|
||
request.Query)
|
||
// endpoint is setted in product client
|
||
request_.Headers = tea.Merge(map[string]*string{
|
||
"host": client.Endpoint,
|
||
"x-acs-version": params.Version,
|
||
"x-acs-action": params.Action,
|
||
"user-agent": client.GetUserAgent(),
|
||
"x-acs-date": openapiutil.GetTimestamp(),
|
||
"x-acs-signature-nonce": util.GetNonce(),
|
||
"accept": tea.String("application/json"),
|
||
}, globalHeaders,
|
||
extendsHeaders,
|
||
request.Headers)
|
||
if tea.BoolValue(util.EqualString(params.Style, tea.String("RPC"))) {
|
||
headers, _err := client.GetRpcHeaders()
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
if !tea.BoolValue(util.IsUnset(headers)) {
|
||
request_.Headers = tea.Merge(request_.Headers,
|
||
headers)
|
||
}
|
||
|
||
}
|
||
|
||
signatureAlgorithm := util.DefaultString(client.SignatureAlgorithm, tea.String("ACS3-HMAC-SHA256"))
|
||
hashedRequestPayload := openapiutil.HexEncode(openapiutil.Hash(util.ToBytes(tea.String("")), signatureAlgorithm))
|
||
if !tea.BoolValue(util.IsUnset(request.Stream)) {
|
||
tmp, _err := util.ReadAsBytes(request.Stream)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
hashedRequestPayload = openapiutil.HexEncode(openapiutil.Hash(tmp, signatureAlgorithm))
|
||
request_.Body = tea.ToReader(tmp)
|
||
request_.Headers["content-type"] = tea.String("application/octet-stream")
|
||
} else {
|
||
if !tea.BoolValue(util.IsUnset(request.Body)) {
|
||
if tea.BoolValue(util.EqualString(params.ReqBodyType, tea.String("byte"))) {
|
||
byteObj, _err := util.AssertAsBytes(request.Body)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
hashedRequestPayload = openapiutil.HexEncode(openapiutil.Hash(byteObj, signatureAlgorithm))
|
||
request_.Body = tea.ToReader(byteObj)
|
||
} else if tea.BoolValue(util.EqualString(params.ReqBodyType, tea.String("json"))) {
|
||
jsonObj := util.ToJSONString(request.Body)
|
||
hashedRequestPayload = openapiutil.HexEncode(openapiutil.Hash(util.ToBytes(jsonObj), signatureAlgorithm))
|
||
request_.Body = tea.ToReader(jsonObj)
|
||
request_.Headers["content-type"] = tea.String("application/json; charset=utf-8")
|
||
} else {
|
||
m, _err := util.AssertAsMap(request.Body)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
formObj := openapiutil.ToForm(m)
|
||
hashedRequestPayload = openapiutil.HexEncode(openapiutil.Hash(util.ToBytes(formObj), signatureAlgorithm))
|
||
request_.Body = tea.ToReader(formObj)
|
||
request_.Headers["content-type"] = tea.String("application/x-www-form-urlencoded")
|
||
}
|
||
|
||
}
|
||
|
||
}
|
||
|
||
request_.Headers["x-acs-content-sha256"] = hashedRequestPayload
|
||
if !tea.BoolValue(util.EqualString(params.AuthType, tea.String("Anonymous"))) {
|
||
credentialModel, _err := client.Credential.GetCredential()
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
authType := credentialModel.Type
|
||
if tea.BoolValue(util.EqualString(authType, tea.String("bearer"))) {
|
||
bearerToken := credentialModel.BearerToken
|
||
request_.Headers["x-acs-bearer-token"] = bearerToken
|
||
} else {
|
||
accessKeyId := credentialModel.AccessKeyId
|
||
accessKeySecret := credentialModel.AccessKeySecret
|
||
securityToken := credentialModel.SecurityToken
|
||
if !tea.BoolValue(util.Empty(securityToken)) {
|
||
request_.Headers["x-acs-accesskey-id"] = accessKeyId
|
||
request_.Headers["x-acs-security-token"] = securityToken
|
||
}
|
||
|
||
request_.Headers["Authorization"] = openapiutil.GetAuthorization(request_, signatureAlgorithm, hashedRequestPayload, accessKeyId, accessKeySecret)
|
||
}
|
||
|
||
}
|
||
|
||
response_, _err := tea.DoRequest(request_, _runtime)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
if tea.BoolValue(util.Is4xx(response_.StatusCode)) || tea.BoolValue(util.Is5xx(response_.StatusCode)) {
|
||
err := map[string]interface{}{}
|
||
if !tea.BoolValue(util.IsUnset(response_.Headers["content-type"])) && tea.BoolValue(util.EqualString(response_.Headers["content-type"], tea.String("text/xml;charset=utf-8"))) {
|
||
_str, _err := util.ReadAsString(response_.Body)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
respMap := xml.ParseXml(_str, nil)
|
||
err, _err = util.AssertAsMap(respMap["Error"])
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
} else {
|
||
_res, _err := util.ReadAsJSON(response_.Body)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
err, _err = util.AssertAsMap(_res)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
}
|
||
|
||
err["statusCode"] = response_.StatusCode
|
||
_err = tea.NewSDKError(map[string]interface{}{
|
||
"code": tea.ToString(DefaultAny(err["Code"], err["code"])),
|
||
"message": "code: " + tea.ToString(tea.IntValue(response_.StatusCode)) + ", " + tea.ToString(DefaultAny(err["Message"], err["message"])) + " request id: " + tea.ToString(DefaultAny(err["RequestId"], err["requestId"])),
|
||
"data": err,
|
||
"description": tea.ToString(DefaultAny(err["Description"], err["description"])),
|
||
"accessDeniedDetail": DefaultAny(err["AccessDeniedDetail"], err["accessDeniedDetail"]),
|
||
})
|
||
return _result, _err
|
||
}
|
||
|
||
if tea.BoolValue(util.EqualString(params.BodyType, tea.String("binary"))) {
|
||
resp := map[string]interface{}{
|
||
"body": response_.Body,
|
||
"headers": response_.Headers,
|
||
"statusCode": tea.IntValue(response_.StatusCode),
|
||
}
|
||
_result = resp
|
||
return _result, _err
|
||
} else if tea.BoolValue(util.EqualString(params.BodyType, tea.String("byte"))) {
|
||
byt, _err := util.ReadAsBytes(response_.Body)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
_result = make(map[string]interface{})
|
||
_err = tea.Convert(map[string]interface{}{
|
||
"body": byt,
|
||
"headers": response_.Headers,
|
||
"statusCode": tea.IntValue(response_.StatusCode),
|
||
}, &_result)
|
||
return _result, _err
|
||
} else if tea.BoolValue(util.EqualString(params.BodyType, tea.String("string"))) {
|
||
str, _err := util.ReadAsString(response_.Body)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
_result = make(map[string]interface{})
|
||
_err = tea.Convert(map[string]interface{}{
|
||
"body": tea.StringValue(str),
|
||
"headers": response_.Headers,
|
||
"statusCode": tea.IntValue(response_.StatusCode),
|
||
}, &_result)
|
||
return _result, _err
|
||
} else if tea.BoolValue(util.EqualString(params.BodyType, tea.String("json"))) {
|
||
obj, _err := util.ReadAsJSON(response_.Body)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
res, _err := util.AssertAsMap(obj)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
_result = make(map[string]interface{})
|
||
_err = tea.Convert(map[string]interface{}{
|
||
"body": res,
|
||
"headers": response_.Headers,
|
||
"statusCode": tea.IntValue(response_.StatusCode),
|
||
}, &_result)
|
||
return _result, _err
|
||
} else if tea.BoolValue(util.EqualString(params.BodyType, tea.String("array"))) {
|
||
arr, _err := util.ReadAsJSON(response_.Body)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
_result = make(map[string]interface{})
|
||
_err = tea.Convert(map[string]interface{}{
|
||
"body": arr,
|
||
"headers": response_.Headers,
|
||
"statusCode": tea.IntValue(response_.StatusCode),
|
||
}, &_result)
|
||
return _result, _err
|
||
} else {
|
||
anything, _err := util.ReadAsString(response_.Body)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
_result = make(map[string]interface{})
|
||
_err = tea.Convert(map[string]interface{}{
|
||
"body": tea.StringValue(anything),
|
||
"headers": response_.Headers,
|
||
"statusCode": tea.IntValue(response_.StatusCode),
|
||
}, &_result)
|
||
return _result, _err
|
||
}
|
||
|
||
}()
|
||
if !tea.BoolValue(tea.Retryable(_err)) {
|
||
break
|
||
}
|
||
}
|
||
|
||
return _resp, _err
|
||
}
|
||
|
||
/**
|
||
* Encapsulate the request and invoke the network
|
||
* @param action api name
|
||
* @param version product version
|
||
* @param protocol http or https
|
||
* @param method e.g. GET
|
||
* @param authType authorization type e.g. AK
|
||
* @param bodyType response body type e.g. String
|
||
* @param request object of OpenApiRequest
|
||
* @param runtime which controls some details of call api, such as retry times
|
||
* @return the response
|
||
*/
|
||
func (client *Client) Execute(params *Params, request *OpenApiRequest, runtime *util.RuntimeOptions) (_result map[string]interface{}, _err error) {
|
||
_err = tea.Validate(params)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
_err = tea.Validate(request)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
_err = tea.Validate(runtime)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
_runtime := map[string]interface{}{
|
||
"timeouted": "retry",
|
||
"key": tea.StringValue(util.DefaultString(runtime.Key, client.Key)),
|
||
"cert": tea.StringValue(util.DefaultString(runtime.Cert, client.Cert)),
|
||
"ca": tea.StringValue(util.DefaultString(runtime.Ca, client.Ca)),
|
||
"readTimeout": tea.IntValue(util.DefaultNumber(runtime.ReadTimeout, client.ReadTimeout)),
|
||
"connectTimeout": tea.IntValue(util.DefaultNumber(runtime.ConnectTimeout, client.ConnectTimeout)),
|
||
"httpProxy": tea.StringValue(util.DefaultString(runtime.HttpProxy, client.HttpProxy)),
|
||
"httpsProxy": tea.StringValue(util.DefaultString(runtime.HttpsProxy, client.HttpsProxy)),
|
||
"noProxy": tea.StringValue(util.DefaultString(runtime.NoProxy, client.NoProxy)),
|
||
"socks5Proxy": tea.StringValue(util.DefaultString(runtime.Socks5Proxy, client.Socks5Proxy)),
|
||
"socks5NetWork": tea.StringValue(util.DefaultString(runtime.Socks5NetWork, client.Socks5NetWork)),
|
||
"maxIdleConns": tea.IntValue(util.DefaultNumber(runtime.MaxIdleConns, client.MaxIdleConns)),
|
||
"retry": map[string]interface{}{
|
||
"retryable": tea.BoolValue(runtime.Autoretry),
|
||
"maxAttempts": tea.IntValue(util.DefaultNumber(runtime.MaxAttempts, tea.Int(3))),
|
||
},
|
||
"backoff": map[string]interface{}{
|
||
"policy": tea.StringValue(util.DefaultString(runtime.BackoffPolicy, tea.String("no"))),
|
||
"period": tea.IntValue(util.DefaultNumber(runtime.BackoffPeriod, tea.Int(1))),
|
||
},
|
||
"ignoreSSL": tea.BoolValue(runtime.IgnoreSSL),
|
||
}
|
||
|
||
_resp := make(map[string]interface{})
|
||
for _retryTimes := 0; tea.BoolValue(tea.AllowRetry(_runtime["retry"], tea.Int(_retryTimes))); _retryTimes++ {
|
||
if _retryTimes > 0 {
|
||
_backoffTime := tea.GetBackoffTime(_runtime["backoff"], tea.Int(_retryTimes))
|
||
if tea.IntValue(_backoffTime) > 0 {
|
||
tea.Sleep(_backoffTime)
|
||
}
|
||
}
|
||
|
||
_resp, _err = func() (map[string]interface{}, error) {
|
||
request_ := tea.NewRequest()
|
||
// spi = new Gateway();//Gateway implements SPI,这一步在产品 SDK 中实例化
|
||
headers, _err := client.GetRpcHeaders()
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
globalQueries := make(map[string]*string)
|
||
globalHeaders := make(map[string]*string)
|
||
if !tea.BoolValue(util.IsUnset(client.GlobalParameters)) {
|
||
globalParams := client.GlobalParameters
|
||
if !tea.BoolValue(util.IsUnset(globalParams.Queries)) {
|
||
globalQueries = globalParams.Queries
|
||
}
|
||
|
||
if !tea.BoolValue(util.IsUnset(globalParams.Headers)) {
|
||
globalHeaders = globalParams.Headers
|
||
}
|
||
|
||
}
|
||
|
||
requestContext := &spi.InterceptorContextRequest{
|
||
Headers: tea.Merge(globalHeaders,
|
||
request.Headers,
|
||
headers),
|
||
Query: tea.Merge(globalQueries,
|
||
request.Query),
|
||
Body: request.Body,
|
||
Stream: request.Stream,
|
||
HostMap: request.HostMap,
|
||
Pathname: params.Pathname,
|
||
ProductId: client.ProductId,
|
||
Action: params.Action,
|
||
Version: params.Version,
|
||
Protocol: util.DefaultString(client.Protocol, params.Protocol),
|
||
Method: util.DefaultString(client.Method, params.Method),
|
||
AuthType: params.AuthType,
|
||
BodyType: params.BodyType,
|
||
ReqBodyType: params.ReqBodyType,
|
||
Style: params.Style,
|
||
Credential: client.Credential,
|
||
SignatureVersion: client.SignatureVersion,
|
||
SignatureAlgorithm: client.SignatureAlgorithm,
|
||
UserAgent: client.GetUserAgent(),
|
||
}
|
||
configurationContext := &spi.InterceptorContextConfiguration{
|
||
RegionId: client.RegionId,
|
||
Endpoint: util.DefaultString(request.EndpointOverride, client.Endpoint),
|
||
EndpointRule: client.EndpointRule,
|
||
EndpointMap: client.EndpointMap,
|
||
EndpointType: client.EndpointType,
|
||
Network: client.Network,
|
||
Suffix: client.Suffix,
|
||
}
|
||
interceptorContext := &spi.InterceptorContext{
|
||
Request: requestContext,
|
||
Configuration: configurationContext,
|
||
}
|
||
attributeMap := &spi.AttributeMap{}
|
||
// 1. spi.modifyConfiguration(context: SPI.InterceptorContext, attributeMap: SPI.AttributeMap);
|
||
_err = client.Spi.ModifyConfiguration(interceptorContext, attributeMap)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
// 2. spi.modifyRequest(context: SPI.InterceptorContext, attributeMap: SPI.AttributeMap);
|
||
_err = client.Spi.ModifyRequest(interceptorContext, attributeMap)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
request_.Protocol = interceptorContext.Request.Protocol
|
||
request_.Method = interceptorContext.Request.Method
|
||
request_.Pathname = interceptorContext.Request.Pathname
|
||
request_.Query = interceptorContext.Request.Query
|
||
request_.Body = interceptorContext.Request.Stream
|
||
request_.Headers = interceptorContext.Request.Headers
|
||
response_, _err := tea.DoRequest(request_, _runtime)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
responseContext := &spi.InterceptorContextResponse{
|
||
StatusCode: response_.StatusCode,
|
||
Headers: response_.Headers,
|
||
Body: response_.Body,
|
||
}
|
||
interceptorContext.Response = responseContext
|
||
// 3. spi.modifyResponse(context: SPI.InterceptorContext, attributeMap: SPI.AttributeMap);
|
||
_err = client.Spi.ModifyResponse(interceptorContext, attributeMap)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
_result = make(map[string]interface{})
|
||
_err = tea.Convert(map[string]interface{}{
|
||
"headers": interceptorContext.Response.Headers,
|
||
"statusCode": tea.IntValue(interceptorContext.Response.StatusCode),
|
||
"body": interceptorContext.Response.DeserializedBody,
|
||
}, &_result)
|
||
return _result, _err
|
||
}()
|
||
if !tea.BoolValue(tea.Retryable(_err)) {
|
||
break
|
||
}
|
||
}
|
||
|
||
return _resp, _err
|
||
}
|
||
|
||
func (client *Client) CallApi(params *Params, request *OpenApiRequest, runtime *util.RuntimeOptions) (_result map[string]interface{}, _err error) {
|
||
if tea.BoolValue(util.IsUnset(params)) {
|
||
_err = tea.NewSDKError(map[string]interface{}{
|
||
"code": "ParameterMissing",
|
||
"message": "'params' can not be unset",
|
||
})
|
||
return _result, _err
|
||
}
|
||
|
||
if tea.BoolValue(util.IsUnset(client.SignatureAlgorithm)) || !tea.BoolValue(util.EqualString(client.SignatureAlgorithm, tea.String("v2"))) {
|
||
_result = make(map[string]interface{})
|
||
_body, _err := client.DoRequest(params, request, runtime)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
_result = _body
|
||
return _result, _err
|
||
} else if tea.BoolValue(util.EqualString(params.Style, tea.String("ROA"))) && tea.BoolValue(util.EqualString(params.ReqBodyType, tea.String("json"))) {
|
||
_result = make(map[string]interface{})
|
||
_body, _err := client.DoROARequest(params.Action, params.Version, params.Protocol, params.Method, params.AuthType, params.Pathname, params.BodyType, request, runtime)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
_result = _body
|
||
return _result, _err
|
||
} else if tea.BoolValue(util.EqualString(params.Style, tea.String("ROA"))) {
|
||
_result = make(map[string]interface{})
|
||
_body, _err := client.DoROARequestWithForm(params.Action, params.Version, params.Protocol, params.Method, params.AuthType, params.Pathname, params.BodyType, request, runtime)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
_result = _body
|
||
return _result, _err
|
||
} else {
|
||
_result = make(map[string]interface{})
|
||
_body, _err := client.DoRPCRequest(params.Action, params.Version, params.Protocol, params.Method, params.AuthType, params.BodyType, request, runtime)
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
_result = _body
|
||
return _result, _err
|
||
}
|
||
|
||
}
|
||
|
||
/**
|
||
* Get user agent
|
||
* @return user agent
|
||
*/
|
||
func (client *Client) GetUserAgent() (_result *string) {
|
||
userAgent := util.GetUserAgent(client.UserAgent)
|
||
_result = userAgent
|
||
return _result
|
||
}
|
||
|
||
/**
|
||
* Get accesskey id by using credential
|
||
* @return accesskey id
|
||
*/
|
||
func (client *Client) GetAccessKeyId() (_result *string, _err error) {
|
||
if tea.BoolValue(util.IsUnset(client.Credential)) {
|
||
_result = tea.String("")
|
||
return _result, _err
|
||
}
|
||
|
||
accessKeyId, _err := client.Credential.GetAccessKeyId()
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
_result = accessKeyId
|
||
return _result, _err
|
||
}
|
||
|
||
/**
|
||
* Get accesskey secret by using credential
|
||
* @return accesskey secret
|
||
*/
|
||
func (client *Client) GetAccessKeySecret() (_result *string, _err error) {
|
||
if tea.BoolValue(util.IsUnset(client.Credential)) {
|
||
_result = tea.String("")
|
||
return _result, _err
|
||
}
|
||
|
||
secret, _err := client.Credential.GetAccessKeySecret()
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
_result = secret
|
||
return _result, _err
|
||
}
|
||
|
||
/**
|
||
* Get security token by using credential
|
||
* @return security token
|
||
*/
|
||
func (client *Client) GetSecurityToken() (_result *string, _err error) {
|
||
if tea.BoolValue(util.IsUnset(client.Credential)) {
|
||
_result = tea.String("")
|
||
return _result, _err
|
||
}
|
||
|
||
token, _err := client.Credential.GetSecurityToken()
|
||
if _err != nil {
|
||
return _result, _err
|
||
}
|
||
|
||
_result = token
|
||
return _result, _err
|
||
}
|
||
|
||
/**
|
||
* Get bearer token by credential
|
||
* @return bearer token
|
||
*/
|
||
func (client *Client) GetBearerToken() (_result *string, _err error) {
|
||
if tea.BoolValue(util.IsUnset(client.Credential)) {
|
||
_result = tea.String("")
|
||
return _result, _err
|
||
}
|
||
|
||
token := client.Credential.GetBearerToken()
|
||
_result = token
|
||
return _result, _err
|
||
}
|
||
|
||
/**
|
||
* Get credential type by credential
|
||
* @return credential type e.g. access_key
|
||
*/
|
||
func (client *Client) GetType() (_result *string, _err error) {
|
||
if tea.BoolValue(util.IsUnset(client.Credential)) {
|
||
_result = tea.String("")
|
||
return _result, _err
|
||
}
|
||
|
||
authType := client.Credential.GetType()
|
||
_result = authType
|
||
return _result, _err
|
||
}
|
||
|
||
/**
|
||
* If inputValue is not null, return it or return defaultValue
|
||
* @param inputValue users input value
|
||
* @param defaultValue default value
|
||
* @return the final result
|
||
*/
|
||
func DefaultAny(inputValue interface{}, defaultValue interface{}) (_result interface{}) {
|
||
if tea.BoolValue(util.IsUnset(inputValue)) {
|
||
_result = defaultValue
|
||
return _result
|
||
}
|
||
|
||
_result = inputValue
|
||
return _result
|
||
}
|
||
|
||
/**
|
||
* If the endpointRule and config.endpoint are empty, throw error
|
||
* @param config config contains the necessary information to create a client
|
||
*/
|
||
func (client *Client) CheckConfig(config *Config) (_err error) {
|
||
if tea.BoolValue(util.Empty(client.EndpointRule)) && tea.BoolValue(util.Empty(config.Endpoint)) {
|
||
_err = tea.NewSDKError(map[string]interface{}{
|
||
"code": "ParameterMissing",
|
||
"message": "'config.endpoint' can not be empty",
|
||
})
|
||
return _err
|
||
}
|
||
|
||
return _err
|
||
}
|
||
|
||
/**
|
||
* set gateway client
|
||
* @param spi.
|
||
*/
|
||
func (client *Client) SetGatewayClient(spi spi.ClientInterface) (_err error) {
|
||
client.Spi = spi
|
||
return _err
|
||
}
|
||
|
||
/**
|
||
* set RPC header for debug
|
||
* @param headers headers for debug, this header can be used only once.
|
||
*/
|
||
func (client *Client) SetRpcHeaders(headers map[string]*string) (_err error) {
|
||
client.Headers = headers
|
||
return _err
|
||
}
|
||
|
||
/**
|
||
* get RPC header for debug
|
||
*/
|
||
func (client *Client) GetRpcHeaders() (_result map[string]*string, _err error) {
|
||
headers := client.Headers
|
||
client.Headers = nil
|
||
_result = headers
|
||
return _result, _err
|
||
}
|