所以我有以下问题。我有两张桌子:
paypal_log
user_fees
费用是固定的,9000。但我也想让用户支付一半,4500,然后4500将继续支付以后。我使用paypal进行付款。当数据发布到paypal时,paypal_log
表也会填充数据。
用户在paypal上完成付款,paypal发送一个ipn,然后我用它来获取交易ID payment_status
并更新paypal_log
表。然后我需要更新user_fees
表。
在这里,我所做的是,我在paypal_log
表中有一个名为isHalf的列。查询检查金额是否为4500且isHalf = 0,然后将user_fees从9000更新为4500,并且将isHalf更新为1。
然后是另一个if语句,检查amount是否为4500且isHalf为1,此时它将user_fees更新为0.00。
第一次检查是9000,自动变为0.00,这很简单。当用户开始付款并取消付款或开始付款并且因为仍然创建了记录而离开页面时,会出现问题。
我的检查如下:
$stmt1 = $mysqli->prepare("SELECT userid FROM paypal_log WHERE invoice_id = ? LIMIT 1");
$stmt1->bind_param('i', $invoice_id); //invoice ID that Paypal sent back
$stmt1->execute();
$stmt1->store_result();
$stmt1->bind_result($db_userid);
$stmt1->fetch();
$stmt1->close();
$stmt1 = $mysqli->prepare("SELECT isHalf, product_amount FROM paypal_log WHERE userid = ? ORDER BY created_on ASC LIMIT 1");
$stmt1->bind_param('i', $db_userid);
$stmt1->execute();
$stmt1->store_result();
$stmt1->bind_result($isHalf, $product_amount);
$stmt1->fetch();
$stmt1->close();
if ($product_amount == '9000.00' ) {
$full_fees = 0.00;
$updated_on = date("Y-m-d G:i:s");
$stmt2 = $mysqli->prepare("UPDATE user_fees SET fee_amount=?, updated_on=? WHERE userid = ? LIMIT 1");
$stmt2->bind_param('isi', $full_fees, $updated_on, $db_userid);
$stmt2->execute();
$stmt2->close();
} else {
if ($product_amount == '4500.00' AND $isHalf == '0' ) {
$half_fees = 4500.00;
$isHalf = 1;
$updated_on = date("Y-m-d G:i:s");
$stmt3 = $mysqli->prepare("UPDATE user_fees SET fee_amount=?, updated_on=? WHERE userid=? LIMIT 1");
$stmt3->bind_param('isi', $half_fees, $updated_on, $db_userid);
$stmt3->execute();
$stmt3->close();
$stmt4 = $mysqli->prepare("UPDATE paypal_log SET isHalf=?, updated_on=? WHERE userid=? LIMIT 1");
$stmt4->bind_param('isi', $isHalf, $updated_on, $db_userid);
$stmt4->execute();
$stmt4->close();
} else {
$full_fees = 0.00;
$updated_on = date("Y-m-d G:i:s");
$stmt5 = $mysqli->prepare("UPDATE user_fees SET fee_amount=?, updated_on=? WHERE userid = ? LIMIT 1");
$stmt5->bind_param('isi', $full_fees, $updated_on, $db_userid);
$stmt5->execute();
$stmt5->close();
}
}
我试图尽可能直截了当地解释它。我知道我的逻辑可能不对,因此我认为为什么我会得到一些能让我思考的好答案。