From 75160b12821f7f4299cce7f0b69c83c1502ae071 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anton=20Luka=20=C5=A0ijanec?= Date: Mon, 27 May 2024 13:08:29 +0200 Subject: 2024-02-19 upstream --- vendor/stripe/stripe-php/lib/BaseStripeClient.php | 581 ++++++++++++---------- 1 file changed, 312 insertions(+), 269 deletions(-) (limited to 'vendor/stripe/stripe-php/lib/BaseStripeClient.php') diff --git a/vendor/stripe/stripe-php/lib/BaseStripeClient.php b/vendor/stripe/stripe-php/lib/BaseStripeClient.php index 5499fe3..f4de154 100644 --- a/vendor/stripe/stripe-php/lib/BaseStripeClient.php +++ b/vendor/stripe/stripe-php/lib/BaseStripeClient.php @@ -1,269 +1,312 @@ - */ - private $config; - - /** @var \Stripe\Util\RequestOptions */ - private $defaultOpts; - - /** - * Initializes a new instance of the {@link BaseStripeClient} class. - * - * The constructor takes a single argument. The argument can be a string, in which case it - * should be the API key. It can also be an array with various configuration settings. - * - * Configuration settings include the following options: - * - * - api_key (null|string): the Stripe API key, to be used in regular API requests. - * - client_id (null|string): the Stripe client ID, to be used in OAuth requests. - * - stripe_account (null|string): a Stripe account ID. If set, all requests sent by the client - * will automatically use the {@code Stripe-Account} header with that account ID. - * - stripe_version (null|string): a Stripe API verion. If set, all requests sent by the client - * will include the {@code Stripe-Version} header with that API version. - * - * The following configuration settings are also available, though setting these should rarely be necessary - * (only useful if you want to send requests to a mock server like stripe-mock): - * - * - api_base (string): the base URL for regular API requests. Defaults to - * {@link DEFAULT_API_BASE}. - * - connect_base (string): the base URL for OAuth requests. Defaults to - * {@link DEFAULT_CONNECT_BASE}. - * - files_base (string): the base URL for file creation requests. Defaults to - * {@link DEFAULT_FILES_BASE}. - * - * @param array|string $config the API key as a string, or an array containing - * the client configuration settings - */ - public function __construct($config = []) - { - if (\is_string($config)) { - $config = ['api_key' => $config]; - } elseif (!\is_array($config)) { - throw new \Stripe\Exception\InvalidArgumentException('$config must be a string or an array'); - } - - $config = \array_merge($this->getDefaultConfig(), $config); - $this->validateConfig($config); - - $this->config = $config; - - $this->defaultOpts = \Stripe\Util\RequestOptions::parse([ - 'stripe_account' => $config['stripe_account'], - 'stripe_version' => $config['stripe_version'], - ]); - } - - /** - * Gets the API key used by the client to send requests. - * - * @return null|string the API key used by the client to send requests - */ - public function getApiKey() - { - return $this->config['api_key']; - } - - /** - * Gets the client ID used by the client in OAuth requests. - * - * @return null|string the client ID used by the client in OAuth requests - */ - public function getClientId() - { - return $this->config['client_id']; - } - - /** - * Gets the base URL for Stripe's API. - * - * @return string the base URL for Stripe's API - */ - public function getApiBase() - { - return $this->config['api_base']; - } - - /** - * Gets the base URL for Stripe's OAuth API. - * - * @return string the base URL for Stripe's OAuth API - */ - public function getConnectBase() - { - return $this->config['connect_base']; - } - - /** - * Gets the base URL for Stripe's Files API. - * - * @return string the base URL for Stripe's Files API - */ - public function getFilesBase() - { - return $this->config['files_base']; - } - - /** - * Sends a request to Stripe's API. - * - * @param string $method the HTTP method - * @param string $path the path of the request - * @param array $params the parameters of the request - * @param array|\Stripe\Util\RequestOptions $opts the special modifiers of the request - * - * @return \Stripe\StripeObject the object returned by Stripe's API - */ - public function request($method, $path, $params, $opts) - { - $opts = $this->defaultOpts->merge($opts, true); - $baseUrl = $opts->apiBase ?: $this->getApiBase(); - $requestor = new \Stripe\ApiRequestor($this->apiKeyForRequest($opts), $baseUrl); - list($response, $opts->apiKey) = $requestor->request($method, $path, $params, $opts->headers); - $opts->discardNonPersistentHeaders(); - $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); - $obj->setLastResponse($response); - - return $obj; - } - - /** - * Sends a request to Stripe's API. - * - * @param string $method the HTTP method - * @param string $path the path of the request - * @param array $params the parameters of the request - * @param array|\Stripe\Util\RequestOptions $opts the special modifiers of the request - * - * @return \Stripe\Collection of ApiResources - */ - public function requestCollection($method, $path, $params, $opts) - { - $obj = $this->request($method, $path, $params, $opts); - if (!($obj instanceof \Stripe\Collection)) { - $received_class = \get_class($obj); - $msg = "Expected to receive `Stripe\\Collection` object from Stripe API. Instead received `{$received_class}`."; - - throw new \Stripe\Exception\UnexpectedValueException($msg); - } - $obj->setFilters($params); - - return $obj; - } - - /** - * @param \Stripe\Util\RequestOptions $opts - * - * @throws \Stripe\Exception\AuthenticationException - * - * @return string - */ - private function apiKeyForRequest($opts) - { - $apiKey = $opts->apiKey ?: $this->getApiKey(); - - if (null === $apiKey) { - $msg = 'No API key provided. Set your API key when constructing the ' - . 'StripeClient instance, or provide it on a per-request basis ' - . 'using the `api_key` key in the $opts argument.'; - - throw new \Stripe\Exception\AuthenticationException($msg); - } - - return $apiKey; - } - - /** - * TODO: replace this with a private constant when we drop support for PHP < 5. - * - * @return array - */ - private function getDefaultConfig() - { - return [ - 'api_key' => null, - 'client_id' => null, - 'stripe_account' => null, - 'stripe_version' => null, - 'api_base' => self::DEFAULT_API_BASE, - 'connect_base' => self::DEFAULT_CONNECT_BASE, - 'files_base' => self::DEFAULT_FILES_BASE, - ]; - } - - /** - * @param array $config - * - * @throws \Stripe\Exception\InvalidArgumentException - */ - private function validateConfig($config) - { - // api_key - if (null !== $config['api_key'] && !\is_string($config['api_key'])) { - throw new \Stripe\Exception\InvalidArgumentException('api_key must be null or a string'); - } - - if (null !== $config['api_key'] && ('' === $config['api_key'])) { - $msg = 'api_key cannot be the empty string'; - - throw new \Stripe\Exception\InvalidArgumentException($msg); - } - - if (null !== $config['api_key'] && (\preg_match('/\s/', $config['api_key']))) { - $msg = 'api_key cannot contain whitespace'; - - throw new \Stripe\Exception\InvalidArgumentException($msg); - } - - // client_id - if (null !== $config['client_id'] && !\is_string($config['client_id'])) { - throw new \Stripe\Exception\InvalidArgumentException('client_id must be null or a string'); - } - - // stripe_account - if (null !== $config['stripe_account'] && !\is_string($config['stripe_account'])) { - throw new \Stripe\Exception\InvalidArgumentException('stripe_account must be null or a string'); - } - - // stripe_version - if (null !== $config['stripe_version'] && !\is_string($config['stripe_version'])) { - throw new \Stripe\Exception\InvalidArgumentException('stripe_version must be null or a string'); - } - - // api_base - if (!\is_string($config['api_base'])) { - throw new \Stripe\Exception\InvalidArgumentException('api_base must be a string'); - } - - // connect_base - if (!\is_string($config['connect_base'])) { - throw new \Stripe\Exception\InvalidArgumentException('connect_base must be a string'); - } - - // files_base - if (!\is_string($config['files_base'])) { - throw new \Stripe\Exception\InvalidArgumentException('files_base must be a string'); - } - - // check absence of extra keys - $extraConfigKeys = \array_diff(\array_keys($config), \array_keys($this->getDefaultConfig())); - if (!empty($extraConfigKeys)) { - // Wrap in single quote to more easily catch trailing spaces errors - $invalidKeys = "'" . \implode("', '", $extraConfigKeys) . "'"; - - throw new \Stripe\Exception\InvalidArgumentException('Found unknown key(s) in configuration array: ' . $invalidKeys); - } - } -} + */ + private $config; + + /** @var \Stripe\Util\RequestOptions */ + private $defaultOpts; + + /** + * Initializes a new instance of the {@link BaseStripeClient} class. + * + * The constructor takes a single argument. The argument can be a string, in which case it + * should be the API key. It can also be an array with various configuration settings. + * + * Configuration settings include the following options: + * + * - api_key (null|string): the Stripe API key, to be used in regular API requests. + * - client_id (null|string): the Stripe client ID, to be used in OAuth requests. + * - stripe_account (null|string): a Stripe account ID. If set, all requests sent by the client + * will automatically use the {@code Stripe-Account} header with that account ID. + * - stripe_version (null|string): a Stripe API verion. If set, all requests sent by the client + * will include the {@code Stripe-Version} header with that API version. + * + * The following configuration settings are also available, though setting these should rarely be necessary + * (only useful if you want to send requests to a mock server like stripe-mock): + * + * - api_base (string): the base URL for regular API requests. Defaults to + * {@link DEFAULT_API_BASE}. + * - connect_base (string): the base URL for OAuth requests. Defaults to + * {@link DEFAULT_CONNECT_BASE}. + * - files_base (string): the base URL for file creation requests. Defaults to + * {@link DEFAULT_FILES_BASE}. + * + * @param array|string $config the API key as a string, or an array containing + * the client configuration settings + */ + public function __construct($config = []) + { + if (\is_string($config)) { + $config = ['api_key' => $config]; + } elseif (!\is_array($config)) { + throw new \Stripe\Exception\InvalidArgumentException('$config must be a string or an array'); + } + + $config = \array_merge($this->getDefaultConfig(), $config); + $this->validateConfig($config); + + $this->config = $config; + + $this->defaultOpts = \Stripe\Util\RequestOptions::parse([ + 'stripe_account' => $config['stripe_account'], + 'stripe_version' => $config['stripe_version'], + ]); + } + + /** + * Gets the API key used by the client to send requests. + * + * @return null|string the API key used by the client to send requests + */ + public function getApiKey() + { + return $this->config['api_key']; + } + + /** + * Gets the client ID used by the client in OAuth requests. + * + * @return null|string the client ID used by the client in OAuth requests + */ + public function getClientId() + { + return $this->config['client_id']; + } + + /** + * Gets the base URL for Stripe's API. + * + * @return string the base URL for Stripe's API + */ + public function getApiBase() + { + return $this->config['api_base']; + } + + /** + * Gets the base URL for Stripe's OAuth API. + * + * @return string the base URL for Stripe's OAuth API + */ + public function getConnectBase() + { + return $this->config['connect_base']; + } + + /** + * Gets the base URL for Stripe's Files API. + * + * @return string the base URL for Stripe's Files API + */ + public function getFilesBase() + { + return $this->config['files_base']; + } + + /** + * Sends a request to Stripe's API. + * + * @param string $method the HTTP method + * @param string $path the path of the request + * @param array $params the parameters of the request + * @param array|\Stripe\Util\RequestOptions $opts the special modifiers of the request + * + * @return \Stripe\StripeObject the object returned by Stripe's API + */ + public function request($method, $path, $params, $opts) + { + $opts = $this->defaultOpts->merge($opts, true); + $baseUrl = $opts->apiBase ?: $this->getApiBase(); + $requestor = new \Stripe\ApiRequestor($this->apiKeyForRequest($opts), $baseUrl); + list($response, $opts->apiKey) = $requestor->request($method, $path, $params, $opts->headers); + $opts->discardNonPersistentHeaders(); + $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts); + $obj->setLastResponse($response); + + return $obj; + } + + /** + * Sends a request to Stripe's API, passing chunks of the streamed response + * into a user-provided $readBodyChunkCallable callback. + * + * @param string $method the HTTP method + * @param string $path the path of the request + * @param callable $readBodyChunkCallable a function that will be called + * @param array $params the parameters of the request + * @param array|\Stripe\Util\RequestOptions $opts the special modifiers of the request + * with chunks of bytes from the body if the request is successful + */ + public function requestStream($method, $path, $readBodyChunkCallable, $params, $opts) + { + $opts = $this->defaultOpts->merge($opts, true); + $baseUrl = $opts->apiBase ?: $this->getApiBase(); + $requestor = new \Stripe\ApiRequestor($this->apiKeyForRequest($opts), $baseUrl); + list($response, $opts->apiKey) = $requestor->requestStream($method, $path, $readBodyChunkCallable, $params, $opts->headers); + } + + /** + * Sends a request to Stripe's API. + * + * @param string $method the HTTP method + * @param string $path the path of the request + * @param array $params the parameters of the request + * @param array|\Stripe\Util\RequestOptions $opts the special modifiers of the request + * + * @return \Stripe\Collection of ApiResources + */ + public function requestCollection($method, $path, $params, $opts) + { + $obj = $this->request($method, $path, $params, $opts); + if (!($obj instanceof \Stripe\Collection)) { + $received_class = \get_class($obj); + $msg = "Expected to receive `Stripe\\Collection` object from Stripe API. Instead received `{$received_class}`."; + + throw new \Stripe\Exception\UnexpectedValueException($msg); + } + $obj->setFilters($params); + + return $obj; + } + + /** + * Sends a request to Stripe's API. + * + * @param string $method the HTTP method + * @param string $path the path of the request + * @param array $params the parameters of the request + * @param array|\Stripe\Util\RequestOptions $opts the special modifiers of the request + * + * @return \Stripe\SearchResult of ApiResources + */ + public function requestSearchResult($method, $path, $params, $opts) + { + $obj = $this->request($method, $path, $params, $opts); + if (!($obj instanceof \Stripe\SearchResult)) { + $received_class = \get_class($obj); + $msg = "Expected to receive `Stripe\\SearchResult` object from Stripe API. Instead received `{$received_class}`."; + + throw new \Stripe\Exception\UnexpectedValueException($msg); + } + $obj->setFilters($params); + + return $obj; + } + + /** + * @param \Stripe\Util\RequestOptions $opts + * + * @throws \Stripe\Exception\AuthenticationException + * + * @return string + */ + private function apiKeyForRequest($opts) + { + $apiKey = $opts->apiKey ?: $this->getApiKey(); + + if (null === $apiKey) { + $msg = 'No API key provided. Set your API key when constructing the ' + . 'StripeClient instance, or provide it on a per-request basis ' + . 'using the `api_key` key in the $opts argument.'; + + throw new \Stripe\Exception\AuthenticationException($msg); + } + + return $apiKey; + } + + /** + * TODO: replace this with a private constant when we drop support for PHP < 5. + * + * @return array + */ + private function getDefaultConfig() + { + return [ + 'api_key' => null, + 'client_id' => null, + 'stripe_account' => null, + 'stripe_version' => null, + 'api_base' => self::DEFAULT_API_BASE, + 'connect_base' => self::DEFAULT_CONNECT_BASE, + 'files_base' => self::DEFAULT_FILES_BASE, + ]; + } + + /** + * @param array $config + * + * @throws \Stripe\Exception\InvalidArgumentException + */ + private function validateConfig($config) + { + // api_key + if (null !== $config['api_key'] && !\is_string($config['api_key'])) { + throw new \Stripe\Exception\InvalidArgumentException('api_key must be null or a string'); + } + + if (null !== $config['api_key'] && ('' === $config['api_key'])) { + $msg = 'api_key cannot be the empty string'; + + throw new \Stripe\Exception\InvalidArgumentException($msg); + } + + if (null !== $config['api_key'] && (\preg_match('/\s/', $config['api_key']))) { + $msg = 'api_key cannot contain whitespace'; + + throw new \Stripe\Exception\InvalidArgumentException($msg); + } + + // client_id + if (null !== $config['client_id'] && !\is_string($config['client_id'])) { + throw new \Stripe\Exception\InvalidArgumentException('client_id must be null or a string'); + } + + // stripe_account + if (null !== $config['stripe_account'] && !\is_string($config['stripe_account'])) { + throw new \Stripe\Exception\InvalidArgumentException('stripe_account must be null or a string'); + } + + // stripe_version + if (null !== $config['stripe_version'] && !\is_string($config['stripe_version'])) { + throw new \Stripe\Exception\InvalidArgumentException('stripe_version must be null or a string'); + } + + // api_base + if (!\is_string($config['api_base'])) { + throw new \Stripe\Exception\InvalidArgumentException('api_base must be a string'); + } + + // connect_base + if (!\is_string($config['connect_base'])) { + throw new \Stripe\Exception\InvalidArgumentException('connect_base must be a string'); + } + + // files_base + if (!\is_string($config['files_base'])) { + throw new \Stripe\Exception\InvalidArgumentException('files_base must be a string'); + } + + // check absence of extra keys + $extraConfigKeys = \array_diff(\array_keys($config), \array_keys($this->getDefaultConfig())); + if (!empty($extraConfigKeys)) { + // Wrap in single quote to more easily catch trailing spaces errors + $invalidKeys = "'" . \implode("', '", $extraConfigKeys) . "'"; + + throw new \Stripe\Exception\InvalidArgumentException('Found unknown key(s) in configuration array: ' . $invalidKeys); + } + } +} -- cgit v1.2.3