2017-08-01 85 views
0

我刚刚实施了eWAY支付按钮,并注意到一些奇怪的行为,只发生在具有Microsoft Edge的平板电脑上。eWAY现在付款按钮,似乎有一个错误?

基本上使用data-resulturl,可以在成功付款后重定向,例如。

data-resulturl="https://www.mysite.com.au/booking.php" > 

在我的情况,我带来了会话变量的booking.php页面,并将其写入到数据库,发送确认电子邮件客户和邮件给管理员,结束会话,然后重定向到一个预订-success.html页面。

但是,在平板电脑的运行边缘上,如果您单击“立即付款”按钮,它会按照正常情况加载模式,但是如果您单击取消,则会触发data-resulturl。发送电子邮件并写入数据库。它不会重定向到成功页面。

本质上,用户可以在不付款的情况下进行预订。

Win10微软的优势不受这个bug的影响。

所以我对这里实际发生的事情感到茫然,这怎么可能呢?

我只是试着发送data-resulturl到payment.php并重定向到booking.php,但它仍然会触发电子邮件和db写入。

<?php 
$thankyouurl = "https://www.mysite.com.au/booking.php" ; 
header("Location: $thankyouurl"); 
exit ; 
?> 

回答

1

这听起来像你已经遇到了立即付款按钮中的错误,那是后话,最好由深入到EWAY直接与一些细节,如遇到该问题的Microsoft版本封边处理。

在相关说明中,您应该知道,即使付款失败,当交易完成时,“立即付款”按钮将重定向到给定的URL。在您的booking.php页面上,您需要使用在查询字符串中传递的AccessCode来检查交易结果。

要使用PHP SDK为此,您可以执行Transaction Query,例如:

<?php 

$apiKey = 'key'; 
$apiPassword = 'password'; 
$apiEndpoint = \Eway\Rapid\Client::MODE_SANDBOX; // Use \Eway\Rapid\Client::MODE_PRODUCTION when you go live 
$client = \Eway\Rapid::createClient($apiKey, $apiPassword, $apiEndpoint); 

$response = $client->queryTransaction($_GET['AccessCode']); 
$response = $response->Transactions[0]; 

if ($response->TransactionStatus) { 
    echo 'Transaction successful! ID: '.$response->TransactionID; 
} else { 
    $errors = split(', ', $response->ResponseMessage); 
    foreach ($errors as $error) { 
     echo "Payment failed: ".\Eway\Rapid::getMessage($error)."<br>"; 
    } 
} 

这也将阻止用户访问只是以booking.php完成酒店预订。为了提高安全性,请记录AccessCodes,以便它们不能重新用于创建多个成功的预订。

+0

这是一个很好的解决方案,它也修复了这个错误。 – Jon