sberbank-acquiring-client
sberbank-acquiring-client copied to clipboard
Ошибка с кодом ответа
При оплате через связки (привязанная карта = bindings) и когда возникает ошибка шлюз отвечает вот таким вот образом:
Array
(
[error] => Операция отклонена. Проверьте введенные данные, достаточность средств на карте и повторите операцию.
[errorCode] => 0
[is3DSVer2] =>
[processingErrorType] => CLIENT_ERROR
[errorMessage] => Операция отклонена. Проверьте введенные данные, достаточность средств на карте и повторите операцию.
)
Заметьте что [errorCode] => 0 и библиотека ошибку не замечает.
@custanator, печальное зрелище :). В документации о коде 0
сказано:
0 Обработка запроса прошла без системных ошибок.
Я не очень представляю как выловить эту ошибку, которая с точки зрения документации ошибкой не является. У вас есть идеи?
Ответ Сбера по этому поводу: "в данном случае 0 - это лишь указание на успешную обработку запроса, результат отображен в error" У себя я сделал следующим образом: первым делом в разборе ответа смотрю наличие параметра error. Дальше уже смотрю на errorCode
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; }
@custanator, Спасибо за сообщение, но я думаю что в ближайшее время не смогу исправить эту ошибку. Проблема в том, что для некоторых запросов Сбербанк добавляет в ответ поля errorMessage
, error
и т .д. которые содержат текст наподобии Запрос обработан успешно
. Т.е. они добавляют поле с текстом ошибки, даже если ошибки нет. Поэтому, по наличию поля errorMessage
нельзя определить точно - была ли ошибка на самом деле.