voronkovich / sberbank-acquiring-client

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

Ошибка с кодом ответа #11

Closed custanator closed 4 weeks ago

custanator commented 5 years ago

При оплате через связки (привязанная карта = bindings) и когда возникает ошибка шлюз отвечает вот таким вот образом: Array ( [error] => Операция отклонена. Проверьте введенные данные, достаточность средств на карте и повторите операцию.
[errorCode] => 0 [is3DSVer2] => [processingErrorType] => CLIENT_ERROR [errorMessage] => Операция отклонена. Проверьте введенные данные, достаточность средств на карте и повторите операцию.
)

Заметьте что [errorCode] => 0 и библиотека ошибку не замечает.

voronkovich commented 5 years ago

@custanator, печальное зрелище :). В документации о коде 0 сказано:

0 Обработка запроса прошла без системных ошибок.

Я не очень представляю как выловить эту ошибку, которая с точки зрения документации ошибкой не является. У вас есть идеи?

custanator commented 5 years ago

Ответ Сбера по этому поводу: "в данном случае 0 - это лишь указание на успешную обработку запроса, результат отображен в error" У себя я сделал следующим образом: первым делом в разборе ответа смотрю наличие параметра error. Дальше уже смотрю на errorCode

custanator commented 5 years ago

private function handleErrors(array &$response) { // Server's response can contain an error code and an error message in differend fields. // Есть случай когда есть ошибка но код = 0 if (isset($response['error'])) { $errorCode = self::ACTION_ERROR; } elseif (isset($response['errorCode'])) { $errorCode = (int) $response['errorCode']; } elseif (isset($response['ErrorCode'])) { $errorCode = (int) $response['ErrorCode']; } elseif (isset($response['error']['code'])) { $errorCode = (int) $response['error']['code']; } else { $errorCode = self::ACTION_SUCCESS; }

voronkovich commented 5 years ago

@custanator, Спасибо за сообщение, но я думаю что в ближайшее время не смогу исправить эту ошибку. Проблема в том, что для некоторых запросов Сбербанк добавляет в ответ поля errorMessage, error и т .д. которые содержат текст наподобии Запрос обработан успешно. Т.е. они добавляют поле с текстом ошибки, даже если ошибки нет. Поэтому, по наличию поля errorMessage нельзя определить точно - была ли ошибка на самом деле.