realexpayment-сообщение об ошибке после успешного платежа
Я использую realexpayment с membermember-5.1.5 и использую тестовый аккаунт системы realexpayment.
Когда я регистрируюсь и совершаю оплату с помощью тестовой карты, я получаю следующее сообщение, и оно не перенаправляется обратно на наш сайт:
Ваша транзакция прошла успешно, но при подключении к веб-сайту продавца возникла проблема. Пожалуйста, свяжитесь с продавцом и сообщите им, что вы получили это сообщение об ошибке.
3 ответа
Это означает, что наша страница размещенных платежей (HPP) не смогла подключиться к URL-адресу ответа, который вы нам предоставили. Этот URL указывается в HTTP POST в поле MERCHANT_RESPONSE_URL.
Это должна быть общедоступная конечная точка, чтобы наша ГЭС могла к ней подключиться. Менеджер вашего счета в Realex Payments сможет предоставить больше информации об ответе, который мы получили от вашего сервера, когда мы попытались подключиться к вашему URL-адресу ответа, если вы сможете предоставить им соответствующий идентификатор клиента и идентификатор заказа.
Лучший,
Шон МакДомхналл
Realex Payments
У меня недавно была эта проблема, и я хотел бы дать некоторые разъяснения. Realex не перенаправляет на MERCHANT_RESPONSE_URL
но вместо этого отображает его содержимое.
Кажется, он принимает базовый HTML-ответ, но не полноценный HTML-документ.
Что я сделал, чтобы вывести небольшой кусочек JavaScript на MERCHANT_RESPONSE_URL
страница для перенаправления клиента на другой URL-адрес, содержащий наше сообщение о брендинге и успехе (или ошибке):
<script>
window.location=https://example.com/success?msg=<?php echo urlencode( $msg ); ?>
</script>
Сначала я попробовал решение с JavaScript от @MrCarrot, и оно не сработало, но позже нашел другое работающее решение . Я подумал, что вместо простого комментария я упомяну несколько слов об ответе и обработке ошибок.
MERCHANT_RESPONSE_URL должен быть общедоступным (и я предполагаю, HTTPS) адресом, где ваш скрипт ожидает POST от серверов Realex. ПОСТ выглядит так:
[RESULT] => 00
[AUTHCODE] => 12345
[MESSAGE] => [ test system ] AUTHORISED
[PASREF] => 16542926167123558
[MERCHANT_ID] => merchantid
[ORDER_ID] => INV-223665
[TIMESTAMP] => 20220603224317
[AMOUNT] => 9480
[SHA1HASH] => 934138a1157dead529806e9ed5578f538e1a68c8
Теперь вам действительно нужно проверить SHA1HASH , как описано в разделе « Карточные платежи: проверка хэша » . Вам понадобится исходный TIMESTAMP, от которого был отправлен ваш запрос, MERCHANT_ID, ORDER_ID, номер RESULT, MESSAGE, PASREF и AUTHCODE. Взорвите их с точкой, так что вы получите что-то вроде
20220603224317.merchantid.INV-223665.00.[ test system ] AUTHORISED.16542926167123558.12345
и запустите на нем sha1(). Затем добавьте свой секрет
ea4dcce506c6e5ee3fbaeae212477be838733694.mySecr3t
и снова запустите sha1(), затем сравните его с ответом SHA1HASH. Только если он равен, вы должны пометить платеж как действительный и отправить заголовок ("HTTP/1.0 200 OK").
Затем вы можете перенаправить обратно с помощью приведенного выше JavaScript, и, возможно, вместо всего сообщения вы можете просто отправить этот идентификатор ошибки . Что я делаю, так это возвращаюсь на свою страницу оплаты с помощью /thanks или /error111, чтобы показать возможное сообщение об ошибке.
<script language='javascript' type='text/javascript'>
window.location.replace('https://pay.example.com/{orderId}/error{result}');
</script>