php 实现购物
实现购物功能的核心步骤
数据库设计
创建必要的数据库表,例如products(商品表)、users(用户表)、orders(订单表)和order_items(订单项表)。商品表应包含id、name、price、stock等字段;订单表需要user_id、total_amount、status等字段。
商品展示页面
从数据库查询商品信息并展示:

$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 "<button onclick='addToCart({$product['id']})'>加入购物车</button>";
echo "</div>";
}
购物车功能
使用Session存储购物车数据:
session_start();
function addToCart($productId) {
if (!isset($_SESSION['cart'])) {
$_SESSION['cart'] = [];
}
$_SESSION['cart'][$productId] = ($_SESSION['cart'][$productId] ?? 0) + 1;
}
订单处理
创建订单处理逻辑,包括库存检查和订单入库:

$db->beginTransaction();
try {
// 检查库存
foreach ($_SESSION['cart'] as $productId => $quantity) {
$product = $db->query("SELECT stock FROM products WHERE id = ?", [$productId]);
if ($product['stock'] < $quantity) {
throw new Exception("商品库存不足");
}
}
// 创建订单
$orderId = $db->insert("INSERT INTO orders (user_id, total_amount) VALUES (?, ?)",
[$_SESSION['user_id'], calculateTotal()]);
// 添加订单项
foreach ($_SESSION['cart'] as $productId => $quantity) {
$db->insert("INSERT INTO order_items (order_id, product_id, quantity) VALUES (?, ?, ?)",
[$orderId, $productId, $quantity]);
// 更新库存
$db->query("UPDATE products SET stock = stock - ? WHERE id = ?", [$quantity, $productId]);
}
$db->commit();
unset($_SESSION['cart']); // 清空购物车
} catch (Exception $e) {
$db->rollBack();
echo "下单失败: " . $e->getMessage();
}
支付集成
集成第三方支付接口如支付宝或微信支付:
function createPayment($orderId, $amount) {
$alipay = new AlipayClient($config);
$request = new AlipayTradePagePayRequest();
$request->setReturnUrl('https://yoursite.com/return.php');
$request->setNotifyUrl('https://yoursite.com/notify.php');
$request->setBizContent(json_encode([
'out_trade_no' => $orderId,
'total_amount' => $amount,
'subject' => '商品订单'
]));
return $alipay->pageExecute($request);
}
订单状态管理
处理支付回调并更新订单状态:
// notify.php
$verified = $alipay->verifyNotify();
if ($verified && $_POST['trade_status'] == 'TRADE_SUCCESS') {
$orderId = $_POST['out_trade_no'];
$db->query("UPDATE orders SET status = 'paid' WHERE id = ?", [$orderId]);
echo "success";
}
注意:实际开发中需要添加更多安全措施如CSRF防护、输入验证、事务处理等。






