error('商城服务不可用', 500); } $result = AKSRT_Shop::get_instance()->preview_checkout(get_current_user_id(), $this->get_json_params($request)); if (empty($result['success'])) { return $this->error($result['message'] ?? '结算预览失败'); } return $this->success(['data' => $result['data']]); } public function create_frontend_order(WP_REST_Request $request): WP_REST_Response { if (!class_exists('AKSRT_Shop')) { return $this->error('商城服务不可用', 500); } $result = AKSRT_Shop::get_instance()->create_checkout_order(get_current_user_id(), $this->get_json_params($request)); if (empty($result['success'])) { return $this->error($result['message'] ?? '订单创建失败'); } return $this->success([ 'message' => __('订单已创建', 'aksrt'), 'data' => $result['data'], ], 201); } public function get_frontend_orders(WP_REST_Request $request): WP_REST_Response { if (!class_exists('AKSRT_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')); $view = AKSRT_Shop::get_instance()->get_order_center_view(get_current_user_id(), [ 'page' => $page, 'per_page' => $per_page, 'status' => $status, ]); return $this->success(['data' => $view]); } public function get_frontend_order(WP_REST_Request $request): WP_REST_Response { if (!class_exists('AKSRT_Shop')) { return $this->error('商城服务不可用', 500); } $order_number = sanitize_text_field((string) $request->get_param('order_number')); $order = AKSRT_Shop::get_instance()->get_order_detail_view(get_current_user_id(), $order_number); if (!$order) { return $this->error('订单不存在', 404); } return $this->success(['data' => $order]); } public function pay_frontend_order(WP_REST_Request $request): WP_REST_Response { if (!class_exists('AKSRT_Shop')) { return $this->error('商城服务不可用', 500); } $params = $this->get_json_params($request); $payment_method = sanitize_key((string) ($params['payment_method'] ?? 'balance')); $order_number = sanitize_text_field((string) $request->get_param('order_number')); $result = AKSRT_Shop::get_instance()->pay_order(get_current_user_id(), $order_number, $payment_method); if (empty($result['success'])) { return $this->error($result['message'] ?? '支付失败'); } return $this->success(['data' => $result['data']]); } public function cancel_frontend_order(WP_REST_Request $request): WP_REST_Response { if (!class_exists('AKSRT_Shop')) { return $this->error('商城服务不可用', 500); } $order_number = sanitize_text_field((string) $request->get_param('order_number')); $result = AKSRT_Shop::get_instance()->cancel_order(get_current_user_id(), $order_number); if (empty($result['success'])) { return $this->error($result['message'] ?? '取消订单失败'); } return $this->success(['data' => $result['data']]); } public function create_frontend_after_sale(WP_REST_Request $request): WP_REST_Response { if (!class_exists('AKSRT_Shop')) { return $this->error('商城服务不可用', 500); } $params = $this->get_json_params($request); $params['order_number'] = sanitize_text_field((string) $request->get_param('order_number')); $result = AKSRT_Shop::get_instance()->create_after_sale_request(get_current_user_id(), $params); if (empty($result['success'])) { return $this->error($result['message'] ?? '提交售后失败'); } return $this->success([ 'message' => __('售后申请已提交', 'aksrt'), 'data' => $result['data'], ], 201); } public function get_cart(WP_REST_Request $request): WP_REST_Response { $user_id = get_current_user_id(); $shop = AKSRT_Shop::get_instance(); $cart = $shop->get_cart($user_id); $items = []; foreach ($cart as $pid => $opts_map) { $product = $shop->build_product_card_view((int) $pid); if (empty($product) || !is_array($opts_map)) { continue; } foreach ($opts_map as $opt_str => $qty) { $items[] = [ 'product_id' => (int) $pid, 'options_string' => $opt_str === '_default' ? '' : $opt_str, 'quantity' => (int) $qty, 'product' => $product, ]; } } return $this->success([ 'data' => [ 'items' => $items, 'count' => $shop->get_cart_count($user_id), ], ]); } public function get_cart_count(WP_REST_Request $request): WP_REST_Response { $user_id = get_current_user_id(); return $this->success(['data' => ['count' => AKSRT_Shop::get_instance()->get_cart_count($user_id)]]); } public function handle_add_to_cart(WP_REST_Request $request): WP_REST_Response { $params = $this->get_json_params($request); $product_id = (int) ($params['product_id'] ?? 0); $options_string = sanitize_text_field((string) ($params['options_string'] ?? '')); $count = max(1, (int) ($params['count'] ?? 1)); $result = AKSRT_Shop::get_instance()->add_to_cart(get_current_user_id(), $product_id, $options_string, $count); if (isset($result['error'])) { return $this->error($result['error']); } return $this->success(['data' => $result]); } public function handle_reduce_from_cart(WP_REST_Request $request): WP_REST_Response { $params = $this->get_json_params($request); $product_id = (int) ($params['product_id'] ?? 0); $options_string = sanitize_text_field((string) ($params['options_string'] ?? '')); $count = max(1, (int) ($params['count'] ?? 1)); $result = AKSRT_Shop::get_instance()->reduce_from_cart(get_current_user_id(), $product_id, $options_string, $count); if (isset($result['error'])) { return $this->error($result['error']); } return $this->success(['data' => $result]); } public function handle_remove_from_cart(WP_REST_Request $request): WP_REST_Response { $params = $this->get_json_params($request); $product_id = (int) ($params['product_id'] ?? 0); $options_string = sanitize_text_field((string) ($params['options_string'] ?? '')); $result = AKSRT_Shop::get_instance()->remove_from_cart(get_current_user_id(), $product_id, $options_string); if (isset($result['error'])) { return $this->error($result['error']); } return $this->success(['data' => $result]); } public function handle_remove_multi_from_cart(WP_REST_Request $request): WP_REST_Response { $params = $this->get_json_params($request); $items = is_array($params['items'] ?? null) ? $params['items'] : []; $result = AKSRT_Shop::get_instance()->remove_multi_from_cart(get_current_user_id(), $items); if (isset($result['error'])) { return $this->error($result['error']); } return $this->success(['data' => $result]); } public function handle_empty_cart(WP_REST_Request $request): WP_REST_Response { $result = AKSRT_Shop::get_instance()->empty_cart(get_current_user_id()); if (isset($result['error'])) { return $this->error($result['error']); } return $this->success(['data' => $result]); } public function get_frontend_addresses(): WP_REST_Response { if (!class_exists('AKSRT_Shop')) { return $this->success(['data' => ['addresses' => []]]); } $addresses = AKSRT_Shop::get_instance()->get_address_book(get_current_user_id()); return $this->success(['data' => ['addresses' => $addresses]]); } public function create_frontend_address(WP_REST_Request $request): WP_REST_Response { if (!class_exists('AKSRT_Shop')) { return $this->error('商城服务不可用', 500); } $params = $this->get_json_params($request); $user_id = get_current_user_id(); $result = AKSRT_Shop::get_instance()->add_address($user_id, $params); if (empty($result['success'])) { return $this->error($result['error'] ?? '添加地址失败'); } return $this->success([ 'message' => __('地址已添加', 'aksrt'), 'data' => ['address' => $result['address']], ], 201); } public function update_frontend_address(WP_REST_Request $request): WP_REST_Response { if (!class_exists('AKSRT_Shop')) { return $this->error('商城服务不可用', 500); } $address_id = (int) $request->get_param('id'); $params = $this->get_json_params($request); $user_id = get_current_user_id(); $result = AKSRT_Shop::get_instance()->update_address($user_id, $address_id, $params); if (empty($result['success'])) { return $this->error($result['error'] ?? '更新地址失败'); } return $this->success([ 'message' => __('地址已更新', 'aksrt'), 'data' => ['address' => $result['address']], ]); } public function delete_frontend_address(WP_REST_Request $request): WP_REST_Response { if (!class_exists('AKSRT_Shop')) { return $this->error('商城服务不可用', 500); } $address_id = (int) $request->get_param('id'); $user_id = get_current_user_id(); $result = AKSRT_Shop::get_instance()->delete_address($user_id, $address_id); if (empty($result['success'])) { return $this->error($result['error'] ?? '删除地址失败'); } return $this->success(['message' => __('地址已删除', 'aksrt')]); } public function set_default_frontend_address(WP_REST_Request $request): WP_REST_Response { if (!class_exists('AKSRT_Shop')) { return $this->error('商城服务不可用', 500); } $address_id = (int) $request->get_param('id'); $user_id = get_current_user_id(); $result = AKSRT_Shop::get_instance()->set_default_address($user_id, $address_id); if (empty($result['success'])) { return $this->error($result['error'] ?? '设置默认地址失败'); } return $this->success(['message' => __('已设为默认地址', 'aksrt')]); } public function create_frontend_product(WP_REST_Request $request): WP_REST_Response { $params = $this->get_json_params($request); $params['author_id'] = get_current_user_id(); $frontend_request = new WP_REST_Request('POST', '/'); $frontend_request->set_body(wp_json_encode($params)); return $this->create_product($frontend_request); } public function update_frontend_product(WP_REST_Request $request): WP_REST_Response { $id = (int) $request->get_param('id'); $post = get_post($id); if (!$post || $post->post_type !== 'aksrt_product') { return $this->error('商品不存在', 404); } if ((int) $post->post_author !== get_current_user_id() && !current_user_can('manage_options')) { return $this->error('没有权限编辑该商品', 403); } return $this->update_product($request); } }