当前位置:首页 > PHP

php实现下单

2026-02-16 22:38:56PHP

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
);

订单详情表结构示例:

php实现下单

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);
}

处理下单请求

接收前端提交的商品数据,验证库存和价格,创建订单记录。

php实现下单

// 假设 $_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;
}

标签: 下单php
分享给朋友:

相关文章

php验证码实现

php验证码实现

验证码实现方法 在PHP中实现验证码功能通常涉及生成随机字符串或数字,将其转换为图像,并通过会话(Session)进行验证。以下是几种常见的实现方式: 使用GD库生成图像验证码 GD库是PHP内置的…

php实现跳转

php实现跳转

PHP 实现页面跳转的方法 在 PHP 中实现页面跳转有多种方式,以下是常见的几种方法及其适用场景: 使用 header() 函数 通过 header() 函数发送 HTTP 头部信息实现跳转。注…

php队列的实现

php队列的实现

PHP队列的实现方式 PHP中实现队列功能可以通过多种方式,根据需求选择适合的方案: 使用数组实现基础队列 PHP数组本身支持队列操作,利用array_push和array_shift函数:…

php 实现秒杀

php 实现秒杀

PHP 实现秒杀的关键技术 秒杀系统需要解决高并发、超卖、性能瓶颈等问题。以下是实现秒杀的核心方案: 使用 Redis 预减库存 将商品库存提前加载到 Redis 中,通过原子操作保证库存准确性:…

php 实现下载

php 实现下载

PHP 实现文件下载的方法 使用 PHP 实现文件下载可以通过设置 HTTP 头信息,强制浏览器将文件作为附件下载而非直接打开。 基本下载实现 $file_path = 'path/to/your…

php 实现单链表

php 实现单链表

单链表的基本概念 单链表是一种线性数据结构,由节点组成,每个节点包含数据域和指向下一个节点的指针域。链表的头节点是访问整个链表的入口。 单链表的节点类实现 在PHP中,可以通过类来定义链表节点。每…