php商城退货实现
退货流程设计
在PHP商城中实现退货功能,需要设计清晰的退货流程。用户提交退货申请后,系统自动生成退货单,管理员审核通过后,用户收到退货地址和物流信息。退货商品入库后,系统触发退款操作。
数据库表结构
创建退货相关数据表存储退货信息:
CREATE TABLE `order_return` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`order_id` int(11) NOT NULL COMMENT '关联订单ID',
`user_id` int(11) NOT NULL,
`return_reason` varchar(255) NOT NULL COMMENT '退货原因',
`return_status` tinyint(1) DEFAULT 0 COMMENT '0待审核 1已通过 2已拒绝',
`return_time` datetime DEFAULT NULL COMMENT '退货时间',
`refund_amount` decimal(10,2) DEFAULT NULL,
`refund_status` tinyint(1) DEFAULT 0 COMMENT '0未退款 1已退款',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
前端界面实现
用户中心添加退货申请页面,包含表单字段:

<form action="/return/apply" method="post">
<input type="hidden" name="order_id" value="123">
<select name="reason">
<option value="质量问题">质量问题</option>
<option value="发错商品">发错商品</option>
</select>
<textarea name="description"></textarea>
<button type="submit">提交申请</button>
</form>
后端处理逻辑
创建退货申请处理控制器:
class ReturnController {
public function apply() {
$orderId = $_POST['order_id'];
$reason = $_POST['reason'];
$desc = $_POST['description'];
// 验证订单是否可退货
$order = OrderModel::find($orderId);
if($order->status != 'completed') {
return json_encode(['error' => '订单未完成不可退货']);
}
// 创建退货记录
ReturnModel::create([
'order_id' => $orderId,
'user_id' => $_SESSION['user_id'],
'return_reason' => $reason,
'description' => $desc
]);
return json_encode(['success' => true]);
}
}
管理员审核功能
后台管理系统添加退货审核界面:

class AdminReturnController {
public function approve($returnId) {
$return = ReturnModel::find($returnId);
$return->update([
'return_status' => 1,
'admin_id' => $_SESSION['admin_id']
]);
// 通知用户退货地址
$this->sendReturnAddress($return->user_id);
}
}
退款处理实现
商品验收入库后触发退款:
class RefundService {
public function processRefund($returnId) {
$return = ReturnModel::with('order')->find($returnId);
// 调用支付接口退款
$result = Payment::refund(
$return->order->transaction_id,
$return->order->total_amount
);
if($result['status'] == 'success') {
$return->update([
'refund_status' => 1,
'refund_time' => now()
]);
}
}
}
物流信息集成
集成快递鸟等物流接口实现退货轨迹查询:
class LogisticsService {
public function trackReturn($returnId) {
$return = ReturnModel::find($returnId);
$result = Kdniao::query($return->express_no);
return view('return_track', ['data' => $result]);
}
}






