七牛云

This commit is contained in:
“wanyongkang”
2024-02-29 10:30:38 +08:00
parent ea969dafca
commit 3d3f588690
521 changed files with 13990 additions and 41150 deletions

View File

@@ -1,15 +0,0 @@
composer.phar
/vendor/
# Commit your application's lock file https://getcomposer.org/doc/01-basic-usage.md#commit-your-composer-lock-file-to-version-control
# You may choose to ignore a library lock file http://getcomposer.org/doc/02-libraries.md#lock-file
composer.lock
.vscode/
.idea
.DS_Store
cache/
*.cache
runtime/
.php_cs.cache

View File

@@ -1,65 +0,0 @@
<?php
/*
* This document has been generated with
* https://mlocati.github.io/php-cs-fixer-configurator/#version:2.15|configurator
* you can change this configuration by importing this file.
*/
return PhpCsFixer\Config::create()
->setRiskyAllowed(true)
->setIndent(' ')
->setRules([
'@PSR2' => true,
'@PhpCsFixer' => true,
'@Symfony:risky' => true,
'concat_space' => ['spacing' => 'one'],
'array_syntax' => ['syntax' => 'short'],
'array_indentation' => true,
'combine_consecutive_unsets' => true,
'method_separation' => true,
'single_quote' => true,
'declare_equal_normalize' => true,
'function_typehint_space' => true,
'hash_to_slash_comment' => true,
'include' => true,
'lowercase_cast' => true,
'no_multiline_whitespace_before_semicolons' => true,
'no_leading_import_slash' => true,
'no_multiline_whitespace_around_double_arrow' => true,
'no_spaces_around_offset' => true,
'no_unneeded_control_parentheses' => true,
'no_unused_imports' => true,
'no_whitespace_before_comma_in_array' => true,
'no_whitespace_in_blank_line' => true,
'object_operator_without_whitespace' => true,
'single_blank_line_before_namespace' => true,
'single_class_element_per_statement' => true,
'space_after_semicolon' => true,
'standardize_not_equals' => true,
'ternary_operator_spaces' => true,
'trailing_comma_in_multiline_array' => true,
'trim_array_spaces' => true,
'unary_operator_spaces' => true,
'whitespace_after_comma_in_array' => true,
'no_extra_consecutive_blank_lines' => [
'curly_brace_block',
'extra',
'parenthesis_brace_block',
'square_brace_block',
'throw',
'use',
],
'binary_operator_spaces' => [
'align_double_arrow' => true,
'align_equals' => true,
],
'braces' => [
'allow_single_line_closure' => true,
],
])
->setFinder(
PhpCsFixer\Finder::create()
->exclude('vendor')
->exclude('tests')
->in(__DIR__)
);

View File

@@ -1,31 +0,0 @@
[English](README.md) | 简体中文
![](https://aliyunsdk-pages.alicdn.com/icons/AlibabaCloud.svg)
## Alibaba Cloud OpenApi Client
## 安装
### Composer
```bash
composer require alibabacloud/darabonba-openapi
```
## 问题
[提交 Issue](https://github.com/aliyun/darabonba-openapi/issues/new),不符合指南的问题可能会立即关闭。
## 发行说明
每个版本的详细更改记录在[发行说明](./ChangeLog.txt)中。
## 相关
* [最新源码](https://github.com/aliyun/darabonba-openapi)
## 许可证
[Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0)
Copyright (c) 2009-present, Alibaba Cloud All rights reserved.

View File

@@ -1,31 +0,0 @@
English | [简体中文](README-CN.md)
![](https://aliyunsdk-pages.alicdn.com/icons/AlibabaCloud.svg)
## Alibaba Cloud OpenApi Client
## Installation
### Composer
```bash
composer require alibabacloud/darabonba-openapi
```
## Issues
[Opening an Issue](https://github.com/aliyun/darabonba-openapi/issues/new), Issues not conforming to the guidelines may be closed immediately.
## Changelog
Detailed changes for each release are documented in the [release notes](./ChangeLog.txt).
## References
* [Latest Release](https://github.com/aliyun/darabonba-openapi)
## License
[Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0)
Copyright (c) 2009-present, Alibaba Cloud All rights reserved.

View File

@@ -1,15 +0,0 @@
<?php
if (file_exists(__DIR__ . \DIRECTORY_SEPARATOR . 'vendor' . \DIRECTORY_SEPARATOR . 'autoload.php')) {
require_once __DIR__ . \DIRECTORY_SEPARATOR . 'vendor' . \DIRECTORY_SEPARATOR . 'autoload.php';
}
spl_autoload_register(function ($class) {
$name = str_replace('Darabonba\\OpenApi\\', '', $class);
$file = __DIR__ . \DIRECTORY_SEPARATOR . 'src' . \DIRECTORY_SEPARATOR . str_replace('\\', \DIRECTORY_SEPARATOR, $name) . '.php';
if (file_exists($file)) {
require_once $file;
return true;
}
return false;
});

View File

@@ -1,32 +0,0 @@
{
"name": "alibabacloud/darabonba-openapi",
"description": "Alibaba Cloud OpenApi Client",
"type": "library",
"license": "Apache-2.0",
"authors": [
{
"name": "Alibaba Cloud SDK",
"email": "sdk-team@alibabacloud.com"
}
],
"require": {
"php": ">5.5",
"alibabacloud/tea-utils": "^0.2.0",
"alibabacloud/credentials": "^1.1",
"alibabacloud/openapi-util": "^0.1.9"
},
"autoload": {
"psr-4": {
"Darabonba\\OpenApi\\": "src"
}
},
"scripts": {
"fixer": "php-cs-fixer fix ./"
},
"config": {
"sort-packages": true,
"preferred-install": "dist",
"optimize-autoloader": true
},
"prefer-stable": true
}

View File

@@ -1,387 +0,0 @@
<?php
// This file is auto-generated, don't edit it. Thanks.
namespace Darabonba\OpenApi\Models;
use AlibabaCloud\Credentials\Credential;
use AlibabaCloud\Tea\Model;
/**
* Model for initing client.
*/
class Config extends Model
{
/**
* @description accesskey id
*
* @var string
*/
public $accessKeyId;
/**
* @description accesskey secret
*
* @var string
*/
public $accessKeySecret;
/**
* @description security token
*
* @example a.txt
*
* @var string
*/
public $securityToken;
/**
* @description http protocol
*
* @example http
*
* @var string
*/
public $protocol;
/**
* @description region id
*
* @example cn-hangzhou
*
* @var string
*/
public $regionId;
/**
* @description read timeout
*
* @example 10
*
* @var int
*/
public $readTimeout;
/**
* @description connect timeout
*
* @example 10
*
* @var int
*/
public $connectTimeout;
/**
* @description http proxy
*
* @example http://localhost
*
* @var string
*/
public $httpProxy;
/**
* @description https proxy
*
* @example https://localhost
*
* @var string
*/
public $httpsProxy;
/**
* @description credential
*
* @example
*
* @var Credential
*/
public $credential;
/**
* @description endpoint
*
* @example cs.aliyuncs.com
*
* @var string
*/
public $endpoint;
/**
* @description proxy white list
*
* @example http://localhost
*
* @var string
*/
public $noProxy;
/**
* @description max idle conns
*
* @example 3
*
* @var int
*/
public $maxIdleConns;
/**
* @description network for endpoint
*
* @example public
*
* @var string
*/
public $network;
/**
* @description user agent
*
* @example Alibabacloud/1
*
* @var string
*/
public $userAgent;
/**
* @description suffix for endpoint
*
* @example aliyun
*
* @var string
*/
public $suffix;
/**
* @description socks5 proxy
*
* @var string
*/
public $socks5Proxy;
/**
* @description socks5 network
*
* @example TCP
*
* @var string
*/
public $socks5NetWork;
/**
* @description endpoint type
*
* @example internal
*
* @var string
*/
public $endpointType;
/**
* @description OpenPlatform endpoint
*
* @example openplatform.aliyuncs.com
*
* @var string
*/
public $openPlatformEndpoint;
/**
* @description credential type
*
* @example access_key
*
* @deprecated
*
* @var string
*/
public $type;
/**
* @description Signature Algorithm
*
* @example ACS3-HMAC-SHA256
*
* @var string
*/
public $signatureAlgorithm;
protected $_default = [
'accessKeyId' => '',
'accessKeySecret' => '',
'securityToken' => '',
'protocol' => 'http',
'regionId' => '',
'readTimeout' => '',
'connectTimeout' => '',
'httpProxy' => '',
'httpsProxy' => '',
'credential' => '',
'endpoint' => '',
'noProxy' => '',
'maxIdleConns' => '',
'network' => '',
'userAgent' => '',
'suffix' => '',
'socks5Proxy' => '',
'socks5NetWork' => '',
'endpointType' => '',
'openPlatformEndpoint' => '',
'type' => '',
'signatureAlgorithm' => '',
];
public function validate()
{
}
public function toMap()
{
$res = [];
if (null !== $this->accessKeyId) {
$res['accessKeyId'] = $this->accessKeyId;
}
if (null !== $this->accessKeySecret) {
$res['accessKeySecret'] = $this->accessKeySecret;
}
if (null !== $this->securityToken) {
$res['securityToken'] = $this->securityToken;
}
if (null !== $this->protocol) {
$res['protocol'] = $this->protocol;
}
if (null !== $this->regionId) {
$res['regionId'] = $this->regionId;
}
if (null !== $this->readTimeout) {
$res['readTimeout'] = $this->readTimeout;
}
if (null !== $this->connectTimeout) {
$res['connectTimeout'] = $this->connectTimeout;
}
if (null !== $this->httpProxy) {
$res['httpProxy'] = $this->httpProxy;
}
if (null !== $this->httpsProxy) {
$res['httpsProxy'] = $this->httpsProxy;
}
if (null !== $this->credential) {
$res['credential'] = null !== $this->credential ? $this->credential->toMap() : null;
}
if (null !== $this->endpoint) {
$res['endpoint'] = $this->endpoint;
}
if (null !== $this->noProxy) {
$res['noProxy'] = $this->noProxy;
}
if (null !== $this->maxIdleConns) {
$res['maxIdleConns'] = $this->maxIdleConns;
}
if (null !== $this->network) {
$res['network'] = $this->network;
}
if (null !== $this->userAgent) {
$res['userAgent'] = $this->userAgent;
}
if (null !== $this->suffix) {
$res['suffix'] = $this->suffix;
}
if (null !== $this->socks5Proxy) {
$res['socks5Proxy'] = $this->socks5Proxy;
}
if (null !== $this->socks5NetWork) {
$res['socks5NetWork'] = $this->socks5NetWork;
}
if (null !== $this->endpointType) {
$res['endpointType'] = $this->endpointType;
}
if (null !== $this->openPlatformEndpoint) {
$res['openPlatformEndpoint'] = $this->openPlatformEndpoint;
}
if (null !== $this->type) {
$res['type'] = $this->type;
}
if (null !== $this->signatureAlgorithm) {
$res['signatureAlgorithm'] = $this->signatureAlgorithm;
}
return $res;
}
/**
* @param array $map
*
* @return Config
*/
public static function fromMap($map = [])
{
$model = new self();
if (isset($map['accessKeyId'])) {
$model->accessKeyId = $map['accessKeyId'];
}
if (isset($map['accessKeySecret'])) {
$model->accessKeySecret = $map['accessKeySecret'];
}
if (isset($map['securityToken'])) {
$model->securityToken = $map['securityToken'];
}
if (isset($map['protocol'])) {
$model->protocol = $map['protocol'];
}
if (isset($map['regionId'])) {
$model->regionId = $map['regionId'];
}
if (isset($map['readTimeout'])) {
$model->readTimeout = $map['readTimeout'];
}
if (isset($map['connectTimeout'])) {
$model->connectTimeout = $map['connectTimeout'];
}
if (isset($map['httpProxy'])) {
$model->httpProxy = $map['httpProxy'];
}
if (isset($map['httpsProxy'])) {
$model->httpsProxy = $map['httpsProxy'];
}
if (isset($map['credential'])) {
$model->credential = Credential::fromMap($map['credential']);
}
if (isset($map['endpoint'])) {
$model->endpoint = $map['endpoint'];
}
if (isset($map['noProxy'])) {
$model->noProxy = $map['noProxy'];
}
if (isset($map['maxIdleConns'])) {
$model->maxIdleConns = $map['maxIdleConns'];
}
if (isset($map['network'])) {
$model->network = $map['network'];
}
if (isset($map['userAgent'])) {
$model->userAgent = $map['userAgent'];
}
if (isset($map['suffix'])) {
$model->suffix = $map['suffix'];
}
if (isset($map['socks5Proxy'])) {
$model->socks5Proxy = $map['socks5Proxy'];
}
if (isset($map['socks5NetWork'])) {
$model->socks5NetWork = $map['socks5NetWork'];
}
if (isset($map['endpointType'])) {
$model->endpointType = $map['endpointType'];
}
if (isset($map['openPlatformEndpoint'])) {
$model->openPlatformEndpoint = $map['openPlatformEndpoint'];
}
if (isset($map['type'])) {
$model->type = $map['type'];
}
if (isset($map['signatureAlgorithm'])) {
$model->signatureAlgorithm = $map['signatureAlgorithm'];
}
return $model;
}
}

View File

@@ -1,65 +0,0 @@
<?php
// This file is auto-generated, don't edit it. Thanks.
namespace Darabonba\OpenApi\Models;
use AlibabaCloud\Tea\Model;
class OpenApiRequest extends Model
{
public $headers;
public $query;
public $body;
public $stream;
public function validate()
{
}
public function toMap()
{
$res = [];
if (null !== $this->headers) {
$res['headers'] = $this->headers;
}
if (null !== $this->query) {
$res['query'] = $this->query;
}
if (null !== $this->body) {
$res['body'] = $this->body;
}
if (null !== $this->stream) {
$res['stream'] = $this->stream;
}
return $res;
}
/**
* @param array $map
*
* @return OpenApiRequest
*/
public static function fromMap($map = [])
{
$model = new self();
if (isset($map['headers'])) {
$model->headers = $map['headers'];
}
if (isset($map['query'])) {
$model->query = $map['query'];
}
if (isset($map['body'])) {
$model->body = $map['body'];
}
if (isset($map['stream'])) {
$model->stream = $map['stream'];
}
return $model;
}
}

View File

@@ -1,137 +0,0 @@
<?php
// This file is auto-generated, don't edit it. Thanks.
namespace Darabonba\OpenApi\Models;
use AlibabaCloud\Tea\Model;
class Params extends Model
{
/**
* @var string
*/
public $action;
/**
* @var string
*/
public $version;
/**
* @var string
*/
public $protocol;
/**
* @var string
*/
public $pathname;
/**
* @var string
*/
public $method;
/**
* @var string
*/
public $authType;
/**
* @var string
*/
public $bodyType;
/**
* @var string
*/
public $reqBodyType;
public $style;
public function validate()
{
Model::validateRequired('action', $this->action, true);
Model::validateRequired('version', $this->version, true);
Model::validateRequired('protocol', $this->protocol, true);
Model::validateRequired('pathname', $this->pathname, true);
Model::validateRequired('method', $this->method, true);
Model::validateRequired('authType', $this->authType, true);
Model::validateRequired('bodyType', $this->bodyType, true);
Model::validateRequired('reqBodyType', $this->reqBodyType, true);
}
public function toMap()
{
$res = [];
if (null !== $this->action) {
$res['action'] = $this->action;
}
if (null !== $this->version) {
$res['version'] = $this->version;
}
if (null !== $this->protocol) {
$res['protocol'] = $this->protocol;
}
if (null !== $this->pathname) {
$res['pathname'] = $this->pathname;
}
if (null !== $this->method) {
$res['method'] = $this->method;
}
if (null !== $this->authType) {
$res['authType'] = $this->authType;
}
if (null !== $this->bodyType) {
$res['bodyType'] = $this->bodyType;
}
if (null !== $this->reqBodyType) {
$res['reqBodyType'] = $this->reqBodyType;
}
if (null !== $this->style) {
$res['style'] = $this->style;
}
return $res;
}
/**
* @param array $map
*
* @return Params
*/
public static function fromMap($map = [])
{
$model = new self();
if (isset($map['action'])) {
$model->action = $map['action'];
}
if (isset($map['version'])) {
$model->version = $map['version'];
}
if (isset($map['protocol'])) {
$model->protocol = $map['protocol'];
}
if (isset($map['pathname'])) {
$model->pathname = $map['pathname'];
}
if (isset($map['method'])) {
$model->method = $map['method'];
}
if (isset($map['authType'])) {
$model->authType = $map['authType'];
}
if (isset($map['bodyType'])) {
$model->bodyType = $map['bodyType'];
}
if (isset($map['reqBodyType'])) {
$model->reqBodyType = $map['reqBodyType'];
}
if (isset($map['style'])) {
$model->style = $map['style'];
}
return $model;
}
}

View File

@@ -1,943 +0,0 @@
<?php
// This file is auto-generated, don't edit it. Thanks.
namespace Darabonba\OpenApi;
use AlibabaCloud\Credentials\Credential;
use AlibabaCloud\Credentials\Credential\Config;
use AlibabaCloud\OpenApiUtil\OpenApiUtilClient;
use AlibabaCloud\Tea\Exception\TeaError;
use AlibabaCloud\Tea\Exception\TeaUnableRetryError;
use AlibabaCloud\Tea\Request;
use AlibabaCloud\Tea\Tea;
use AlibabaCloud\Tea\Utils\Utils;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
use Darabonba\OpenApi\Models\OpenApiRequest;
use Darabonba\OpenApi\Models\Params;
use Exception;
/**
* This is for OpenApi SDK.
*/
class OpenApiClient
{
protected $_endpoint;
protected $_regionId;
protected $_protocol;
protected $_userAgent;
protected $_endpointRule;
protected $_endpointMap;
protected $_suffix;
protected $_readTimeout;
protected $_connectTimeout;
protected $_httpProxy;
protected $_httpsProxy;
protected $_socks5Proxy;
protected $_socks5NetWork;
protected $_noProxy;
protected $_network;
protected $_productId;
protected $_maxIdleConns;
protected $_endpointType;
protected $_openPlatformEndpoint;
protected $_credential;
protected $_signatureAlgorithm;
protected $_headers;
/**
* Init client with Config.
*
* @param config config contains the necessary information to create a client
* @param mixed $config
*/
public function __construct($config)
{
if (Utils::isUnset($config)) {
throw new TeaError([
'code' => 'ParameterMissing',
'message' => "'config' can not be unset",
]);
}
if (!Utils::empty_($config->accessKeyId) && !Utils::empty_($config->accessKeySecret)) {
if (!Utils::empty_($config->securityToken)) {
$config->type = 'sts';
} else {
$config->type = 'access_key';
}
$credentialConfig = new Config([
'accessKeyId' => $config->accessKeyId,
'type' => $config->type,
'accessKeySecret' => $config->accessKeySecret,
'securityToken' => $config->securityToken,
]);
$this->_credential = new Credential($credentialConfig);
} elseif (!Utils::isUnset($config->credential)) {
$this->_credential = $config->credential;
}
$this->_endpoint = $config->endpoint;
$this->_endpointType = $config->endpointType;
$this->_protocol = $config->protocol;
$this->_regionId = $config->regionId;
$this->_userAgent = $config->userAgent;
$this->_readTimeout = $config->readTimeout;
$this->_connectTimeout = $config->connectTimeout;
$this->_httpProxy = $config->httpProxy;
$this->_httpsProxy = $config->httpsProxy;
$this->_noProxy = $config->noProxy;
$this->_socks5Proxy = $config->socks5Proxy;
$this->_socks5NetWork = $config->socks5NetWork;
$this->_maxIdleConns = $config->maxIdleConns;
$this->_signatureAlgorithm = $config->signatureAlgorithm;
}
/**
* Encapsulate the request and invoke the network.
*
* @param string $action api name
* @param string $version product version
* @param string $protocol http or https
* @param string $method e.g. GET
* @param string $authType authorization type e.g. AK
* @param string $bodyType response body type e.g. String
* @param OpenApiRequest $request object of OpenApiRequest
* @param RuntimeOptions $runtime which controls some details of call api, such as retry times
*
* @throws TeaError
* @throws Exception
* @throws TeaUnableRetryError
*
* @return array the response
*/
public function doRPCRequest($action, $version, $protocol, $method, $authType, $bodyType, $request, $runtime)
{
$request->validate();
$runtime->validate();
$_runtime = [
'timeouted' => 'retry',
'readTimeout' => Utils::defaultNumber($runtime->readTimeout, $this->_readTimeout),
'connectTimeout' => Utils::defaultNumber($runtime->connectTimeout, $this->_connectTimeout),
'httpProxy' => Utils::defaultString($runtime->httpProxy, $this->_httpProxy),
'httpsProxy' => Utils::defaultString($runtime->httpsProxy, $this->_httpsProxy),
'noProxy' => Utils::defaultString($runtime->noProxy, $this->_noProxy),
'maxIdleConns' => Utils::defaultNumber($runtime->maxIdleConns, $this->_maxIdleConns),
'retry' => [
'retryable' => $runtime->autoretry,
'maxAttempts' => Utils::defaultNumber($runtime->maxAttempts, 3),
],
'backoff' => [
'policy' => Utils::defaultString($runtime->backoffPolicy, 'no'),
'period' => Utils::defaultNumber($runtime->backoffPeriod, 1),
],
'ignoreSSL' => $runtime->ignoreSSL,
];
$_lastRequest = null;
$_lastException = null;
$_now = time();
$_retryTimes = 0;
while (Tea::allowRetry(@$_runtime['retry'], $_retryTimes, $_now)) {
if ($_retryTimes > 0) {
$_backoffTime = Tea::getBackoffTime(@$_runtime['backoff'], $_retryTimes);
if ($_backoffTime > 0) {
Tea::sleep($_backoffTime);
}
}
$_retryTimes = $_retryTimes + 1;
try {
$_request = new Request();
$_request->protocol = Utils::defaultString($this->_protocol, $protocol);
$_request->method = $method;
$_request->pathname = '/';
$_request->query = Tea::merge([
'Action' => $action,
'Format' => 'json',
'Version' => $version,
'Timestamp' => OpenApiUtilClient::getTimestamp(),
'SignatureNonce' => Utils::getNonce(),
], $request->query);
$headers = $this->getRpcHeaders();
if (Utils::isUnset($headers)) {
// endpoint is setted in product client
$_request->headers = [
'host' => $this->_endpoint,
'x-acs-version' => $version,
'x-acs-action' => $action,
'user-agent' => $this->getUserAgent(),
];
} else {
$_request->headers = Tea::merge([
'host' => $this->_endpoint,
'x-acs-version' => $version,
'x-acs-action' => $action,
'user-agent' => $this->getUserAgent(),
], $headers);
}
if (!Utils::isUnset($request->body)) {
$m = Utils::assertAsMap($request->body);
$tmp = Utils::anyifyMapValue(OpenApiUtilClient::query($m));
$_request->body = Utils::toFormString($tmp);
$_request->headers['content-type'] = 'application/x-www-form-urlencoded';
}
if (!Utils::equalString($authType, 'Anonymous')) {
$accessKeyId = $this->getAccessKeyId();
$accessKeySecret = $this->getAccessKeySecret();
$securityToken = $this->getSecurityToken();
if (!Utils::empty_($securityToken)) {
$_request->query['SecurityToken'] = $securityToken;
}
$_request->query['SignatureMethod'] = 'HMAC-SHA1';
$_request->query['SignatureVersion'] = '1.0';
$_request->query['AccessKeyId'] = $accessKeyId;
$t = null;
if (!Utils::isUnset($request->body)) {
$t = Utils::assertAsMap($request->body);
}
$signedParam = Tea::merge($_request->query, OpenApiUtilClient::query($t));
$_request->query['Signature'] = OpenApiUtilClient::getRPCSignature($signedParam, $_request->method, $accessKeySecret);
}
$_lastRequest = $_request;
$_response = Tea::send($_request, $_runtime);
if (Utils::is4xx($_response->statusCode) || Utils::is5xx($_response->statusCode)) {
$_res = Utils::readAsJSON($_response->body);
$err = Utils::assertAsMap($_res);
$requestId = self::defaultAny(@$err['RequestId'], @$err['requestId']);
throw new TeaError([
'code' => '' . (string) (self::defaultAny(@$err['Code'], @$err['code'])) . '',
'message' => 'code: ' . (string) ($_response->statusCode) . ', ' . (string) (self::defaultAny(@$err['Message'], @$err['message'])) . ' request id: ' . (string) ($requestId) . '',
'data' => $err,
]);
}
if (Utils::equalString($bodyType, 'binary')) {
$resp = [
'body' => $_response->body,
'headers' => $_response->headers,
];
return $resp;
}
if (Utils::equalString($bodyType, 'byte')) {
$byt = Utils::readAsBytes($_response->body);
return [
'body' => $byt,
'headers' => $_response->headers,
];
}
if (Utils::equalString($bodyType, 'string')) {
$str = Utils::readAsString($_response->body);
return [
'body' => $str,
'headers' => $_response->headers,
];
}
if (Utils::equalString($bodyType, 'json')) {
$obj = Utils::readAsJSON($_response->body);
$res = Utils::assertAsMap($obj);
return [
'body' => $res,
'headers' => $_response->headers,
];
}
if (Utils::equalString($bodyType, 'array')) {
$arr = Utils::readAsJSON($_response->body);
return [
'body' => $arr,
'headers' => $_response->headers,
];
}
return [
'headers' => $_response->headers,
];
} catch (Exception $e) {
if (!($e instanceof TeaError)) {
$e = new TeaError([], $e->getMessage(), $e->getCode(), $e);
}
if (Tea::isRetryable($e)) {
$_lastException = $e;
continue;
}
throw $e;
}
}
throw new TeaUnableRetryError($_lastRequest, $_lastException);
}
/**
* Encapsulate the request and invoke the network.
*
* @param string $action api name
* @param string $version product version
* @param string $protocol http or https
* @param string $method e.g. GET
* @param string $authType authorization type e.g. AK
* @param string $pathname pathname of every api
* @param string $bodyType response body type e.g. String
* @param OpenApiRequest $request object of OpenApiRequest
* @param RuntimeOptions $runtime which controls some details of call api, such as retry times
*
* @throws TeaError
* @throws Exception
* @throws TeaUnableRetryError
*
* @return array the response
*/
public function doROARequest($action, $version, $protocol, $method, $authType, $pathname, $bodyType, $request, $runtime)
{
$request->validate();
$runtime->validate();
$_runtime = [
'timeouted' => 'retry',
'readTimeout' => Utils::defaultNumber($runtime->readTimeout, $this->_readTimeout),
'connectTimeout' => Utils::defaultNumber($runtime->connectTimeout, $this->_connectTimeout),
'httpProxy' => Utils::defaultString($runtime->httpProxy, $this->_httpProxy),
'httpsProxy' => Utils::defaultString($runtime->httpsProxy, $this->_httpsProxy),
'noProxy' => Utils::defaultString($runtime->noProxy, $this->_noProxy),
'maxIdleConns' => Utils::defaultNumber($runtime->maxIdleConns, $this->_maxIdleConns),
'retry' => [
'retryable' => $runtime->autoretry,
'maxAttempts' => Utils::defaultNumber($runtime->maxAttempts, 3),
],
'backoff' => [
'policy' => Utils::defaultString($runtime->backoffPolicy, 'no'),
'period' => Utils::defaultNumber($runtime->backoffPeriod, 1),
],
'ignoreSSL' => $runtime->ignoreSSL,
];
$_lastRequest = null;
$_lastException = null;
$_now = time();
$_retryTimes = 0;
while (Tea::allowRetry(@$_runtime['retry'], $_retryTimes, $_now)) {
if ($_retryTimes > 0) {
$_backoffTime = Tea::getBackoffTime(@$_runtime['backoff'], $_retryTimes);
if ($_backoffTime > 0) {
Tea::sleep($_backoffTime);
}
}
$_retryTimes = $_retryTimes + 1;
try {
$_request = new Request();
$_request->protocol = Utils::defaultString($this->_protocol, $protocol);
$_request->method = $method;
$_request->pathname = $pathname;
$_request->headers = Tea::merge([
'date' => Utils::getDateUTCString(),
'host' => $this->_endpoint,
'accept' => 'application/json',
'x-acs-signature-nonce' => Utils::getNonce(),
'x-acs-signature-method' => 'HMAC-SHA1',
'x-acs-signature-version' => '1.0',
'x-acs-version' => $version,
'x-acs-action' => $action,
'user-agent' => Utils::getUserAgent($this->_userAgent),
], $request->headers);
if (!Utils::isUnset($request->body)) {
$_request->body = Utils::toJSONString($request->body);
$_request->headers['content-type'] = 'application/json; charset=utf-8';
}
if (!Utils::isUnset($request->query)) {
$_request->query = $request->query;
}
if (!Utils::equalString($authType, 'Anonymous')) {
$accessKeyId = $this->getAccessKeyId();
$accessKeySecret = $this->getAccessKeySecret();
$securityToken = $this->getSecurityToken();
if (!Utils::empty_($securityToken)) {
$_request->headers['x-acs-accesskey-id'] = $accessKeyId;
$_request->headers['x-acs-security-token'] = $securityToken;
}
$stringToSign = OpenApiUtilClient::getStringToSign($_request);
$_request->headers['authorization'] = 'acs ' . $accessKeyId . ':' . OpenApiUtilClient::getROASignature($stringToSign, $accessKeySecret) . '';
}
$_lastRequest = $_request;
$_response = Tea::send($_request, $_runtime);
if (Utils::equalNumber($_response->statusCode, 204)) {
return [
'headers' => $_response->headers,
];
}
if (Utils::is4xx($_response->statusCode) || Utils::is5xx($_response->statusCode)) {
$_res = Utils::readAsJSON($_response->body);
$err = Utils::assertAsMap($_res);
$requestId = self::defaultAny(@$err['RequestId'], @$err['requestId']);
$requestId = self::defaultAny($requestId, @$err['requestid']);
throw new TeaError([
'code' => '' . (string) (self::defaultAny(@$err['Code'], @$err['code'])) . '',
'message' => 'code: ' . (string) ($_response->statusCode) . ', ' . (string) (self::defaultAny(@$err['Message'], @$err['message'])) . ' request id: ' . (string) ($requestId) . '',
'data' => $err,
]);
}
if (Utils::equalString($bodyType, 'binary')) {
$resp = [
'body' => $_response->body,
'headers' => $_response->headers,
];
return $resp;
}
if (Utils::equalString($bodyType, 'byte')) {
$byt = Utils::readAsBytes($_response->body);
return [
'body' => $byt,
'headers' => $_response->headers,
];
}
if (Utils::equalString($bodyType, 'string')) {
$str = Utils::readAsString($_response->body);
return [
'body' => $str,
'headers' => $_response->headers,
];
}
if (Utils::equalString($bodyType, 'json')) {
$obj = Utils::readAsJSON($_response->body);
$res = Utils::assertAsMap($obj);
return [
'body' => $res,
'headers' => $_response->headers,
];
}
if (Utils::equalString($bodyType, 'array')) {
$arr = Utils::readAsJSON($_response->body);
return [
'body' => $arr,
'headers' => $_response->headers,
];
}
return [
'headers' => $_response->headers,
];
} catch (Exception $e) {
if (!($e instanceof TeaError)) {
$e = new TeaError([], $e->getMessage(), $e->getCode(), $e);
}
if (Tea::isRetryable($e)) {
$_lastException = $e;
continue;
}
throw $e;
}
}
throw new TeaUnableRetryError($_lastRequest, $_lastException);
}
/**
* Encapsulate the request and invoke the network with form body.
*
* @param string $action api name
* @param string $version product version
* @param string $protocol http or https
* @param string $method e.g. GET
* @param string $authType authorization type e.g. AK
* @param string $pathname pathname of every api
* @param string $bodyType response body type e.g. String
* @param OpenApiRequest $request object of OpenApiRequest
* @param RuntimeOptions $runtime which controls some details of call api, such as retry times
*
* @throws TeaError
* @throws Exception
* @throws TeaUnableRetryError
*
* @return array the response
*/
public function doROARequestWithForm($action, $version, $protocol, $method, $authType, $pathname, $bodyType, $request, $runtime)
{
$request->validate();
$runtime->validate();
$_runtime = [
'timeouted' => 'retry',
'readTimeout' => Utils::defaultNumber($runtime->readTimeout, $this->_readTimeout),
'connectTimeout' => Utils::defaultNumber($runtime->connectTimeout, $this->_connectTimeout),
'httpProxy' => Utils::defaultString($runtime->httpProxy, $this->_httpProxy),
'httpsProxy' => Utils::defaultString($runtime->httpsProxy, $this->_httpsProxy),
'noProxy' => Utils::defaultString($runtime->noProxy, $this->_noProxy),
'maxIdleConns' => Utils::defaultNumber($runtime->maxIdleConns, $this->_maxIdleConns),
'retry' => [
'retryable' => $runtime->autoretry,
'maxAttempts' => Utils::defaultNumber($runtime->maxAttempts, 3),
],
'backoff' => [
'policy' => Utils::defaultString($runtime->backoffPolicy, 'no'),
'period' => Utils::defaultNumber($runtime->backoffPeriod, 1),
],
'ignoreSSL' => $runtime->ignoreSSL,
];
$_lastRequest = null;
$_lastException = null;
$_now = time();
$_retryTimes = 0;
while (Tea::allowRetry(@$_runtime['retry'], $_retryTimes, $_now)) {
if ($_retryTimes > 0) {
$_backoffTime = Tea::getBackoffTime(@$_runtime['backoff'], $_retryTimes);
if ($_backoffTime > 0) {
Tea::sleep($_backoffTime);
}
}
$_retryTimes = $_retryTimes + 1;
try {
$_request = new Request();
$_request->protocol = Utils::defaultString($this->_protocol, $protocol);
$_request->method = $method;
$_request->pathname = $pathname;
$_request->headers = Tea::merge([
'date' => Utils::getDateUTCString(),
'host' => $this->_endpoint,
'accept' => 'application/json',
'x-acs-signature-nonce' => Utils::getNonce(),
'x-acs-signature-method' => 'HMAC-SHA1',
'x-acs-signature-version' => '1.0',
'x-acs-version' => $version,
'x-acs-action' => $action,
'user-agent' => Utils::getUserAgent($this->_userAgent),
], $request->headers);
if (!Utils::isUnset($request->body)) {
$m = Utils::assertAsMap($request->body);
$_request->body = OpenApiUtilClient::toForm($m);
$_request->headers['content-type'] = 'application/x-www-form-urlencoded';
}
if (!Utils::isUnset($request->query)) {
$_request->query = $request->query;
}
if (!Utils::equalString($authType, 'Anonymous')) {
$accessKeyId = $this->getAccessKeyId();
$accessKeySecret = $this->getAccessKeySecret();
$securityToken = $this->getSecurityToken();
if (!Utils::empty_($securityToken)) {
$_request->headers['x-acs-accesskey-id'] = $accessKeyId;
$_request->headers['x-acs-security-token'] = $securityToken;
}
$stringToSign = OpenApiUtilClient::getStringToSign($_request);
$_request->headers['authorization'] = 'acs ' . $accessKeyId . ':' . OpenApiUtilClient::getROASignature($stringToSign, $accessKeySecret) . '';
}
$_lastRequest = $_request;
$_response = Tea::send($_request, $_runtime);
if (Utils::equalNumber($_response->statusCode, 204)) {
return [
'headers' => $_response->headers,
];
}
if (Utils::is4xx($_response->statusCode) || Utils::is5xx($_response->statusCode)) {
$_res = Utils::readAsJSON($_response->body);
$err = Utils::assertAsMap($_res);
throw new TeaError([
'code' => '' . (string) (self::defaultAny(@$err['Code'], @$err['code'])) . '',
'message' => 'code: ' . (string) ($_response->statusCode) . ', ' . (string) (self::defaultAny(@$err['Message'], @$err['message'])) . ' request id: ' . (string) (self::defaultAny(@$err['RequestId'], @$err['requestId'])) . '',
'data' => $err,
]);
}
if (Utils::equalString($bodyType, 'binary')) {
$resp = [
'body' => $_response->body,
'headers' => $_response->headers,
];
return $resp;
}
if (Utils::equalString($bodyType, 'byte')) {
$byt = Utils::readAsBytes($_response->body);
return [
'body' => $byt,
'headers' => $_response->headers,
];
}
if (Utils::equalString($bodyType, 'string')) {
$str = Utils::readAsString($_response->body);
return [
'body' => $str,
'headers' => $_response->headers,
];
}
if (Utils::equalString($bodyType, 'json')) {
$obj = Utils::readAsJSON($_response->body);
$res = Utils::assertAsMap($obj);
return [
'body' => $res,
'headers' => $_response->headers,
];
}
if (Utils::equalString($bodyType, 'array')) {
$arr = Utils::readAsJSON($_response->body);
return [
'body' => $arr,
'headers' => $_response->headers,
];
}
return [
'headers' => $_response->headers,
];
} catch (Exception $e) {
if (!($e instanceof TeaError)) {
$e = new TeaError([], $e->getMessage(), $e->getCode(), $e);
}
if (Tea::isRetryable($e)) {
$_lastException = $e;
continue;
}
throw $e;
}
}
throw new TeaUnableRetryError($_lastRequest, $_lastException);
}
/**
* Encapsulate the request and invoke the network.
*
* @param Params $params
* @param OpenApiRequest $request object of OpenApiRequest
* @param RuntimeOptions $runtime which controls some details of call api, such as retry times
*
* @throws TeaError
* @throws Exception
* @throws TeaUnableRetryError
*
* @return array the response
*/
public function doRequest($params, $request, $runtime)
{
$params->validate();
$request->validate();
$runtime->validate();
$_runtime = [
'timeouted' => 'retry',
'readTimeout' => Utils::defaultNumber($runtime->readTimeout, $this->_readTimeout),
'connectTimeout' => Utils::defaultNumber($runtime->connectTimeout, $this->_connectTimeout),
'httpProxy' => Utils::defaultString($runtime->httpProxy, $this->_httpProxy),
'httpsProxy' => Utils::defaultString($runtime->httpsProxy, $this->_httpsProxy),
'noProxy' => Utils::defaultString($runtime->noProxy, $this->_noProxy),
'maxIdleConns' => Utils::defaultNumber($runtime->maxIdleConns, $this->_maxIdleConns),
'retry' => [
'retryable' => $runtime->autoretry,
'maxAttempts' => Utils::defaultNumber($runtime->maxAttempts, 3),
],
'backoff' => [
'policy' => Utils::defaultString($runtime->backoffPolicy, 'no'),
'period' => Utils::defaultNumber($runtime->backoffPeriod, 1),
],
'ignoreSSL' => $runtime->ignoreSSL,
];
$_lastRequest = null;
$_lastException = null;
$_now = time();
$_retryTimes = 0;
while (Tea::allowRetry(@$_runtime['retry'], $_retryTimes, $_now)) {
if ($_retryTimes > 0) {
$_backoffTime = Tea::getBackoffTime(@$_runtime['backoff'], $_retryTimes);
if ($_backoffTime > 0) {
Tea::sleep($_backoffTime);
}
}
$_retryTimes = $_retryTimes + 1;
try {
$_request = new Request();
$_request->protocol = Utils::defaultString($this->_protocol, $params->protocol);
$_request->method = $params->method;
$_request->pathname = $params->pathname;
$_request->query = $request->query;
// endpoint is setted in product client
$_request->headers = Tea::merge([
'host' => $this->_endpoint,
'x-acs-version' => $params->version,
'x-acs-action' => $params->action,
'user-agent' => $this->getUserAgent(),
'x-acs-date' => OpenApiUtilClient::getTimestamp(),
'x-acs-signature-nonce' => Utils::getNonce(),
'accept' => 'application/json',
], $request->headers);
$signatureAlgorithm = Utils::defaultString($this->_signatureAlgorithm, 'ACS3-HMAC-SHA256');
$hashedRequestPayload = OpenApiUtilClient::hexEncode(OpenApiUtilClient::hash(Utils::toBytes(''), $signatureAlgorithm));
if (!Utils::isUnset($request->stream)) {
$tmp = Utils::readAsBytes($request->stream);
$hashedRequestPayload = OpenApiUtilClient::hexEncode(OpenApiUtilClient::hash($tmp, $signatureAlgorithm));
$_request->body = $tmp;
$_request->headers['content-type'] = 'application/octet-stream';
} else {
if (!Utils::isUnset($request->body)) {
if (Utils::equalString($params->reqBodyType, 'json')) {
$jsonObj = Utils::toJSONString($request->body);
$hashedRequestPayload = OpenApiUtilClient::hexEncode(OpenApiUtilClient::hash(Utils::toBytes($jsonObj), $signatureAlgorithm));
$_request->body = $jsonObj;
$_request->headers["content-type"] = "application/json; charset=utf-8";
} else {
$m = Utils::assertAsMap($request->body);
$formObj = OpenApiUtilClient::toForm($m);
$hashedRequestPayload = OpenApiUtilClient::hexEncode(OpenApiUtilClient::hash(Utils::toBytes($formObj), $signatureAlgorithm));
$_request->body = $formObj;
$_request->headers['content-type'] = 'application/x-www-form-urlencoded';
}
}
}
$_request->headers['x-acs-content-sha256'] = $hashedRequestPayload;
if (!Utils::equalString($params->authType, 'Anonymous')) {
$accessKeyId = $this->getAccessKeyId();
$accessKeySecret = $this->getAccessKeySecret();
$securityToken = $this->getSecurityToken();
if (!Utils::empty_($securityToken)) {
$_request->headers["x-acs-accesskey-id"] = $accessKeyId;
$_request->headers['x-acs-security-token'] = $securityToken;
}
$_request->headers['Authorization'] = OpenApiUtilClient::getAuthorization($_request, $signatureAlgorithm, $hashedRequestPayload, $accessKeyId, $accessKeySecret);
}
$_lastRequest = $_request;
$_response = Tea::send($_request, $_runtime);
if (Utils::is4xx($_response->statusCode) || Utils::is5xx($_response->statusCode)) {
$_res = Utils::readAsJSON($_response->body);
$err = Utils::assertAsMap($_res);
throw new TeaError([
'code' => '' . (string) (self::defaultAny(@$err['Code'], @$err['code'])) . '',
'message' => 'code: ' . (string) ($_response->statusCode) . ', ' . (string) (self::defaultAny(@$err['Message'], @$err['message'])) . ' request id: ' . (string) (self::defaultAny(@$err['RequestId'], @$err['requestId'])) . '',
'data' => $err,
]);
}
if (Utils::equalString($params->bodyType, 'binary')) {
$resp = [
'body' => $_response->body,
'headers' => $_response->headers,
];
return $resp;
}
if (Utils::equalString($params->bodyType, 'byte')) {
$byt = Utils::readAsBytes($_response->body);
return [
'body' => $byt,
'headers' => $_response->headers,
];
}
if (Utils::equalString($params->bodyType, 'string')) {
$str = Utils::readAsString($_response->body);
return [
'body' => $str,
'headers' => $_response->headers,
];
}
if (Utils::equalString($params->bodyType, 'json')) {
$obj = Utils::readAsJSON($_response->body);
$res = Utils::assertAsMap($obj);
return [
'body' => $res,
'headers' => $_response->headers,
];
}
if (Utils::equalString($params->bodyType, 'array')) {
$arr = Utils::readAsJSON($_response->body);
return [
'body' => $arr,
'headers' => $_response->headers,
];
}
return [
'headers' => $_response->headers,
];
} catch (Exception $e) {
if (!($e instanceof TeaError)) {
$e = new TeaError([], $e->getMessage(), $e->getCode(), $e);
}
if (Tea::isRetryable($e)) {
$_lastException = $e;
continue;
}
throw $e;
}
}
throw new TeaUnableRetryError($_lastRequest, $_lastException);
}
/**
* @param Params $params
* @param OpenApiRequest $request
* @param RuntimeOptions $runtime
*
* @throws TeaError
*
* @return array
*/
public function callApi($params, $request, $runtime)
{
if (Utils::isUnset($params)) {
throw new TeaError([
'code' => 'ParameterMissing',
'message' => "'params' can not be unset",
]);
}
if (Utils::isUnset($this->_signatureAlgorithm) || !Utils::equalString($this->_signatureAlgorithm, 'v2')) {
return $this->doRequest($params, $request, $runtime);
}
if (Utils::equalString($params->style, 'ROA') && Utils::equalString($params->reqBodyType, 'json')) {
return $this->doROARequest($params->action, $params->version, $params->protocol, $params->method, $params->authType, $params->pathname, $params->bodyType, $request, $runtime);
}
if (Utils::equalString($params->style, 'ROA')) {
return $this->doROARequestWithForm($params->action, $params->version, $params->protocol, $params->method, $params->authType, $params->pathname, $params->bodyType, $request, $runtime);
}
return $this->doRPCRequest($params->action, $params->version, $params->protocol, $params->method, $params->authType, $params->bodyType, $request, $runtime);
}
/**
* Get user agent.
*
* @return string user agent
*/
public function getUserAgent()
{
return Utils::getUserAgent($this->_userAgent);
}
/**
* Get accesskey id by using credential.
*
* @return string accesskey id
*/
public function getAccessKeyId()
{
if (Utils::isUnset($this->_credential)) {
return '';
}
return $this->_credential->getAccessKeyId();
}
/**
* Get accesskey secret by using credential.
*
* @return string accesskey secret
*/
public function getAccessKeySecret()
{
if (Utils::isUnset($this->_credential)) {
return '';
}
return $this->_credential->getAccessKeySecret();
}
/**
* Get security token by using credential.
*
* @return string security token
*/
public function getSecurityToken()
{
if (Utils::isUnset($this->_credential)) {
return '';
}
return $this->_credential->getSecurityToken();
}
/**
* If inputValue is not null, return it or return defaultValue.
*
* @param mixed $inputValue users input value
* @param mixed $defaultValue default value
*
* @return any the final result
*/
public static function defaultAny($inputValue, $defaultValue)
{
if (Utils::isUnset($inputValue)) {
return $defaultValue;
}
return $inputValue;
}
/**
* If the endpointRule and config.endpoint are empty, throw error.
*
* @param \Darabonba\OpenApi\Models\Config $config config contains the necessary information to create a client
*
* @throws TeaError
*/
public function checkConfig($config)
{
if (Utils::empty_($this->_endpointRule) && Utils::empty_($config->endpoint)) {
throw new TeaError([
'code' => 'ParameterMissing',
'message' => "'config.endpoint' can not be empty",
]);
}
}
/**
* set RPC header for debug.
*
* @param string[] $headers headers for debug, this header can be used only once
*/
public function setRpcHeaders($headers)
{
$this->_headers = $headers;
}
/**
* get RPC header for debug.
*
* @return array
*/
public function getRpcHeaders()
{
$headers = $this->_headers;
$this->_headers = null;
return $headers;
}
}