protected function setDefaultOptions(OptionsResolver $resolver)
    {
        // Если логин пользователя содержит точки и символы верхнего регистра (заглавные буквы),
        // то для получения нормализованного логина их следует заменить, соответственно, дефисами
        // и символами нижнего регистра.
        // http://api.yandex.ru/direct/doc/concepts/finance.xml#access
        $loginNormalizer = function (Options $options, $value) {
            if (is_string($value)) {
                return strtolower(str_replace('.', '-', $value));
            }

            return $value;
        };

        $invokerNormalizer = function (Options $options, $value) {
            if (null === $value) {
                return new Invoker(
                    $options['retry_max_attempts'],
                    $options['retry_factor'],
                    $options['retry_max_delay']
                );
            }

            return $value;
        };

        $resolver
            ->setRequired(['access_token'])
            ->setDefaults([
                'locale' => self::LOCALE_EN,
                'master_token' => null,
                'login' => null,
                'sandbox' => false,
                'use_operator_units' => false,
                'soap_options' => [],
                'invoker' => null,
                'retry_factor' => 1,
                'retry_max_attempts' => 3,
                'retry_max_delay' => 60,
            ])
            ->setAllowedValues('locale', [self::LOCALE_EN, self::LOCALE_RU, self::LOCALE_UA])
            ->setAllowedTypes('master_token', ['null', 'string'])
            ->setAllowedTypes('login', ['null', 'string'])
            ->setAllowedTypes('access_token', 'string')
            ->setAllowedTypes('sandbox', 'bool')
            ->setAllowedTypes('use_operator_units', 'bool')
            ->setAllowedTypes('invoker', ['null', 'callable'])
            ->setAllowedTypes('retry_factor', 'int')
            ->setAllowedTypes('retry_max_attempts', 'int')
            ->setAllowedTypes('retry_max_delay', ['int', 'float'])
            ->setNormalizer('login', $loginNormalizer)
            ->setNormalizer('invoker', $invokerNormalizer);
    }