Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Поддержка нового протокола (ecom) #29

Closed
custanator opened this issue Oct 8, 2023 · 20 comments · Fixed by #30
Closed

Поддержка нового протокола (ecom) #29

custanator opened this issue Oct 8, 2023 · 20 comments · Fixed by #30

Comments

@custanator
Copy link

Сбербанк переходит на свое решение
Доки
https://ecomtest.sberbank.ru/doc
Методы максимально совместимы но со своими отличиями
На базе вашей библиотеки я смастерил свой
https://github.com/custanator/sberbank-ecom-acquiring-client
Будет ли поддержка в вашей библиотеке?

@voronkovich
Copy link
Owner

@custanator, пока не знаю. А вы пробовали свой вариант? В принципе, если нужно только использовать application/json вместо application/x-www-form-urlencoded, то такую поддержку добавить можно. Или есть ещё какие-то изменения?

@custanator
Copy link
Author

Да, мой вариант работает.
Из того что бросилось в глаза:

  • Только метод POST и все в json
  • Более строгая валидация на их стороне, не тот тип данных или лишнее поле - ошибка
  • Currency теперь String
  • Номер заказа только String
  • Многие поля убраны (с ними ошибки)

@voronkovich
Copy link
Owner

@custanator, благодарю за детали! Полагаю, в таком случае поддержку нового протокола можно добавить.

@voronkovich voronkovich changed the title Сбербанк выкатил свое решение Поддержка нового протокола (ecom) Oct 16, 2023
@voronkovich
Copy link
Owner

@custanator, я сделал пулл-реквест с поддержкой нового протокола: #30. Посмотрите, если будет время. Буду рад замечаниям и предложениям.

@custanator
Copy link
Author

Выглядит супер!
Единственное наверно стоит реализовать все методы из документации. (Раз уж это библиотека =) )
МирПэй, работа с 3DS и прочее.
На проде пока проверить не могу. Как смогу - отпишусь

@voronkovich
Copy link
Owner

@custanator, остальные методы я решил добавить в отдельных пулл-реквестах. В большинстве своём они являются просто обёртками над execute(). И скорее всего я это сделаю уже в версии 3.0, в которой новый протокол будет влючён по умолчанию. Спасибо за отзыв!

@custanator
Copy link
Author

unBindCard.do -> unbindCard.do
¯_(ツ)_/¯

@voronkovich
Copy link
Owner

@custanator, спасибо, поправил.

@antonpresn
Copy link

@voronkovich Здравствуйте! Можете сказать когда планируется запуск версии 3.0 ?

@voronkovich
Copy link
Owner

@antonpresn, по видимому, никогда. Сбербанк закрывает свой эквайринг.

Т.к. само решение для Сбербанка предоставляла компания RBS Payments, я планирую просто создать новый пакет rbs-payments-client и перенести в него код с небольшими изменениями, чтобы он не был привязан к конкретному банку.

@Amirsz01
Copy link

if ($rest && !$this->ecom) {
    $headers['Content-Type'] = 'application/x-www-form-urlencoded';
    if (null !== $this->token) {
        $data['token'] = $this->token;
    } else {
        $data['userName'] = $this->userName;
        $data['password'] = $this->password;
    }
    $data = \http_build_query($data, '', '&');
} else {
    $headers['Content-Type'] = 'application/json';
    $data = \json_encode($data);
    $method = HttpClientInterface::METHOD_POST;
}

@voronkovich Привет. В случае если ecom = true, то userName и password не попадают в $data. Можешь поправить?

@voronkovich
Copy link
Owner

@Amirsz01, поправил.

@zzlyns
Copy link

zzlyns commented Sep 16, 2024

Информацию ни про какое закрытие эквайринга мы не получали и про перевод в ЮМоней тоже.
Сбербанк по новому протоколу ecom свой прямой шлюз запустил и перевел нас на него с 01.09.2024.
Адреса:
Тестовая среда: https://ecomtest.sberbank.ru/...
Боевая среда: https://ecommerce.sberbank.ru/...

Ссылку на документацию кидали выше.
Поэтому, если есть возможность внести изменения - были бы благодарны =)

Заранее спасибо.

@voronkovich
Copy link
Owner

@zzlyns, PR давно готов: #30 Если есть возможность - проверьте и напишите что всё работает. Я тогда его приму и выпущу новую версию пакета.

@zzlyns
Copy link

zzlyns commented Sep 16, 2024

@zzlyns, PR давно готов: #30 Если есть возможность - проверьте и напишите что всё работает. Я тогда его приму и выпущу новую версию пакета.

Да, на неделе постараюсь проверить и сообщу. Благодарю!

@zzlyns
Copy link

zzlyns commented Sep 18, 2024

При возврате errorCode отличным от 0, падает в Fatal error. В данном случае обращение к методу register.do
попытка зарегистрировать заказ с номером, который уже был.

PHP Fatal error: Uncaught Voronkovich\SberbankAcquiring\Exception\ActionException: Заказ с таким номером уже обработан in /home/serg/vendor/voronkovich/sberbank-acquiring-client/src/Client.php:830
Stack trace:
#0 /home/serg/vendor/voronkovich/sberbank-acquiring-client/src/Client.php(763): Voronkovich\SberbankAcquiring\Client->handleErrors()
#1 /home/serg/vendor/voronkovich/sberbank-acquiring-client/src/Client.php(312): Voronkovich\SberbankAcquiring\Client->execute()
#2 /home/serg/vendor/voronkovich/sberbank-acquiring-client/src/Client.php(232): Voronkovich\SberbankAcquiring\Client->doRegisterOrder()
#3 /home/serg/test.php(26): Voronkovich\SberbankAcquiring\Client->registerOrder()
#4 {main}
thrown in /home/serg/vendor/voronkovich/sberbank-acquiring-client/src/Client.php on line 830

$response
array(2) { ["errorCode"]=> string(1) "1" ["errorMessage"]=> string(65) "Заказ с таким номером уже обработан" }

@voronkovich
Copy link
Owner

@zzlyns, тут всё в порядке. Когда шлюз Сбербанка возвращает ошибку, библиотека бросает исключение ActionException. В документации я это не описывал, но код должен быть примерно таким:

use Voronkovich\SberbankAcquiring\Client;
use Voronkovich\SberbankAcquiring\Exception\SberbankAcquiringException;

$client = new Client();

try {
    $result = $client->registerOrder($orderId, $orderAmount, $returnUrl, $params);
} catch (SberbankAcquiringException $e) {
    // Обработка исключения
}

@zzlyns
Copy link

zzlyns commented Sep 18, 2024

Олег, пока проблем по ecom нет. Правда я могу проверить только регистрацию заказа, отмена, статус и т.п. работу с заказом. С другими методами мы не работаем. Возможно пока.
Единственное что, если есть возможность, то добавить работу с методом setPermanentPassword - https://ecomtest.sberbank.ru/doc#tag/changePasswordServices
Сейчас когда сбер выдает боевые данные для мерчанта, то требуется обязательная смена пароля на новый постоянный. Я понимаю, что эта функция не будет постоянно пользоваться спросом, одноразовая, но все равно наверное было бы удобно. Особенно когда периодически добавляются новые мерчанты.

@voronkovich
Copy link
Owner

@zzlyns, возвожности добавить setPermanentPassword пока нет т.к. класс Client при создании уже требует текущий пароль, который передаётся в каждом запросе к шлюзу в поле password.
Раньше сменить пароль на постоянный требовалось при самом первом входе в личный кабинет. Полагаю сейчас всё работает также.
Раз всё работает, то я приму PR в течение текущей недели и выпущу новыую версию 2.9.
Благодарю за помощь с тестированием!

@zzlyns
Copy link

zzlyns commented Sep 18, 2024

Личного кабинета по интернет-эквайрингу больше нет, сбербанк все привязал к кабинету Сбербанк-Бизнес.
А пароль дается временный при получении данных, который и требуется сразу сменить перед работой.
Спасибо в любом случае!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

5 participants