client.go 43 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359
  1. // This file is auto-generated, don't edit it. Thanks.
  2. /**
  3. * This is for OpenApi SDK
  4. */
  5. package client
  6. import (
  7. openapiutil "github.com/alibabacloud-go/openapi-util/service"
  8. util "github.com/alibabacloud-go/tea-utils/service"
  9. "github.com/alibabacloud-go/tea/tea"
  10. credential "github.com/aliyun/credentials-go/credentials"
  11. "io"
  12. )
  13. /**
  14. * Model for initing client
  15. */
  16. type Config struct {
  17. // accesskey id
  18. AccessKeyId *string `json:"accessKeyId,omitempty" xml:"accessKeyId,omitempty"`
  19. // accesskey secret
  20. AccessKeySecret *string `json:"accessKeySecret,omitempty" xml:"accessKeySecret,omitempty"`
  21. // security token
  22. SecurityToken *string `json:"securityToken,omitempty" xml:"securityToken,omitempty"`
  23. // http protocol
  24. Protocol *string `json:"protocol,omitempty" xml:"protocol,omitempty"`
  25. // region id
  26. RegionId *string `json:"regionId,omitempty" xml:"regionId,omitempty"`
  27. // read timeout
  28. ReadTimeout *int `json:"readTimeout,omitempty" xml:"readTimeout,omitempty"`
  29. // connect timeout
  30. ConnectTimeout *int `json:"connectTimeout,omitempty" xml:"connectTimeout,omitempty"`
  31. // http proxy
  32. HttpProxy *string `json:"httpProxy,omitempty" xml:"httpProxy,omitempty"`
  33. // https proxy
  34. HttpsProxy *string `json:"httpsProxy,omitempty" xml:"httpsProxy,omitempty"`
  35. // credential
  36. Credential credential.Credential `json:"credential,omitempty" xml:"credential,omitempty"`
  37. // endpoint
  38. Endpoint *string `json:"endpoint,omitempty" xml:"endpoint,omitempty"`
  39. // proxy white list
  40. NoProxy *string `json:"noProxy,omitempty" xml:"noProxy,omitempty"`
  41. // max idle conns
  42. MaxIdleConns *int `json:"maxIdleConns,omitempty" xml:"maxIdleConns,omitempty"`
  43. // network for endpoint
  44. Network *string `json:"network,omitempty" xml:"network,omitempty"`
  45. // user agent
  46. UserAgent *string `json:"userAgent,omitempty" xml:"userAgent,omitempty"`
  47. // suffix for endpoint
  48. Suffix *string `json:"suffix,omitempty" xml:"suffix,omitempty"`
  49. // socks5 proxy
  50. Socks5Proxy *string `json:"socks5Proxy,omitempty" xml:"socks5Proxy,omitempty"`
  51. // socks5 network
  52. Socks5NetWork *string `json:"socks5NetWork,omitempty" xml:"socks5NetWork,omitempty"`
  53. // endpoint type
  54. EndpointType *string `json:"endpointType,omitempty" xml:"endpointType,omitempty"`
  55. // OpenPlatform endpoint
  56. OpenPlatformEndpoint *string `json:"openPlatformEndpoint,omitempty" xml:"openPlatformEndpoint,omitempty"`
  57. // Deprecated
  58. // credential type
  59. Type *string `json:"type,omitempty" xml:"type,omitempty"`
  60. // Signature Algorithm
  61. SignatureAlgorithm *string `json:"signatureAlgorithm,omitempty" xml:"signatureAlgorithm,omitempty"`
  62. }
  63. func (s Config) String() string {
  64. return tea.Prettify(s)
  65. }
  66. func (s Config) GoString() string {
  67. return s.String()
  68. }
  69. func (s *Config) SetAccessKeyId(v string) *Config {
  70. s.AccessKeyId = &v
  71. return s
  72. }
  73. func (s *Config) SetAccessKeySecret(v string) *Config {
  74. s.AccessKeySecret = &v
  75. return s
  76. }
  77. func (s *Config) SetSecurityToken(v string) *Config {
  78. s.SecurityToken = &v
  79. return s
  80. }
  81. func (s *Config) SetProtocol(v string) *Config {
  82. s.Protocol = &v
  83. return s
  84. }
  85. func (s *Config) SetRegionId(v string) *Config {
  86. s.RegionId = &v
  87. return s
  88. }
  89. func (s *Config) SetReadTimeout(v int) *Config {
  90. s.ReadTimeout = &v
  91. return s
  92. }
  93. func (s *Config) SetConnectTimeout(v int) *Config {
  94. s.ConnectTimeout = &v
  95. return s
  96. }
  97. func (s *Config) SetHttpProxy(v string) *Config {
  98. s.HttpProxy = &v
  99. return s
  100. }
  101. func (s *Config) SetHttpsProxy(v string) *Config {
  102. s.HttpsProxy = &v
  103. return s
  104. }
  105. func (s *Config) SetCredential(v credential.Credential) *Config {
  106. s.Credential = v
  107. return s
  108. }
  109. func (s *Config) SetEndpoint(v string) *Config {
  110. s.Endpoint = &v
  111. return s
  112. }
  113. func (s *Config) SetNoProxy(v string) *Config {
  114. s.NoProxy = &v
  115. return s
  116. }
  117. func (s *Config) SetMaxIdleConns(v int) *Config {
  118. s.MaxIdleConns = &v
  119. return s
  120. }
  121. func (s *Config) SetNetwork(v string) *Config {
  122. s.Network = &v
  123. return s
  124. }
  125. func (s *Config) SetUserAgent(v string) *Config {
  126. s.UserAgent = &v
  127. return s
  128. }
  129. func (s *Config) SetSuffix(v string) *Config {
  130. s.Suffix = &v
  131. return s
  132. }
  133. func (s *Config) SetSocks5Proxy(v string) *Config {
  134. s.Socks5Proxy = &v
  135. return s
  136. }
  137. func (s *Config) SetSocks5NetWork(v string) *Config {
  138. s.Socks5NetWork = &v
  139. return s
  140. }
  141. func (s *Config) SetEndpointType(v string) *Config {
  142. s.EndpointType = &v
  143. return s
  144. }
  145. func (s *Config) SetOpenPlatformEndpoint(v string) *Config {
  146. s.OpenPlatformEndpoint = &v
  147. return s
  148. }
  149. func (s *Config) SetType(v string) *Config {
  150. s.Type = &v
  151. return s
  152. }
  153. func (s *Config) SetSignatureAlgorithm(v string) *Config {
  154. s.SignatureAlgorithm = &v
  155. return s
  156. }
  157. type OpenApiRequest struct {
  158. Headers map[string]*string `json:"headers,omitempty" xml:"headers,omitempty"`
  159. Query map[string]*string `json:"query,omitempty" xml:"query,omitempty"`
  160. Body interface{} `json:"body,omitempty" xml:"body,omitempty"`
  161. Stream io.Reader `json:"stream,omitempty" xml:"stream,omitempty"`
  162. }
  163. func (s OpenApiRequest) String() string {
  164. return tea.Prettify(s)
  165. }
  166. func (s OpenApiRequest) GoString() string {
  167. return s.String()
  168. }
  169. func (s *OpenApiRequest) SetHeaders(v map[string]*string) *OpenApiRequest {
  170. s.Headers = v
  171. return s
  172. }
  173. func (s *OpenApiRequest) SetQuery(v map[string]*string) *OpenApiRequest {
  174. s.Query = v
  175. return s
  176. }
  177. func (s *OpenApiRequest) SetBody(v interface{}) *OpenApiRequest {
  178. s.Body = v
  179. return s
  180. }
  181. func (s *OpenApiRequest) SetStream(v io.Reader) *OpenApiRequest {
  182. s.Stream = v
  183. return s
  184. }
  185. type Params struct {
  186. Action *string `json:"action,omitempty" xml:"action,omitempty" require:"true"`
  187. Version *string `json:"version,omitempty" xml:"version,omitempty" require:"true"`
  188. Protocol *string `json:"protocol,omitempty" xml:"protocol,omitempty" require:"true"`
  189. Pathname *string `json:"pathname,omitempty" xml:"pathname,omitempty" require:"true"`
  190. Method *string `json:"method,omitempty" xml:"method,omitempty" require:"true"`
  191. AuthType *string `json:"authType,omitempty" xml:"authType,omitempty" require:"true"`
  192. BodyType *string `json:"bodyType,omitempty" xml:"bodyType,omitempty" require:"true"`
  193. ReqBodyType *string `json:"reqBodyType,omitempty" xml:"reqBodyType,omitempty" require:"true"`
  194. Style *string `json:"style,omitempty" xml:"style,omitempty"`
  195. }
  196. func (s Params) String() string {
  197. return tea.Prettify(s)
  198. }
  199. func (s Params) GoString() string {
  200. return s.String()
  201. }
  202. func (s *Params) SetAction(v string) *Params {
  203. s.Action = &v
  204. return s
  205. }
  206. func (s *Params) SetVersion(v string) *Params {
  207. s.Version = &v
  208. return s
  209. }
  210. func (s *Params) SetProtocol(v string) *Params {
  211. s.Protocol = &v
  212. return s
  213. }
  214. func (s *Params) SetPathname(v string) *Params {
  215. s.Pathname = &v
  216. return s
  217. }
  218. func (s *Params) SetMethod(v string) *Params {
  219. s.Method = &v
  220. return s
  221. }
  222. func (s *Params) SetAuthType(v string) *Params {
  223. s.AuthType = &v
  224. return s
  225. }
  226. func (s *Params) SetBodyType(v string) *Params {
  227. s.BodyType = &v
  228. return s
  229. }
  230. func (s *Params) SetReqBodyType(v string) *Params {
  231. s.ReqBodyType = &v
  232. return s
  233. }
  234. func (s *Params) SetStyle(v string) *Params {
  235. s.Style = &v
  236. return s
  237. }
  238. type Client struct {
  239. Endpoint *string
  240. RegionId *string
  241. Protocol *string
  242. UserAgent *string
  243. EndpointRule *string
  244. EndpointMap map[string]*string
  245. Suffix *string
  246. ReadTimeout *int
  247. ConnectTimeout *int
  248. HttpProxy *string
  249. HttpsProxy *string
  250. Socks5Proxy *string
  251. Socks5NetWork *string
  252. NoProxy *string
  253. Network *string
  254. ProductId *string
  255. MaxIdleConns *int
  256. EndpointType *string
  257. OpenPlatformEndpoint *string
  258. Credential credential.Credential
  259. SignatureAlgorithm *string
  260. Headers map[string]*string
  261. }
  262. /**
  263. * Init client with Config
  264. * @param config config contains the necessary information to create a client
  265. */
  266. func NewClient(config *Config) (*Client, error) {
  267. client := new(Client)
  268. err := client.Init(config)
  269. return client, err
  270. }
  271. func (client *Client) Init(config *Config) (_err error) {
  272. if tea.BoolValue(util.IsUnset(tea.ToMap(config))) {
  273. _err = tea.NewSDKError(map[string]interface{}{
  274. "code": "ParameterMissing",
  275. "message": "'config' can not be unset",
  276. })
  277. return _err
  278. }
  279. if !tea.BoolValue(util.Empty(config.AccessKeyId)) && !tea.BoolValue(util.Empty(config.AccessKeySecret)) {
  280. if !tea.BoolValue(util.Empty(config.SecurityToken)) {
  281. config.Type = tea.String("sts")
  282. } else {
  283. config.Type = tea.String("access_key")
  284. }
  285. credentialConfig := &credential.Config{
  286. AccessKeyId: config.AccessKeyId,
  287. Type: config.Type,
  288. AccessKeySecret: config.AccessKeySecret,
  289. SecurityToken: config.SecurityToken,
  290. }
  291. client.Credential, _err = credential.NewCredential(credentialConfig)
  292. if _err != nil {
  293. return _err
  294. }
  295. } else if !tea.BoolValue(util.IsUnset(config.Credential)) {
  296. client.Credential = config.Credential
  297. }
  298. client.Endpoint = config.Endpoint
  299. client.Protocol = config.Protocol
  300. client.RegionId = config.RegionId
  301. client.UserAgent = config.UserAgent
  302. client.ReadTimeout = config.ReadTimeout
  303. client.ConnectTimeout = config.ConnectTimeout
  304. client.HttpProxy = config.HttpProxy
  305. client.HttpsProxy = config.HttpsProxy
  306. client.NoProxy = config.NoProxy
  307. client.Socks5Proxy = config.Socks5Proxy
  308. client.Socks5NetWork = config.Socks5NetWork
  309. client.MaxIdleConns = config.MaxIdleConns
  310. client.SignatureAlgorithm = config.SignatureAlgorithm
  311. return nil
  312. }
  313. /**
  314. * Encapsulate the request and invoke the network
  315. * @param action api name
  316. * @param version product version
  317. * @param protocol http or https
  318. * @param method e.g. GET
  319. * @param authType authorization type e.g. AK
  320. * @param bodyType response body type e.g. String
  321. * @param request object of OpenApiRequest
  322. * @param runtime which controls some details of call api, such as retry times
  323. * @return the response
  324. */
  325. 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) {
  326. _err = tea.Validate(request)
  327. if _err != nil {
  328. return _result, _err
  329. }
  330. _err = tea.Validate(runtime)
  331. if _err != nil {
  332. return _result, _err
  333. }
  334. _runtime := map[string]interface{}{
  335. "timeouted": "retry",
  336. "readTimeout": tea.IntValue(util.DefaultNumber(runtime.ReadTimeout, client.ReadTimeout)),
  337. "connectTimeout": tea.IntValue(util.DefaultNumber(runtime.ConnectTimeout, client.ConnectTimeout)),
  338. "httpProxy": tea.StringValue(util.DefaultString(runtime.HttpProxy, client.HttpProxy)),
  339. "httpsProxy": tea.StringValue(util.DefaultString(runtime.HttpsProxy, client.HttpsProxy)),
  340. "noProxy": tea.StringValue(util.DefaultString(runtime.NoProxy, client.NoProxy)),
  341. "maxIdleConns": tea.IntValue(util.DefaultNumber(runtime.MaxIdleConns, client.MaxIdleConns)),
  342. "retry": map[string]interface{}{
  343. "retryable": tea.BoolValue(runtime.Autoretry),
  344. "maxAttempts": tea.IntValue(util.DefaultNumber(runtime.MaxAttempts, tea.Int(3))),
  345. },
  346. "backoff": map[string]interface{}{
  347. "policy": tea.StringValue(util.DefaultString(runtime.BackoffPolicy, tea.String("no"))),
  348. "period": tea.IntValue(util.DefaultNumber(runtime.BackoffPeriod, tea.Int(1))),
  349. },
  350. "ignoreSSL": tea.BoolValue(runtime.IgnoreSSL),
  351. }
  352. _resp := make(map[string]interface{})
  353. for _retryTimes := 0; tea.BoolValue(tea.AllowRetry(_runtime["retry"], tea.Int(_retryTimes))); _retryTimes++ {
  354. if _retryTimes > 0 {
  355. _backoffTime := tea.GetBackoffTime(_runtime["backoff"], tea.Int(_retryTimes))
  356. if tea.IntValue(_backoffTime) > 0 {
  357. tea.Sleep(_backoffTime)
  358. }
  359. }
  360. _resp, _err = func() (map[string]interface{}, error) {
  361. request_ := tea.NewRequest()
  362. request_.Protocol = util.DefaultString(client.Protocol, protocol)
  363. request_.Method = method
  364. request_.Pathname = tea.String("/")
  365. request_.Query = tea.Merge(map[string]*string{
  366. "Action": action,
  367. "Format": tea.String("json"),
  368. "Version": version,
  369. "Timestamp": openapiutil.GetTimestamp(),
  370. "SignatureNonce": util.GetNonce(),
  371. }, request.Query)
  372. headers, _err := client.GetRpcHeaders()
  373. if _err != nil {
  374. return _result, _err
  375. }
  376. if tea.BoolValue(util.IsUnset(headers)) {
  377. // endpoint is setted in product client
  378. request_.Headers = map[string]*string{
  379. "host": client.Endpoint,
  380. "x-acs-version": version,
  381. "x-acs-action": action,
  382. "user-agent": client.GetUserAgent(),
  383. }
  384. } else {
  385. request_.Headers = tea.Merge(map[string]*string{
  386. "host": client.Endpoint,
  387. "x-acs-version": version,
  388. "x-acs-action": action,
  389. "user-agent": client.GetUserAgent(),
  390. }, headers)
  391. }
  392. if !tea.BoolValue(util.IsUnset(request.Body)) {
  393. m := util.AssertAsMap(request.Body)
  394. tmp := util.AnyifyMapValue(openapiutil.Query(m))
  395. request_.Body = tea.ToReader(util.ToFormString(tmp))
  396. request_.Headers["content-type"] = tea.String("application/x-www-form-urlencoded")
  397. }
  398. if !tea.BoolValue(util.EqualString(authType, tea.String("Anonymous"))) {
  399. accessKeyId, _err := client.GetAccessKeyId()
  400. if _err != nil {
  401. return _result, _err
  402. }
  403. accessKeySecret, _err := client.GetAccessKeySecret()
  404. if _err != nil {
  405. return _result, _err
  406. }
  407. securityToken, _err := client.GetSecurityToken()
  408. if _err != nil {
  409. return _result, _err
  410. }
  411. if !tea.BoolValue(util.Empty(securityToken)) {
  412. request_.Query["SecurityToken"] = securityToken
  413. }
  414. request_.Query["SignatureMethod"] = tea.String("HMAC-SHA1")
  415. request_.Query["SignatureVersion"] = tea.String("1.0")
  416. request_.Query["AccessKeyId"] = accessKeyId
  417. var t map[string]interface{}
  418. if !tea.BoolValue(util.IsUnset(request.Body)) {
  419. t = util.AssertAsMap(request.Body)
  420. }
  421. signedParam := tea.Merge(request_.Query,
  422. openapiutil.Query(t))
  423. request_.Query["Signature"] = openapiutil.GetRPCSignature(signedParam, request_.Method, accessKeySecret)
  424. }
  425. response_, _err := tea.DoRequest(request_, _runtime)
  426. if _err != nil {
  427. return _result, _err
  428. }
  429. if tea.BoolValue(util.Is4xx(response_.StatusCode)) || tea.BoolValue(util.Is5xx(response_.StatusCode)) {
  430. _res, _err := util.ReadAsJSON(response_.Body)
  431. if _err != nil {
  432. return _result, _err
  433. }
  434. err := util.AssertAsMap(_res)
  435. requestId := DefaultAny(err["RequestId"], err["requestId"])
  436. requestId = DefaultAny(requestId, err["requestid"])
  437. _err = tea.NewSDKError(map[string]interface{}{
  438. "code": tea.ToString(DefaultAny(err["Code"], err["code"])),
  439. "message": "code: " + tea.ToString(tea.IntValue(response_.StatusCode)) + ", " + tea.ToString(DefaultAny(err["Message"], err["message"])) + " request id: " + tea.ToString(requestId),
  440. "data": err,
  441. })
  442. return _result, _err
  443. }
  444. if tea.BoolValue(util.EqualString(bodyType, tea.String("binary"))) {
  445. resp := map[string]interface{}{
  446. "body": response_.Body,
  447. "headers": response_.Headers,
  448. }
  449. _result = resp
  450. return _result, _err
  451. } else if tea.BoolValue(util.EqualString(bodyType, tea.String("byte"))) {
  452. byt, _err := util.ReadAsBytes(response_.Body)
  453. if _err != nil {
  454. return _result, _err
  455. }
  456. _result = make(map[string]interface{})
  457. _err = tea.Convert(map[string]interface{}{
  458. "body": byt,
  459. "headers": response_.Headers,
  460. }, &_result)
  461. return _result, _err
  462. } else if tea.BoolValue(util.EqualString(bodyType, tea.String("string"))) {
  463. str, _err := util.ReadAsString(response_.Body)
  464. if _err != nil {
  465. return _result, _err
  466. }
  467. _result = make(map[string]interface{})
  468. _err = tea.Convert(map[string]interface{}{
  469. "body": tea.StringValue(str),
  470. "headers": response_.Headers,
  471. }, &_result)
  472. return _result, _err
  473. } else if tea.BoolValue(util.EqualString(bodyType, tea.String("json"))) {
  474. obj, _err := util.ReadAsJSON(response_.Body)
  475. if _err != nil {
  476. return _result, _err
  477. }
  478. res := util.AssertAsMap(obj)
  479. _result = make(map[string]interface{})
  480. _err = tea.Convert(map[string]interface{}{
  481. "body": res,
  482. "headers": response_.Headers,
  483. }, &_result)
  484. return _result, _err
  485. } else if tea.BoolValue(util.EqualString(bodyType, tea.String("array"))) {
  486. arr, _err := util.ReadAsJSON(response_.Body)
  487. if _err != nil {
  488. return _result, _err
  489. }
  490. _result = make(map[string]interface{})
  491. _err = tea.Convert(map[string]interface{}{
  492. "body": arr,
  493. "headers": response_.Headers,
  494. }, &_result)
  495. return _result, _err
  496. } else {
  497. _result = make(map[string]interface{})
  498. _err = tea.Convert(map[string]map[string]*string{
  499. "headers": response_.Headers,
  500. }, &_result)
  501. return _result, _err
  502. }
  503. }()
  504. if !tea.BoolValue(tea.Retryable(_err)) {
  505. break
  506. }
  507. }
  508. return _resp, _err
  509. }
  510. /**
  511. * Encapsulate the request and invoke the network
  512. * @param action api name
  513. * @param version product version
  514. * @param protocol http or https
  515. * @param method e.g. GET
  516. * @param authType authorization type e.g. AK
  517. * @param pathname pathname of every api
  518. * @param bodyType response body type e.g. String
  519. * @param request object of OpenApiRequest
  520. * @param runtime which controls some details of call api, such as retry times
  521. * @return the response
  522. */
  523. 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) {
  524. _err = tea.Validate(request)
  525. if _err != nil {
  526. return _result, _err
  527. }
  528. _err = tea.Validate(runtime)
  529. if _err != nil {
  530. return _result, _err
  531. }
  532. _runtime := map[string]interface{}{
  533. "timeouted": "retry",
  534. "readTimeout": tea.IntValue(util.DefaultNumber(runtime.ReadTimeout, client.ReadTimeout)),
  535. "connectTimeout": tea.IntValue(util.DefaultNumber(runtime.ConnectTimeout, client.ConnectTimeout)),
  536. "httpProxy": tea.StringValue(util.DefaultString(runtime.HttpProxy, client.HttpProxy)),
  537. "httpsProxy": tea.StringValue(util.DefaultString(runtime.HttpsProxy, client.HttpsProxy)),
  538. "noProxy": tea.StringValue(util.DefaultString(runtime.NoProxy, client.NoProxy)),
  539. "maxIdleConns": tea.IntValue(util.DefaultNumber(runtime.MaxIdleConns, client.MaxIdleConns)),
  540. "retry": map[string]interface{}{
  541. "retryable": tea.BoolValue(runtime.Autoretry),
  542. "maxAttempts": tea.IntValue(util.DefaultNumber(runtime.MaxAttempts, tea.Int(3))),
  543. },
  544. "backoff": map[string]interface{}{
  545. "policy": tea.StringValue(util.DefaultString(runtime.BackoffPolicy, tea.String("no"))),
  546. "period": tea.IntValue(util.DefaultNumber(runtime.BackoffPeriod, tea.Int(1))),
  547. },
  548. "ignoreSSL": tea.BoolValue(runtime.IgnoreSSL),
  549. }
  550. _resp := make(map[string]interface{})
  551. for _retryTimes := 0; tea.BoolValue(tea.AllowRetry(_runtime["retry"], tea.Int(_retryTimes))); _retryTimes++ {
  552. if _retryTimes > 0 {
  553. _backoffTime := tea.GetBackoffTime(_runtime["backoff"], tea.Int(_retryTimes))
  554. if tea.IntValue(_backoffTime) > 0 {
  555. tea.Sleep(_backoffTime)
  556. }
  557. }
  558. _resp, _err = func() (map[string]interface{}, error) {
  559. request_ := tea.NewRequest()
  560. request_.Protocol = util.DefaultString(client.Protocol, protocol)
  561. request_.Method = method
  562. request_.Pathname = pathname
  563. request_.Headers = tea.Merge(map[string]*string{
  564. "date": util.GetDateUTCString(),
  565. "host": client.Endpoint,
  566. "accept": tea.String("application/json"),
  567. "x-acs-signature-nonce": util.GetNonce(),
  568. "x-acs-signature-method": tea.String("HMAC-SHA1"),
  569. "x-acs-signature-version": tea.String("1.0"),
  570. "x-acs-version": version,
  571. "x-acs-action": action,
  572. "user-agent": util.GetUserAgent(client.UserAgent),
  573. }, request.Headers)
  574. if !tea.BoolValue(util.IsUnset(request.Body)) {
  575. request_.Body = tea.ToReader(util.ToJSONString(request.Body))
  576. request_.Headers["content-type"] = tea.String("application/json; charset=utf-8")
  577. }
  578. if !tea.BoolValue(util.IsUnset(request.Query)) {
  579. request_.Query = request.Query
  580. }
  581. if !tea.BoolValue(util.EqualString(authType, tea.String("Anonymous"))) {
  582. accessKeyId, _err := client.GetAccessKeyId()
  583. if _err != nil {
  584. return _result, _err
  585. }
  586. accessKeySecret, _err := client.GetAccessKeySecret()
  587. if _err != nil {
  588. return _result, _err
  589. }
  590. securityToken, _err := client.GetSecurityToken()
  591. if _err != nil {
  592. return _result, _err
  593. }
  594. if !tea.BoolValue(util.Empty(securityToken)) {
  595. request_.Headers["x-acs-accesskey-id"] = accessKeyId
  596. request_.Headers["x-acs-security-token"] = securityToken
  597. }
  598. stringToSign := openapiutil.GetStringToSign(request_)
  599. request_.Headers["authorization"] = tea.String("acs " + tea.StringValue(accessKeyId) + ":" + tea.StringValue(openapiutil.GetROASignature(stringToSign, accessKeySecret)))
  600. }
  601. response_, _err := tea.DoRequest(request_, _runtime)
  602. if _err != nil {
  603. return _result, _err
  604. }
  605. if tea.BoolValue(util.EqualNumber(response_.StatusCode, tea.Int(204))) {
  606. _result = make(map[string]interface{})
  607. _err = tea.Convert(map[string]map[string]*string{
  608. "headers": response_.Headers,
  609. }, &_result)
  610. return _result, _err
  611. }
  612. if tea.BoolValue(util.Is4xx(response_.StatusCode)) || tea.BoolValue(util.Is5xx(response_.StatusCode)) {
  613. _res, _err := util.ReadAsJSON(response_.Body)
  614. if _err != nil {
  615. return _result, _err
  616. }
  617. err := util.AssertAsMap(_res)
  618. requestId := DefaultAny(err["RequestId"], err["requestId"])
  619. requestId = DefaultAny(requestId, err["requestid"])
  620. _err = tea.NewSDKError(map[string]interface{}{
  621. "code": tea.ToString(DefaultAny(err["Code"], err["code"])),
  622. "message": "code: " + tea.ToString(tea.IntValue(response_.StatusCode)) + ", " + tea.ToString(DefaultAny(err["Message"], err["message"])) + " request id: " + tea.ToString(requestId),
  623. "data": err,
  624. })
  625. return _result, _err
  626. }
  627. if tea.BoolValue(util.EqualString(bodyType, tea.String("binary"))) {
  628. resp := map[string]interface{}{
  629. "body": response_.Body,
  630. "headers": response_.Headers,
  631. }
  632. _result = resp
  633. return _result, _err
  634. } else if tea.BoolValue(util.EqualString(bodyType, tea.String("byte"))) {
  635. byt, _err := util.ReadAsBytes(response_.Body)
  636. if _err != nil {
  637. return _result, _err
  638. }
  639. _result = make(map[string]interface{})
  640. _err = tea.Convert(map[string]interface{}{
  641. "body": byt,
  642. "headers": response_.Headers,
  643. }, &_result)
  644. return _result, _err
  645. } else if tea.BoolValue(util.EqualString(bodyType, tea.String("string"))) {
  646. str, _err := util.ReadAsString(response_.Body)
  647. if _err != nil {
  648. return _result, _err
  649. }
  650. _result = make(map[string]interface{})
  651. _err = tea.Convert(map[string]interface{}{
  652. "body": tea.StringValue(str),
  653. "headers": response_.Headers,
  654. }, &_result)
  655. return _result, _err
  656. } else if tea.BoolValue(util.EqualString(bodyType, tea.String("json"))) {
  657. obj, _err := util.ReadAsJSON(response_.Body)
  658. if _err != nil {
  659. return _result, _err
  660. }
  661. res := util.AssertAsMap(obj)
  662. _result = make(map[string]interface{})
  663. _err = tea.Convert(map[string]interface{}{
  664. "body": res,
  665. "headers": response_.Headers,
  666. }, &_result)
  667. return _result, _err
  668. } else if tea.BoolValue(util.EqualString(bodyType, tea.String("array"))) {
  669. arr, _err := util.ReadAsJSON(response_.Body)
  670. if _err != nil {
  671. return _result, _err
  672. }
  673. _result = make(map[string]interface{})
  674. _err = tea.Convert(map[string]interface{}{
  675. "body": arr,
  676. "headers": response_.Headers,
  677. }, &_result)
  678. return _result, _err
  679. } else {
  680. _result = make(map[string]interface{})
  681. _err = tea.Convert(map[string]map[string]*string{
  682. "headers": response_.Headers,
  683. }, &_result)
  684. return _result, _err
  685. }
  686. }()
  687. if !tea.BoolValue(tea.Retryable(_err)) {
  688. break
  689. }
  690. }
  691. return _resp, _err
  692. }
  693. /**
  694. * Encapsulate the request and invoke the network with form body
  695. * @param action api name
  696. * @param version product version
  697. * @param protocol http or https
  698. * @param method e.g. GET
  699. * @param authType authorization type e.g. AK
  700. * @param pathname pathname of every api
  701. * @param bodyType response body type e.g. String
  702. * @param request object of OpenApiRequest
  703. * @param runtime which controls some details of call api, such as retry times
  704. * @return the response
  705. */
  706. 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) {
  707. _err = tea.Validate(request)
  708. if _err != nil {
  709. return _result, _err
  710. }
  711. _err = tea.Validate(runtime)
  712. if _err != nil {
  713. return _result, _err
  714. }
  715. _runtime := map[string]interface{}{
  716. "timeouted": "retry",
  717. "readTimeout": tea.IntValue(util.DefaultNumber(runtime.ReadTimeout, client.ReadTimeout)),
  718. "connectTimeout": tea.IntValue(util.DefaultNumber(runtime.ConnectTimeout, client.ConnectTimeout)),
  719. "httpProxy": tea.StringValue(util.DefaultString(runtime.HttpProxy, client.HttpProxy)),
  720. "httpsProxy": tea.StringValue(util.DefaultString(runtime.HttpsProxy, client.HttpsProxy)),
  721. "noProxy": tea.StringValue(util.DefaultString(runtime.NoProxy, client.NoProxy)),
  722. "maxIdleConns": tea.IntValue(util.DefaultNumber(runtime.MaxIdleConns, client.MaxIdleConns)),
  723. "retry": map[string]interface{}{
  724. "retryable": tea.BoolValue(runtime.Autoretry),
  725. "maxAttempts": tea.IntValue(util.DefaultNumber(runtime.MaxAttempts, tea.Int(3))),
  726. },
  727. "backoff": map[string]interface{}{
  728. "policy": tea.StringValue(util.DefaultString(runtime.BackoffPolicy, tea.String("no"))),
  729. "period": tea.IntValue(util.DefaultNumber(runtime.BackoffPeriod, tea.Int(1))),
  730. },
  731. "ignoreSSL": tea.BoolValue(runtime.IgnoreSSL),
  732. }
  733. _resp := make(map[string]interface{})
  734. for _retryTimes := 0; tea.BoolValue(tea.AllowRetry(_runtime["retry"], tea.Int(_retryTimes))); _retryTimes++ {
  735. if _retryTimes > 0 {
  736. _backoffTime := tea.GetBackoffTime(_runtime["backoff"], tea.Int(_retryTimes))
  737. if tea.IntValue(_backoffTime) > 0 {
  738. tea.Sleep(_backoffTime)
  739. }
  740. }
  741. _resp, _err = func() (map[string]interface{}, error) {
  742. request_ := tea.NewRequest()
  743. request_.Protocol = util.DefaultString(client.Protocol, protocol)
  744. request_.Method = method
  745. request_.Pathname = pathname
  746. request_.Headers = tea.Merge(map[string]*string{
  747. "date": util.GetDateUTCString(),
  748. "host": client.Endpoint,
  749. "accept": tea.String("application/json"),
  750. "x-acs-signature-nonce": util.GetNonce(),
  751. "x-acs-signature-method": tea.String("HMAC-SHA1"),
  752. "x-acs-signature-version": tea.String("1.0"),
  753. "x-acs-version": version,
  754. "x-acs-action": action,
  755. "user-agent": util.GetUserAgent(client.UserAgent),
  756. }, request.Headers)
  757. if !tea.BoolValue(util.IsUnset(request.Body)) {
  758. m := util.AssertAsMap(request.Body)
  759. request_.Body = tea.ToReader(openapiutil.ToForm(m))
  760. request_.Headers["content-type"] = tea.String("application/x-www-form-urlencoded")
  761. }
  762. if !tea.BoolValue(util.IsUnset(request.Query)) {
  763. request_.Query = request.Query
  764. }
  765. if !tea.BoolValue(util.EqualString(authType, tea.String("Anonymous"))) {
  766. accessKeyId, _err := client.GetAccessKeyId()
  767. if _err != nil {
  768. return _result, _err
  769. }
  770. accessKeySecret, _err := client.GetAccessKeySecret()
  771. if _err != nil {
  772. return _result, _err
  773. }
  774. securityToken, _err := client.GetSecurityToken()
  775. if _err != nil {
  776. return _result, _err
  777. }
  778. if !tea.BoolValue(util.Empty(securityToken)) {
  779. request_.Headers["x-acs-accesskey-id"] = accessKeyId
  780. request_.Headers["x-acs-security-token"] = securityToken
  781. }
  782. stringToSign := openapiutil.GetStringToSign(request_)
  783. request_.Headers["authorization"] = tea.String("acs " + tea.StringValue(accessKeyId) + ":" + tea.StringValue(openapiutil.GetROASignature(stringToSign, accessKeySecret)))
  784. }
  785. response_, _err := tea.DoRequest(request_, _runtime)
  786. if _err != nil {
  787. return _result, _err
  788. }
  789. if tea.BoolValue(util.EqualNumber(response_.StatusCode, tea.Int(204))) {
  790. _result = make(map[string]interface{})
  791. _err = tea.Convert(map[string]map[string]*string{
  792. "headers": response_.Headers,
  793. }, &_result)
  794. return _result, _err
  795. }
  796. if tea.BoolValue(util.Is4xx(response_.StatusCode)) || tea.BoolValue(util.Is5xx(response_.StatusCode)) {
  797. _res, _err := util.ReadAsJSON(response_.Body)
  798. if _err != nil {
  799. return _result, _err
  800. }
  801. err := util.AssertAsMap(_res)
  802. _err = tea.NewSDKError(map[string]interface{}{
  803. "code": tea.ToString(DefaultAny(err["Code"], err["code"])),
  804. "message": "code: " + tea.ToString(tea.IntValue(response_.StatusCode)) + ", " + tea.ToString(DefaultAny(err["Message"], err["message"])) + " request id: " + tea.ToString(DefaultAny(err["RequestId"], err["requestId"])),
  805. "data": err,
  806. })
  807. return _result, _err
  808. }
  809. if tea.BoolValue(util.EqualString(bodyType, tea.String("binary"))) {
  810. resp := map[string]interface{}{
  811. "body": response_.Body,
  812. "headers": response_.Headers,
  813. }
  814. _result = resp
  815. return _result, _err
  816. } else if tea.BoolValue(util.EqualString(bodyType, tea.String("byte"))) {
  817. byt, _err := util.ReadAsBytes(response_.Body)
  818. if _err != nil {
  819. return _result, _err
  820. }
  821. _result = make(map[string]interface{})
  822. _err = tea.Convert(map[string]interface{}{
  823. "body": byt,
  824. "headers": response_.Headers,
  825. }, &_result)
  826. return _result, _err
  827. } else if tea.BoolValue(util.EqualString(bodyType, tea.String("string"))) {
  828. str, _err := util.ReadAsString(response_.Body)
  829. if _err != nil {
  830. return _result, _err
  831. }
  832. _result = make(map[string]interface{})
  833. _err = tea.Convert(map[string]interface{}{
  834. "body": tea.StringValue(str),
  835. "headers": response_.Headers,
  836. }, &_result)
  837. return _result, _err
  838. } else if tea.BoolValue(util.EqualString(bodyType, tea.String("json"))) {
  839. obj, _err := util.ReadAsJSON(response_.Body)
  840. if _err != nil {
  841. return _result, _err
  842. }
  843. res := util.AssertAsMap(obj)
  844. _result = make(map[string]interface{})
  845. _err = tea.Convert(map[string]interface{}{
  846. "body": res,
  847. "headers": response_.Headers,
  848. }, &_result)
  849. return _result, _err
  850. } else if tea.BoolValue(util.EqualString(bodyType, tea.String("array"))) {
  851. arr, _err := util.ReadAsJSON(response_.Body)
  852. if _err != nil {
  853. return _result, _err
  854. }
  855. _result = make(map[string]interface{})
  856. _err = tea.Convert(map[string]interface{}{
  857. "body": arr,
  858. "headers": response_.Headers,
  859. }, &_result)
  860. return _result, _err
  861. } else {
  862. _result = make(map[string]interface{})
  863. _err = tea.Convert(map[string]map[string]*string{
  864. "headers": response_.Headers,
  865. }, &_result)
  866. return _result, _err
  867. }
  868. }()
  869. if !tea.BoolValue(tea.Retryable(_err)) {
  870. break
  871. }
  872. }
  873. return _resp, _err
  874. }
  875. /**
  876. * Encapsulate the request and invoke the network
  877. * @param action api name
  878. * @param version product version
  879. * @param protocol http or https
  880. * @param method e.g. GET
  881. * @param authType authorization type e.g. AK
  882. * @param bodyType response body type e.g. String
  883. * @param request object of OpenApiRequest
  884. * @param runtime which controls some details of call api, such as retry times
  885. * @return the response
  886. */
  887. func (client *Client) DoRequest(params *Params, request *OpenApiRequest, runtime *util.RuntimeOptions) (_result map[string]interface{}, _err error) {
  888. _err = tea.Validate(params)
  889. if _err != nil {
  890. return _result, _err
  891. }
  892. _err = tea.Validate(request)
  893. if _err != nil {
  894. return _result, _err
  895. }
  896. _err = tea.Validate(runtime)
  897. if _err != nil {
  898. return _result, _err
  899. }
  900. _runtime := map[string]interface{}{
  901. "timeouted": "retry",
  902. "readTimeout": tea.IntValue(util.DefaultNumber(runtime.ReadTimeout, client.ReadTimeout)),
  903. "connectTimeout": tea.IntValue(util.DefaultNumber(runtime.ConnectTimeout, client.ConnectTimeout)),
  904. "httpProxy": tea.StringValue(util.DefaultString(runtime.HttpProxy, client.HttpProxy)),
  905. "httpsProxy": tea.StringValue(util.DefaultString(runtime.HttpsProxy, client.HttpsProxy)),
  906. "noProxy": tea.StringValue(util.DefaultString(runtime.NoProxy, client.NoProxy)),
  907. "maxIdleConns": tea.IntValue(util.DefaultNumber(runtime.MaxIdleConns, client.MaxIdleConns)),
  908. "retry": map[string]interface{}{
  909. "retryable": tea.BoolValue(runtime.Autoretry),
  910. "maxAttempts": tea.IntValue(util.DefaultNumber(runtime.MaxAttempts, tea.Int(3))),
  911. },
  912. "backoff": map[string]interface{}{
  913. "policy": tea.StringValue(util.DefaultString(runtime.BackoffPolicy, tea.String("no"))),
  914. "period": tea.IntValue(util.DefaultNumber(runtime.BackoffPeriod, tea.Int(1))),
  915. },
  916. "ignoreSSL": tea.BoolValue(runtime.IgnoreSSL),
  917. }
  918. _resp := make(map[string]interface{})
  919. for _retryTimes := 0; tea.BoolValue(tea.AllowRetry(_runtime["retry"], tea.Int(_retryTimes))); _retryTimes++ {
  920. if _retryTimes > 0 {
  921. _backoffTime := tea.GetBackoffTime(_runtime["backoff"], tea.Int(_retryTimes))
  922. if tea.IntValue(_backoffTime) > 0 {
  923. tea.Sleep(_backoffTime)
  924. }
  925. }
  926. _resp, _err = func() (map[string]interface{}, error) {
  927. request_ := tea.NewRequest()
  928. request_.Protocol = util.DefaultString(client.Protocol, params.Protocol)
  929. request_.Method = params.Method
  930. request_.Pathname = openapiutil.GetEncodePath(params.Pathname)
  931. request_.Query = request.Query
  932. // endpoint is setted in product client
  933. request_.Headers = tea.Merge(map[string]*string{
  934. "host": client.Endpoint,
  935. "x-acs-version": params.Version,
  936. "x-acs-action": params.Action,
  937. "user-agent": client.GetUserAgent(),
  938. "x-acs-date": openapiutil.GetTimestamp(),
  939. "x-acs-signature-nonce": util.GetNonce(),
  940. "accept": tea.String("application/json"),
  941. }, request.Headers)
  942. signatureAlgorithm := util.DefaultString(client.SignatureAlgorithm, tea.String("ACS3-HMAC-SHA256"))
  943. hashedRequestPayload := openapiutil.HexEncode(openapiutil.Hash(util.ToBytes(tea.String("")), signatureAlgorithm))
  944. if !tea.BoolValue(util.IsUnset(request.Body)) {
  945. if tea.BoolValue(util.EqualString(params.ReqBodyType, tea.String("json"))) {
  946. jsonObj := util.ToJSONString(request.Body)
  947. hashedRequestPayload = openapiutil.HexEncode(openapiutil.Hash(util.ToBytes(jsonObj), signatureAlgorithm))
  948. request_.Body = tea.ToReader(jsonObj)
  949. } else {
  950. m := util.AssertAsMap(request.Body)
  951. formObj := openapiutil.ToForm(m)
  952. hashedRequestPayload = openapiutil.HexEncode(openapiutil.Hash(util.ToBytes(formObj), signatureAlgorithm))
  953. request_.Body = tea.ToReader(formObj)
  954. request_.Headers["content-type"] = tea.String("application/x-www-form-urlencoded")
  955. }
  956. }
  957. if !tea.BoolValue(util.IsUnset(request.Stream)) {
  958. tmp, _err := util.ReadAsBytes(request.Stream)
  959. if _err != nil {
  960. return _result, _err
  961. }
  962. hashedRequestPayload = openapiutil.HexEncode(openapiutil.Hash(tmp, signatureAlgorithm))
  963. request_.Body = tea.ToReader(tmp)
  964. }
  965. request_.Headers["x-acs-content-sha256"] = hashedRequestPayload
  966. if !tea.BoolValue(util.EqualString(params.AuthType, tea.String("Anonymous"))) {
  967. accessKeyId, _err := client.GetAccessKeyId()
  968. if _err != nil {
  969. return _result, _err
  970. }
  971. accessKeySecret, _err := client.GetAccessKeySecret()
  972. if _err != nil {
  973. return _result, _err
  974. }
  975. securityToken, _err := client.GetSecurityToken()
  976. if _err != nil {
  977. return _result, _err
  978. }
  979. if !tea.BoolValue(util.Empty(securityToken)) {
  980. request_.Headers["x-acs-security-token"] = securityToken
  981. }
  982. request_.Headers["Authorization"] = openapiutil.GetAuthorization(request_, signatureAlgorithm, hashedRequestPayload, accessKeyId, accessKeySecret)
  983. }
  984. response_, _err := tea.DoRequest(request_, _runtime)
  985. if _err != nil {
  986. return _result, _err
  987. }
  988. if tea.BoolValue(util.Is4xx(response_.StatusCode)) || tea.BoolValue(util.Is5xx(response_.StatusCode)) {
  989. _res, _err := util.ReadAsJSON(response_.Body)
  990. if _err != nil {
  991. return _result, _err
  992. }
  993. err := util.AssertAsMap(_res)
  994. _err = tea.NewSDKError(map[string]interface{}{
  995. "code": tea.ToString(DefaultAny(err["Code"], err["code"])),
  996. "message": "code: " + tea.ToString(tea.IntValue(response_.StatusCode)) + ", " + tea.ToString(DefaultAny(err["Message"], err["message"])) + " request id: " + tea.ToString(DefaultAny(err["RequestId"], err["requestId"])),
  997. "data": err,
  998. })
  999. return _result, _err
  1000. }
  1001. if tea.BoolValue(util.EqualString(params.BodyType, tea.String("binary"))) {
  1002. resp := map[string]interface{}{
  1003. "body": response_.Body,
  1004. "headers": response_.Headers,
  1005. }
  1006. _result = resp
  1007. return _result, _err
  1008. } else if tea.BoolValue(util.EqualString(params.BodyType, tea.String("byte"))) {
  1009. byt, _err := util.ReadAsBytes(response_.Body)
  1010. if _err != nil {
  1011. return _result, _err
  1012. }
  1013. _result = make(map[string]interface{})
  1014. _err = tea.Convert(map[string]interface{}{
  1015. "body": byt,
  1016. "headers": response_.Headers,
  1017. }, &_result)
  1018. return _result, _err
  1019. } else if tea.BoolValue(util.EqualString(params.BodyType, tea.String("string"))) {
  1020. str, _err := util.ReadAsString(response_.Body)
  1021. if _err != nil {
  1022. return _result, _err
  1023. }
  1024. _result = make(map[string]interface{})
  1025. _err = tea.Convert(map[string]interface{}{
  1026. "body": tea.StringValue(str),
  1027. "headers": response_.Headers,
  1028. }, &_result)
  1029. return _result, _err
  1030. } else if tea.BoolValue(util.EqualString(params.BodyType, tea.String("json"))) {
  1031. obj, _err := util.ReadAsJSON(response_.Body)
  1032. if _err != nil {
  1033. return _result, _err
  1034. }
  1035. res := util.AssertAsMap(obj)
  1036. _result = make(map[string]interface{})
  1037. _err = tea.Convert(map[string]interface{}{
  1038. "body": res,
  1039. "headers": response_.Headers,
  1040. }, &_result)
  1041. return _result, _err
  1042. } else if tea.BoolValue(util.EqualString(params.BodyType, tea.String("array"))) {
  1043. arr, _err := util.ReadAsJSON(response_.Body)
  1044. if _err != nil {
  1045. return _result, _err
  1046. }
  1047. _result = make(map[string]interface{})
  1048. _err = tea.Convert(map[string]interface{}{
  1049. "body": arr,
  1050. "headers": response_.Headers,
  1051. }, &_result)
  1052. return _result, _err
  1053. } else {
  1054. _result = make(map[string]interface{})
  1055. _err = tea.Convert(map[string]map[string]*string{
  1056. "headers": response_.Headers,
  1057. }, &_result)
  1058. return _result, _err
  1059. }
  1060. }()
  1061. if !tea.BoolValue(tea.Retryable(_err)) {
  1062. break
  1063. }
  1064. }
  1065. return _resp, _err
  1066. }
  1067. func (client *Client) CallApi(params *Params, request *OpenApiRequest, runtime *util.RuntimeOptions) (_result map[string]interface{}, _err error) {
  1068. if tea.BoolValue(util.IsUnset(tea.ToMap(params))) {
  1069. _err = tea.NewSDKError(map[string]interface{}{
  1070. "code": "ParameterMissing",
  1071. "message": "'params' can not be unset",
  1072. })
  1073. return _result, _err
  1074. }
  1075. if tea.BoolValue(util.IsUnset(client.SignatureAlgorithm)) || !tea.BoolValue(util.EqualString(client.SignatureAlgorithm, tea.String("v2"))) {
  1076. _result = make(map[string]interface{})
  1077. _body, _err := client.DoRequest(params, request, runtime)
  1078. if _err != nil {
  1079. return _result, _err
  1080. }
  1081. _result = _body
  1082. return _result, _err
  1083. } else if tea.BoolValue(util.EqualString(params.Style, tea.String("ROA"))) && tea.BoolValue(util.EqualString(params.ReqBodyType, tea.String("json"))) {
  1084. _result = make(map[string]interface{})
  1085. _body, _err := client.DoROARequest(params.Action, params.Version, params.Protocol, params.Method, params.AuthType, params.Pathname, params.BodyType, request, runtime)
  1086. if _err != nil {
  1087. return _result, _err
  1088. }
  1089. _result = _body
  1090. return _result, _err
  1091. } else if tea.BoolValue(util.EqualString(params.Style, tea.String("ROA"))) {
  1092. _result = make(map[string]interface{})
  1093. _body, _err := client.DoROARequestWithForm(params.Action, params.Version, params.Protocol, params.Method, params.AuthType, params.Pathname, params.BodyType, request, runtime)
  1094. if _err != nil {
  1095. return _result, _err
  1096. }
  1097. _result = _body
  1098. return _result, _err
  1099. } else {
  1100. _result = make(map[string]interface{})
  1101. _body, _err := client.DoRPCRequest(params.Action, params.Version, params.Protocol, params.Method, params.AuthType, params.BodyType, request, runtime)
  1102. if _err != nil {
  1103. return _result, _err
  1104. }
  1105. _result = _body
  1106. return _result, _err
  1107. }
  1108. }
  1109. /**
  1110. * Get user agent
  1111. * @return user agent
  1112. */
  1113. func (client *Client) GetUserAgent() (_result *string) {
  1114. userAgent := util.GetUserAgent(client.UserAgent)
  1115. _result = userAgent
  1116. return _result
  1117. }
  1118. /**
  1119. * Get accesskey id by using credential
  1120. * @return accesskey id
  1121. */
  1122. func (client *Client) GetAccessKeyId() (_result *string, _err error) {
  1123. if tea.BoolValue(util.IsUnset(client.Credential)) {
  1124. _result = tea.String("")
  1125. return _result, _err
  1126. }
  1127. accessKeyId, _err := client.Credential.GetAccessKeyId()
  1128. if _err != nil {
  1129. return _result, _err
  1130. }
  1131. _result = accessKeyId
  1132. return _result, _err
  1133. }
  1134. /**
  1135. * Get accesskey secret by using credential
  1136. * @return accesskey secret
  1137. */
  1138. func (client *Client) GetAccessKeySecret() (_result *string, _err error) {
  1139. if tea.BoolValue(util.IsUnset(client.Credential)) {
  1140. _result = tea.String("")
  1141. return _result, _err
  1142. }
  1143. secret, _err := client.Credential.GetAccessKeySecret()
  1144. if _err != nil {
  1145. return _result, _err
  1146. }
  1147. _result = secret
  1148. return _result, _err
  1149. }
  1150. /**
  1151. * Get security token by using credential
  1152. * @return security token
  1153. */
  1154. func (client *Client) GetSecurityToken() (_result *string, _err error) {
  1155. if tea.BoolValue(util.IsUnset(client.Credential)) {
  1156. _result = tea.String("")
  1157. return _result, _err
  1158. }
  1159. token, _err := client.Credential.GetSecurityToken()
  1160. if _err != nil {
  1161. return _result, _err
  1162. }
  1163. _result = token
  1164. return _result, _err
  1165. }
  1166. /**
  1167. * If inputValue is not null, return it or return defaultValue
  1168. * @param inputValue users input value
  1169. * @param defaultValue default value
  1170. * @return the final result
  1171. */
  1172. func DefaultAny(inputValue interface{}, defaultValue interface{}) (_result interface{}) {
  1173. if tea.BoolValue(util.IsUnset(inputValue)) {
  1174. _result = defaultValue
  1175. return _result
  1176. }
  1177. _result = inputValue
  1178. return _result
  1179. }
  1180. /**
  1181. * If the endpointRule and config.endpoint are empty, throw error
  1182. * @param config config contains the necessary information to create a client
  1183. */
  1184. func (client *Client) CheckConfig(config *Config) (_err error) {
  1185. if tea.BoolValue(util.Empty(client.EndpointRule)) && tea.BoolValue(util.Empty(config.Endpoint)) {
  1186. _err = tea.NewSDKError(map[string]interface{}{
  1187. "code": "ParameterMissing",
  1188. "message": "'config.endpoint' can not be empty",
  1189. })
  1190. return _err
  1191. }
  1192. return _err
  1193. }
  1194. /**
  1195. * set RPC header for debug
  1196. * @param headers headers for debug, this header can be used only once.
  1197. */
  1198. func (client *Client) SetRpcHeaders(headers map[string]*string) (_err error) {
  1199. client.Headers = headers
  1200. return _err
  1201. }
  1202. /**
  1203. * get RPC header for debug
  1204. */
  1205. func (client *Client) GetRpcHeaders() (_result map[string]*string, _err error) {
  1206. headers := client.Headers
  1207. client.Headers = nil
  1208. _result = headers
  1209. return _result, _err
  1210. }