feat(orders): full-chain My Orders for all product types

Unify front-end order center across shop, content, VIP, recharge,
points, and plate-follow with type filters, stats, and type-aware
cards; keep shop-only fulfillment actions; ensure 权益与消费 entry URL.
This commit is contained in:
kate522 committed 2026-07-25 13:33:43 +08:00
1 parent 85ade059a2
commit 3baa8573c9
8 files changed
+841 -152

No files matched your search

@@ -43,30 +43,37 @@ trait ShopControllerFrontendFlowOperations {
}
public function get_frontend_orders(\WP_REST_Request $request): \WP_REST_Response {
if (!class_exists('\AKSRT\Shop\Shop')) {
return $this->success(['data' => ['items' => [], 'total' => 0, 'total_pages' => 1, 'page' => 1]]);
}
$page = max(1, (int) $request->get_param('page'));
$per_page = max(1, min(50, (int) $request->get_param('per_page'))) ?: 20;
$status = sanitize_key((string) $request->get_param('status'));
$product_type = sanitize_key((string) $request->get_param('product_type'));
$view = \AKSRT\Shop\Shop::get_instance()->get_order_center_view(get_current_user_id(), [
'page' => $page,
'per_page' => $per_page,
'status' => $status,
]);
$args = [
'page' => $page,
'per_page' => $per_page,
'status' => $status,
'product_type' => $product_type,
];
if (class_exists('\AKSRT\Payment\UserOrders')) {
$view = \AKSRT\Payment\UserOrders::get_instance()->get_order_center_view(get_current_user_id(), $args);
} elseif (class_exists('\AKSRT\Shop\Shop')) {
$view = \AKSRT\Shop\Shop::get_instance()->get_order_center_view(get_current_user_id(), $args);
} else {
$view = ['items' => [], 'total' => 0, 'total_pages' => 1, 'page' => 1];
}
return $this->success(['data' => $view]);
}
public function get_frontend_order(\WP_REST_Request $request): \WP_REST_Response {
if (!class_exists('\AKSRT\Shop\Shop')) {
return $this->error('商城服务不可用', 500);
}
$order_number = sanitize_text_field((string) $request->get_param('order_number'));
$order = \AKSRT\Shop\Shop::get_instance()->get_order_detail_view(get_current_user_id(), $order_number);
$order = null;
if (class_exists('\AKSRT\Payment\UserOrders')) {
$order = \AKSRT\Payment\UserOrders::get_instance()->get_order_detail_view(get_current_user_id(), $order_number);
} elseif (class_exists('\AKSRT\Shop\Shop')) {
$order = \AKSRT\Shop\Shop::get_instance()->get_order_detail_view(get_current_user_id(), $order_number);
}
if (!$order) {
return $this->error('订单不存在', 404);
}
@@ -75,15 +82,17 @@ trait ShopControllerFrontendFlowOperations {
}
public function pay_frontend_order(\WP_REST_Request $request): \WP_REST_Response {
if (!class_exists('\AKSRT\Shop\Shop')) {
return $this->error('商城服务不可用', 500);
}
$params = $this->get_json_params($request);
$payment_method = sanitize_key((string) ($params['payment_method'] ?? 'balance'));
$payment_method = sanitize_key((string) ($params['payment_method'] ?? ''));
$order_number = sanitize_text_field((string) $request->get_param('order_number'));
$result = \AKSRT\Shop\Shop::get_instance()->pay_order(get_current_user_id(), $order_number, $payment_method);
if (class_exists('\AKSRT\Payment\UserOrders')) {
$result = \AKSRT\Payment\UserOrders::get_instance()->pay_order(get_current_user_id(), $order_number, $payment_method);
} elseif (class_exists('\AKSRT\Shop\Shop')) {
$result = \AKSRT\Shop\Shop::get_instance()->pay_order(get_current_user_id(), $order_number, $payment_method ?: 'balance');
} else {
return $this->error('订单服务不可用', 500);
}
if (empty($result['success'])) {
return $this->error($result['message'] ?? '支付失败');
}
@@ -92,12 +101,14 @@ trait ShopControllerFrontendFlowOperations {
}
public function cancel_frontend_order(\WP_REST_Request $request): \WP_REST_Response {
if (!class_exists('\AKSRT\Shop\Shop')) {
return $this->error('商城服务不可用', 500);
}
$order_number = sanitize_text_field((string) $request->get_param('order_number'));
$result = \AKSRT\Shop\Shop::get_instance()->cancel_order(get_current_user_id(), $order_number);
if (class_exists('\AKSRT\Payment\UserOrders')) {
$result = \AKSRT\Payment\UserOrders::get_instance()->cancel_order(get_current_user_id(), $order_number);
} elseif (class_exists('\AKSRT\Shop\Shop')) {
$result = \AKSRT\Shop\Shop::get_instance()->cancel_order(get_current_user_id(), $order_number);
} else {
return $this->error('订单服务不可用', 500);
}
if (empty($result['success'])) {
return $this->error($result['message'] ?? '取消订单失败');
}