voronkovich / sberbank-acquiring-client

PHP client for Sberbank and Alphabank acquiring REST APIs
MIT License
190 stars 55 forks source link

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

Closed custanator closed 4 weeks ago

custanator commented 1 year ago

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

voronkovich commented 1 year ago

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

custanator commented 1 year ago

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

voronkovich commented 1 year ago

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

voronkovich commented 1 year ago

@custanator, я сделал пулл-реквест с поддержкой нового протокола: https://github.com/voronkovich/sberbank-acquiring-client/pull/30. Посмотрите, если будет время. Буду рад замечаниям и предложениям.

custanator commented 12 months ago

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

voronkovich commented 12 months ago

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

custanator commented 11 months ago

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

voronkovich commented 11 months ago

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

antonpresn commented 9 months ago

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

voronkovich commented 9 months ago

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

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

Amirsz01 commented 4 months ago
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 commented 4 months ago

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

zzlyns commented 1 month ago

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

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

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

voronkovich commented 1 month ago

@zzlyns, PR давно готов: https://github.com/voronkovich/sberbank-acquiring-client/pull/30 Если есть возможность - проверьте и напишите что всё работает. Я тогда его приму и выпущу новую версию пакета.

zzlyns commented 1 month ago

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

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

zzlyns commented 1 month ago

При возврате 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 commented 1 month ago

@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 commented 1 month ago

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

voronkovich commented 1 month ago

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

zzlyns commented 1 month ago

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