php 实现购买
PHP 实现购买功能
要实现购买功能,通常需要结合数据库操作、表单处理、支付接口集成等步骤。以下是一个基本的实现流程:
数据库设计 创建订单表和商品表,存储商品信息和订单记录。订单表通常包含订单ID、用户ID、商品ID、数量、总价、状态等字段。
商品展示 从数据库查询商品信息并展示给用户,通常使用HTML和PHP混合编写页面。商品页面应包含购买按钮或表单。
// 查询商品示例
$products = $db->query("SELECT * FROM products WHERE stock > 0");
foreach($products as $product) {
echo "<div class='product'>";
echo "<h3>{$product['name']}</h3>";
echo "<p>价格: {$product['price']}元</p>";
echo "<form method='post' action='purchase.php'>";
echo "<input type='hidden' name='product_id' value='{$product['id']}'>";
echo "<input type='number' name='quantity' min='1' max='{$product['stock']}' value='1'>";
echo "<button type='submit'>购买</button>";
echo "</form>";
echo "</div>";
}
处理购买请求 创建purchase.php处理购买表单提交,验证数据并创建订单。
session_start();
// 验证用户登录
if(!isset($_SESSION['user_id'])) {
header("Location: login.php");
exit;
}
// 获取表单数据
$product_id = intval($_POST['product_id']);
$quantity = intval($_POST['quantity']);
// 验证商品和库存
$product = $db->query("SELECT * FROM products WHERE id = $product_id AND stock >= $quantity")->fetch();
if(!$product) {
die("商品不存在或库存不足");
}
// 计算总价
$total = $product['price'] * $quantity;
// 创建订单
$stmt = $db->prepare("INSERT INTO orders (user_id, product_id, quantity, total, status) VALUES (?, ?, ?, ?, 'pending')");
$stmt->execute([$_SESSION['user_id'], $product_id, $quantity, $total]);
// 减少库存
$db->query("UPDATE products SET stock = stock - $quantity WHERE id = $product_id");
// 跳转到支付页面
header("Location: payment.php?order_id=".$db->lastInsertId());
支付集成 集成支付接口,如支付宝、微信支付等。以支付宝为例:

// 支付页面获取订单信息
$order_id = intval($_GET['order_id']);
$order = $db->query("SELECT * FROM orders WHERE id = $order_id AND user_id = {$_SESSION['user_id']}")->fetch();
// 调用支付宝接口
require_once('alipay.config.php');
require_once('lib/alipay_submit.class.php');
$alipay_config = array(...);
$parameter = array(
"service" => "create_direct_pay_by_user",
"partner" => $alipay_config['partner'],
"notify_url" => $alipay_config['notify_url'],
"return_url" => $alipay_config['return_url'],
"out_trade_no" => $order['id'],
"subject" => "商品购买",
"total_fee" => $order['total'],
"payment_type" => "1",
"_input_charset" => $alipay_config['input_charset']
);
$alipaySubmit = new AlipaySubmit($alipay_config);
$html_text = $alipaySubmit->buildRequestForm($parameter,"get", "确认");
echo $html_text;
支付回调处理 创建notify_url.php处理支付完成后的回调通知,验证支付结果并更新订单状态。
require_once('alipay.config.php');
require_once('lib/alipay_notify.class.php');
$alipayNotify = new AlipayNotify($alipay_config);
$verify_result = $alipayNotify->verifyNotify();
if($verify_result) {
$out_trade_no = $_POST['out_trade_no'];
$trade_status = $_POST['trade_status'];
if($trade_status == 'TRADE_FINISHED' || $trade_status == 'TRADE_SUCCESS') {
// 更新订单状态为已支付
$db->query("UPDATE orders SET status = 'paid' WHERE id = $out_trade_no");
// 其他业务逻辑...
}
echo "success";
} else {
echo "fail";
}
订单查询 提供订单查询功能,让用户可以查看购买记录和订单状态。
$orders = $db->query("SELECT o.*, p.name as product_name FROM orders o
JOIN products p ON o.product_id = p.id
WHERE o.user_id = {$_SESSION['user_id']}
ORDER BY o.create_time DESC")->fetchAll();
foreach($orders as $order) {
echo "<div class='order'>";
echo "<p>订单号: {$order['id']}</p>";
echo "<p>商品: {$order['product_name']}</p>";
echo "<p>数量: {$order['quantity']}</p>";
echo "<p>总价: {$order['total']}元</p>";
echo "<p>状态: {$order['status']}</p>";
echo "</div>";
}
安全注意事项
输入验证 对所有用户输入进行严格验证和过滤,防止SQL注入和XSS攻击。

CSRF防护 在关键操作如表单提交时使用CSRF令牌。
支付安全 支付接口使用HTTPS协议,敏感信息如API密钥妥善保管。
订单状态管理 确保订单状态变更流程严谨,避免重复支付或状态不一致问题。
日志记录 记录重要操作日志,便于问题追踪和审计。
以上实现可根据具体需求进行调整和扩展,如添加购物车功能、优惠券系统、物流跟踪等模块。






