在我们的支付网关提交付款表格(信用卡等)后,我们会在付款获批后收到“response_code”1。然后,我们使用以下代码更新数据库中的用户信息以反映已批准的事务。
但是,大约每10次中有10次,即使交易返回了已批准的回复,用户的信息也不会更新。这段代码有什么问题吗?或者,由于某种原因,response_code可能不等于1?
<?php
session_start();
if ($_GET['response_code'] == 1)
{
require('scripts/global.php'); //connect to database
$email = $_SESSION['email'];
$level = 3;
$transaction_id = "" . htmlentities($_GET['transaction_id']);
mysql_query ("UPDATE `users` SET level = '$level', trans_id = '$transaction_id' WHERE `email` = '$email'"); //update user info
$error = "false";
}
else
{
$noerror = "true";
$message = "Sorry, an error occurred: " . htmlentities($_GET['response_reason_text']);
}
?>
答案 0 :(得分:2)
可能是因为会话超时了? WHERE使用电子邮件地址,如果这是无效的(不存在)那么你可能不会得到更新。
也许您应该检查交易ID(或类似)。我猜你在交易开始之前就有这样的东西了吗?
编辑:还存储错误,并尝试存储您需要的变量。这使得查明问题变得容易得多。例如,使用日志文件。
答案 1 :(得分:0)
除了明显的安全漏洞之外,您还没有检查查询结果。尝试使用mysql_error()
和mysql_affected_rows()
查看是否有任何更新。当任何一个指示异常时,您还需要查看运行的查询的确切文本。要检查的事项:
$email
是空的吗?$transaction_id
或$email
是否有任何撇号?