php 实现自动收货
PHP 实现自动收货功能
自动收货功能通常用于电商系统,在订单超过一定时间未手动确认收货时自动完成订单。以下是实现方法:
数据库设计
需要订单表包含以下关键字段:
CREATE TABLE orders (
id INT PRIMARY KEY AUTO_INCREMENT,
order_no VARCHAR(50) NOT NULL,
user_id INT NOT NULL,
status TINYINT DEFAULT 0 COMMENT '0未支付 1已支付 2已发货 3已完成 4已取消',
shipping_time DATETIME COMMENT '发货时间',
confirm_time DATETIME COMMENT '确认收货时间',
auto_confirm_days INT DEFAULT 7 COMMENT '自动确认天数'
);
核心逻辑实现
创建自动收货脚本(如auto_confirm.php):
<?php
// 连接数据库
$db = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
// 查询待自动确认的订单
$sql = "SELECT * FROM orders
WHERE status = 2
AND shipping_time IS NOT NULL
AND confirm_time IS NULL
AND DATE_ADD(shipping_time, INTERVAL auto_confirm_days DAY) <= NOW()";
$stmt = $db->query($sql);
$orders = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($orders as $order) {
// 更新订单状态为已完成
$updateSql = "UPDATE orders SET status = 3, confirm_time = NOW() WHERE id = ?";
$stmt = $db->prepare($updateSql);
$stmt->execute([$order['id']]);
// 这里可以添加其他业务逻辑,如库存变更、积分增加等
}
定时任务设置
使用Linux crontab设置每天执行:
0 0 * * * /usr/bin/php /path/to/auto_confirm.php
注意事项
- 自动收货天数应可配置,通常7-15天
- 执行前建议备份数据库
- 高并发系统应考虑使用队列处理
- 需要记录操作日志以便审计
扩展功能
可添加以下增强功能:
// 邮件通知用户
mail($userEmail, '订单已完成', '您的订单已自动确认收货');
// 写入日志文件
file_put_contents('confirm.log', date('Y-m-d H:i:s')." 订单{$order['id']}自动确认\n", FILE_APPEND);
实现时需根据具体业务需求调整代码逻辑和数据库结构。






