“您的交易已成功完成,但与商家网站连接时出现问题。请联系商家并告知他们您收到了此错误消息。”
我最近遇到了这个问题,想提供一些澄清。Realex不会重定向到MERCHANT_RESPONSE_URL
,而是显示它的内容。
它似乎接受基本的HTML响应,但不是完整的HTML文档。
我的做法是在MERCHANT_RESPONSE_URL
页面输出一小段JavaScript代码,将客户重定向到包含我们品牌和成功(或错误)消息的不同网址:
<script>
window.location=https://example.com/success?msg=<?php echo urlencode( $msg ); ?>
</script>
我先尝试了@MrCarrot的JavaScript解决方案,但它没有起作用,后来找到了另一个可行的解决方案。我认为,除了评论之外,我还应该提及一些关于响应和错误处理的细节。
MERCHANT_RESPONSE_URL需要是一个公共地址(我假设是HTTPS),您的脚本在那里等待Realex服务器的POST请求。POST请求如下:
[RESULT] => 00
[AUTHCODE] => 12345
[MESSAGE] => [ test system ] AUTHORISED
[PASREF] => 16542926167123558
[MERCHANT_ID] => merchantid
[ORDER_ID] => INV-223665
[TIMESTAMP] => 20220603224317
[AMOUNT] => 9480
[SHA1HASH] => 934138a1157dead529806e9ed5578f538e1a68c8
现在你应该按照卡支付:检查哈希中描述的方式检查SHA1HASH。您需要原始时间戳、商户ID、订单ID、结果编号、消息、PASREF和AUTHCODE。将它们用句号连接起来,就会得到类似以下的内容:
20220603224317.merchantid.INV-223665.00.[测试系统]已授权。16542926167123558.12345
然后对其运行sha1()。接着,添加您的秘密。
ea4dcce506c6e5ee3fbaeae212477be838733694.mySecr3t
再次运行sha1(),然后将结果与SHA1HASH响应进行比较。只有相等时,您才应标记付款为有效,并发送header("HTTP/1.0 200 OK")。
然后,您可以使用上述JavaScript进行重定向,也许不需要发送整个消息,只需发送this error id即可。我的做法是返回到我的付款页面,使用/thanks或/error111显示可能的错误消息。
<script language='javascript' type='text/javascript'>
window.location.replace('https://pay.example.com/{orderId}/error{result}');
</script>