public static function process_payment( $request ) { error_log("==== START process_payment ===="); if (!self::init_session()) { return new WP_Error('initialization_failed', 'Failed to initialize WooCommerce session.'); } $params = $request->get_json_params(); error_log("Request Params: " . print_r($params, true)); if (!isset($params['payment_method'])) { return new WP_Error('invalid_payment', 'Payment method is required.', [ 'status' => 400 ]); } $current_user_id = get_current_user_id(); $user_id = (!empty($params['user_id']) && is_numeric($params['user_id']) && current_user_can('manage_woocommerce')) ? intval($params['user_id']) : $current_user_id; if (!WC()->session) { WC()->session = new WC_Session_Handler(); WC()->session->init(); } if (!WC()->cart) { wc_load_cart(); } if (!WC()->cart || WC()->cart->is_empty()) { return new WP_Error('empty_cart', 'Cart is empty. Cannot create order.', ['status' => 400]); } $order = wc_create_order(); if (is_wp_error($order)) { return new WP_Error('order_creation_failed', 'Failed to create order.', ['status' => 400]); } if ($user_id > 0) { $order->set_customer_id($user_id); } WC()->cart->calculate_totals(); foreach (WC()->cart->get_cart() as $cart_item) { $order->add_product($cart_item['data'], $cart_item['quantity']); } // Skip all shipping related operations $order->set_payment_method($params['payment_method']); $order->calculate_totals(); error_log('CECW Checkout: Order total: ' . $order->get_total()); $available_gateways = WC()->payment_gateways->get_available_payment_gateways(); error_log("Available Gateways: " . print_r(array_keys($available_gateways), true)); $payment_gateway = isset($available_gateways[$params['payment_method']]) ? $available_gateways[$params['payment_method']] : false; if (!$payment_gateway) { return new WP_Error('invalid_gateway', 'Invalid payment gateway.', ['status' => 400]); } $result = $payment_gateway->process_payment($order->get_id()); error_log("Payment Result: " . print_r($result, true)); if (isset($result['result']) && $result['result'] === 'success') { WC()->cart->empty_cart(); WC()->session->set('pickup_date', null); WC()->session->set('pickup_time', null); return rest_ensure_response([ 'success' => true, 'order_id' => $order->get_id(), 'redirect' => $result['redirect'], 'confirmation_data' => [ 'order_number' => $order->get_order_number(), 'order_key' => $order->get_order_key(), 'payment_method' => $order->get_payment_method(), 'payment_method_title' => $order->get_payment_method_title(), 'status' => $order->get_status(), ] ]); } error_log("Payment Failed."); return new WP_Error('payment_failed', 'Payment processing failed.', ['status' => 400]); }
Avis
Il n’y a pas encore d’avis.