当用户点击"Purchase"按钮时,我们将调用process.php脚本来处理付款细节。可以在图28-10中看到成功付款的结果。
图 28-10 付款操作成功,我们将发送顾客订购的商品process.php脚本如程序清单28-16所示。
我们将处理用户的信用卡,如果所有操作成功完成,再销毁用户的会话。
我们编写的信用卡处理函数将简单地返回true。在具体实现过程中,可能需要先执行一些验证(检查信用卡的过期日期是否仍然有效以及卡号是否正确),然后再执行真正的付款操作。
程序清单28-16 process.php——该脚本处理顾客的付款并显示处理结果
<?php
include('book_sc_fns.php');
//The shopping cart needs sessions,so start one
session_start;
do_html_header('Checkout');
$card_type=$_POST['card_type'];
$card_number=$_POST['card_number'];
$card_month=$_POST['card_month'];
$card_year=$_POST['card_year'];
$card_name=$_POST['card_name'];
if(($_SESSION['cart'])&&($card_type)&&($card_number)&&
($card_month)&&($card_year)&&($card_name)){
//display cart,not allowing changes and without pictures
display_cart($_SESSION['cart'],false,0);
display_shipping(calculate_shipping_cost);
if(process_card($_POST)){
//empty shopping cart
session_destroy;
echo"<p>Thank you for shopping with us.Your order has been placed.</p>";
display_button("index.php","continue-shopping","Continue Shopping");
}else{
echo"<p>Could not process your card.Please contact the card
issuer or try again.</p>";
display_button("purchase.php","back","Back");
}
}else{
echo"<p>You did not fill in all the fields,please try again.</p><hr/>";
display_button("purchase.php","back","Back");
}
do_html_footer;
?>
实际建立站点时,必须决定采用哪种事务清除机制。我们可以:
■与一个事务清理提供商签约。根据所在地的不同,可以选择许多服务商。一些服务商提供实时的数据清理,一些服务商则不是。是否需要实时的数据清理取决于向用户提供的服务。如果提供的是在线服务,可能最希望实时清理;如果发送货物,实时处理就不是很重要了。无论选择哪种方式,这些服务商都承担了保存信用卡号码的责任。
■通过加密邮件将信用卡号码发送给自己,加密算法可以采用PGP或GPG等,这些内容已经在第18章中详细介绍。当接收并解密这些邮件之后,就可以手动处理这些事务。
■在数据库中保存信用卡号。如果没有慎重考虑这样做对系统安全性能的潜在危害,那么我们不推荐采用这种选择。可以参阅第18章的详细介绍,明白为什么这是一个糟糕的主意。
以上就是购物车模块和付款模块。