php实现下单
PHP 下单功能实现
数据库设计
创建订单表(orders)和订单详情表(order_items)是基础。订单表存储订单基本信息,订单详情表存储商品信息。
订单表结构示例:
CREATE TABLE orders (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
order_number VARCHAR(50) NOT NULL,
total_amount DECIMAL(10,2) NOT NULL,
status VARCHAR(20) DEFAULT 'pending',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
订单详情表结构示例:

CREATE TABLE order_items (
id INT AUTO_INCREMENT PRIMARY KEY,
order_id INT NOT NULL,
product_id INT NOT NULL,
quantity INT NOT NULL,
price DECIMAL(10,2) NOT NULL,
FOREIGN KEY (order_id) REFERENCES orders(id)
);
生成订单号
使用时间戳和随机数生成唯一订单号,确保订单号不重复。
function generateOrderNumber() {
return date('YmdHis') . str_pad(mt_rand(1, 99999), 5, '0', STR_PAD_LEFT);
}
处理下单请求
接收前端提交的商品数据,验证库存和价格,创建订单记录。

// 假设 $_POST['items'] 是前端提交的商品数组
$items = json_decode($_POST['items'], true);
$totalAmount = 0;
// 计算总金额并验证库存
foreach ($items as $item) {
$product = getProductById($item['product_id']); // 自定义函数获取商品信息
if ($product['stock'] < $item['quantity']) {
die('库存不足');
}
$totalAmount += $product['price'] * $item['quantity'];
}
// 创建订单
$orderNumber = generateOrderNumber();
$db->beginTransaction();
try {
$orderId = createOrder($userId, $orderNumber, $totalAmount); // 自定义函数创建订单
foreach ($items as $item) {
addOrderItem($orderId, $item); // 自定义函数添加订单详情
updateProductStock($item['product_id'], $item['quantity']); // 自定义函数更新库存
}
$db->commit();
echo json_encode(['status' => 'success', 'order_number' => $orderNumber]);
} catch (Exception $e) {
$db->rollBack();
echo json_encode(['status' => 'error', 'message' => $e->getMessage()]);
}
支付集成
根据需求集成支付宝、微信支付等第三方支付接口。以支付宝为例:
function createAlipayOrder($orderNumber, $amount, $title) {
require_once 'alipay/config.php';
$alipay = new AlipayTradeService($config);
$request = new AlipayTradePagePayRequest();
$request->setReturnUrl('https://yourdomain.com/return.php');
$request->setNotifyUrl('https://yourdomain.com/notify.php');
$bizContent = json_encode([
'out_trade_no' => $orderNumber,
'total_amount' => $amount,
'subject' => $title,
'product_code' => 'FAST_INSTANT_TRADE_PAY'
]);
$request->setBizContent($bizContent);
return $alipay->pagePay($request);
}
订单状态更新
支付成功后,第三方支付平台会异步通知,需验证签名并更新订单状态。
// notify.php 示例
$alipay = new AlipayTradeService($config);
$verifyResult = $alipay->check($_POST);
if ($verifyResult) {
$orderNumber = $_POST['out_trade_no'];
updateOrderStatus($orderNumber, 'paid'); // 自定义函数更新订单状态
echo 'success';
} else {
echo 'fail';
}
订单查询功能
提供订单查询接口,方便用户查看订单状态和历史记录。
function getOrderDetails($orderNumber) {
$order = $db->query("SELECT * FROM orders WHERE order_number = ?", [$orderNumber])->fetch();
if (!$order) return null;
$items = $db->query("SELECT * FROM order_items WHERE order_id = ?", [$order['id']])->fetchAll();
$order['items'] = $items;
return $order;
}






