Opencart 2.0.1.1 - 'Status=INVALID StatusDetail=Не может сопоставить хэш MD5. Порядок может быть нарушен.

Мы пытаемся использовать функциональность сервера SagePay внутри Opencart, при совершении покупки по этому маршруту (и выборе PayPal) мы получаем этот ответ об ошибке:

Status=INVALID StatusDetail= Cannot match the MD5 Hash. Order might be tampered with.

Это происходит в строке 346 в /catalog/controller/payment/sagepay_server.php.

Обратите внимание, транзакция все еще на самом деле успешна, но просто пользователь не возвращается обратно на сайт должным образом. Экран, который видит пользователь, показывает:

Ошибка сервера 5006: невозможно перенаправить на веб-сайт поставщика. Поставщик не смог предоставить RedirectionURL.

Кто-нибудь сталкивался с этой ошибкой раньше? Существует много информации об ошибке 5006, но похоже, что путь нашей проблемы заключается в том, что хэш MD5 не соответствует.

Любая помощь приветствуется!


person user3767977    schedule 02.09.2016    source источник


Ответы (2)


Подпись VPSSignature, которую вы создаете с помощью хэша MD5, должна совпадать с подписью VPSSignature, созданной Sage Pay. Убедитесь, что информация, возвращаемая Sage Pay, совпадает с содержимым строки, но через хэш MD5.

person Neil Collier    schedule 05.09.2016
comment
Спасибо за ваш ответ. Как я могу отладить это? SagePay не будет отправлять сообщения на наш сайт, поэтому я не знаю, как сравнить строки. Кроме того, похоже, что один и тот же код отвечает за другие типы транзакций (например, кредитные карты и т. д.) — и с ними проблем нет. Все они перенаправляют нормально. - person user3767977; 07.09.2016
comment
С транзакциями Pay Pal Sage Pay будет возвращать дополнительные поля, такие как AddressStatus и PayerStatus, которые не возвращаются для других типов карт. - person Neil Collier; 08.09.2016
comment
Sage Pay вернет строку и VPSSignature обратно в NotificationURL. Если вы не получаете это, то это указывает на другую проблему. - person Neil Collier; 08.09.2016

Проверьте, используете ли вы расширение безопасности Suhosin, так как для параметра suhosin.get.max_value_length по умолчанию установлено значение 512. Поскольку хэш md5 передается в URL-адресе, если общее количество символов URL-адреса превышает 512, он усекается, что приводит к несоответствию строки.

person jtaylor69    schedule 07.09.2016
comment
Спасибо за ваше предложение. Однако похоже, что Сухосин не используется. - person user3767977; 07.09.2016