php实现购买
PHP实现购买功能的基本流程
创建数据库表存储商品和订单信息 通常需要商品表(products)和订单表(orders)两个主要表结构。商品表包含id、name、price、stock等字段,订单表包含order_id、user_id、product_id、quantity、total_price、status等字段。
CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
price DECIMAL(10,2) NOT NULL,
stock INT NOT NULL
);
CREATE TABLE orders (
order_id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
product_id INT NOT NULL,
quantity INT NOT NULL,
total_price DECIMAL(10,2) NOT NULL,
status VARCHAR(20) DEFAULT 'pending',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
实现前端购买表单
创建HTML表单让用户选择商品和数量,提交到PHP处理页面。表单应包含商品选择下拉菜单和数量输入框。
<form action="process_purchase.php" method="post">
<select name="product_id" required>
<?php
$products = $db->query("SELECT * FROM products WHERE stock > 0");
while($product = $products->fetch_assoc()) {
echo "<option value='{$product['id']}'>{$product['name']} - \${$product['price']}</option>";
}
?>
</select>
<input type="number" name="quantity" min="1" required>
<button type="submit">购买</button>
</form>
处理购买逻辑的PHP代码
创建process_purchase.php文件处理表单提交,验证库存并创建订单记录。
<?php
session_start();
require 'db_connection.php';
if($_SERVER['REQUEST_METHOD'] == 'POST') {
$product_id = $_POST['product_id'];
$quantity = $_POST['quantity'];
$user_id = $_SESSION['user_id'];
// 获取商品信息
$stmt = $db->prepare("SELECT * FROM products WHERE id = ? FOR UPDATE");
$stmt->bind_param("i", $product_id);
$stmt->execute();
$product = $stmt->get_result()->fetch_assoc();
// 检查库存
if($product['stock'] < $quantity) {
die("库存不足");
}
// 计算总价
$total_price = $product['price'] * $quantity;
// 开始事务
$db->begin_transaction();
try {
// 更新库存
$update = $db->prepare("UPDATE products SET stock = stock - ? WHERE id = ?");
$update->bind_param("ii", $quantity, $product_id);
$update->execute();
// 创建订单
$insert = $db->prepare("INSERT INTO orders (user_id, product_id, quantity, total_price) VALUES (?, ?, ?, ?)");
$insert->bind_param("iiid", $user_id, $product_id, $quantity, $total_price);
$insert->execute();
$db->commit();
header("Location: order_success.php?order_id=".$db->insert_id);
} catch(Exception $e) {
$db->rollback();
die("购买失败: ".$e->getMessage());
}
}
?>
支付集成(以支付宝为例)
集成第三方支付接口,如支付宝或微信支付,完成支付流程。
// 支付宝支付示例
function createAlipayOrder($order_id, $total_price, $subject) {
require_once 'alipay/config.php';
require_once 'alipay/pagepay/service/AlipayTradeService.php';
require_once 'alipay/pagepay/buildermodel/AlipayTradePagePayContentBuilder.php';
$payRequestBuilder = new AlipayTradePagePayContentBuilder();
$payRequestBuilder->setBody("商品购买");
$payRequestBuilder->setSubject($subject);
$payRequestBuilder->setOutTradeNo($order_id);
$payRequestBuilder->setTotalAmount($total_price);
$payRequestBuilder->setProductCode("FAST_INSTANT_TRADE_PAY");
$aop = new AlipayTradeService($config);
$response = $aop->pagePay($payRequestBuilder, $config['return_url'], $config['notify_url']);
return $response;
}
订单状态管理
实现订单状态更新和查询功能,包括支付成功后的回调处理。
// 支付成功回调处理
function handlePaymentCallback($order_id, $payment_status) {
global $db;
$status_map = [
'TRADE_SUCCESS' => 'paid',
'TRADE_FINISHED' => 'completed',
'TRADE_CLOSED' => 'cancelled'
];
if(isset($status_map[$payment_status])) {
$stmt = $db->prepare("UPDATE orders SET status = ? WHERE order_id = ?");
$stmt->bind_param("si", $status_map[$payment_status], $order_id);
$stmt->execute();
// 发送订单确认邮件
sendOrderConfirmation($order_id);
}
}
安全注意事项
实施必要的安全措施保护购买流程,防止常见攻击。
验证所有输入数据,使用预处理语句防止SQL注入。对敏感操作如库存修改使用数据库事务确保数据一致性。支付接口使用HTTPS加密传输,存储的支付信息需符合PCI DSS标准。实现CSRF防护,在关键表单添加令牌验证。







