HEX
Server: nginx/1.27.1
System: Linux in-4 5.15.0-131-generic #141-Ubuntu SMP Fri Jan 10 21:18:28 UTC 2025 x86_64
User: ilikadirect (1186)
PHP: 7.4.33
Disabled: exec,passthru,shell_exec,system,proc_open,popen,parse_ini_file,show_source
Upload Files
File: /storage/v6964/mangomitra/public_html/wp-content/plugins/woo-razorpay/includes/api/order.php
<?php

/**
 * create order with status pending
 * user, adddress, coupon and shipping are left blank
 */
function createWcOrder(WP_REST_Request $request)
{
    rzpLogInfo("createWcOrder");
    global $woocommerce;
    $params           = $request->get_params();
    $logObj           = array();
    $logObj['api']    = 'createWcOrder';
    $logObj['params'] = $params;

    //Abandoment cart plugin decode the coupon code from token
    $couponCode = null;
    if (isset($params['token'])) {
        $token = sanitize_text_field($params['token']);
        parse_str(base64_decode(urldecode($token)), $token);
        if (is_array($token) && array_key_exists('wcf_session_id', $token) && isset($token['wcf_coupon_code'])) {
            $couponCode = $token['wcf_coupon_code'];
        }
    }

    $nonce     = $request->get_header('X-WP-Nonce');
    $verifyReq = wp_verify_nonce($nonce, 'wp_rest');

    if ($verifyReq === false) {
        $response['status']  = false;
        $response['message'] = 'Authentication failed';

        $statusCode            = 401;
        $logObj['status_code'] = $statusCode;
        $logObj['response']    = $response;
        rzpLogError(json_encode($logObj));

        return new WP_REST_Response($response, $statusCode);
    }

    initCustomerSessionAndCart();

    if (empty($params['pdpCheckout']) === false) {
        $variations = [];
        // Cleanup cart.
        WC()->cart->empty_cart();

        $variation_id = (empty($params['variationId']) === false) ? (int) $params['variationId'] : 0;

        if (empty($params['variations']) === false) {
            $variations_arr = json_decode($params['variations'], true);

            foreach ($variations_arr as $key => $value) {
                $var_key          = explode('_', $key);
                $variations_key[] = ucwords(end($var_key));
                $variations_val[] = ucwords($value);
            }

            $variations = array_combine($variations_key, $variations_val);
        }

        //To add custom fields to buy now orders
        if (empty($params['fieldObj']) === false) {
            foreach ($params['fieldObj'] as $key => $value) {
                if (!empty($value)) {
                    $variations[$key] = $value;
                }
            }
        }

        WC()->cart->add_to_cart($params['productId'], $params['quantity'], $variation_id, $variations);
    }

    // check if cart is empty
    if (WC()->cart->get_cart_contents_count() == 0) {
        $response['message'] = 'Cart cannot be empty';
        $response['code']    = 'BAD_REQUEST_EMPTY_CART';

        $statusCode            = 400;
        $logObj['status_code'] = $statusCode;
        $logObj['response']    = $response;
        rzpLogError(json_encode($logObj));

        return new WP_REST_Response($response, $statusCode);
    }

    $cartHash = WC()->cart->get_cart_hash();

    $orderIdFromHash = $woocommerce->session->get(RZP_1CC_CART_HASH . $cartHash);

    if ($orderIdFromHash == null) {
        $checkout = WC()->checkout();
        $orderId  = $checkout->create_order(array());
    } else {
        $existingOrder = wc_get_order($orderIdFromHash);
        $existingOrder->calculate_totals();

        if ($existingOrder->needs_payment() == false) {
            $woocommerce->session->__unset(RZP_1CC_CART_HASH . $cartHash);
            $checkout = WC()->checkout();
            $orderId  = $checkout->create_order(array());
        } else {
            $orderId = $woocommerce->session->get(RZP_1CC_CART_HASH . $cartHash);
        }
    }

    $order = wc_get_order($orderId);

    //To remove by default shipping method added on order.
    $items = (array) $order->get_items('shipping');

    if (sizeof($items) > 0) {
        // Loop through shipping items
        foreach ($items as $item_id => $item) {
            $order->remove_item($item_id);
        }
    }

    $order->calculate_totals();
    if ($order) {
        update_post_meta($orderId, 'is_magic_checkout_order', 'yes');

        $minCartAmount1cc = !empty(get_option('woocommerce_razorpay_settings')['1cc_min_cart_amount']) ? get_option('woocommerce_razorpay_settings')['1cc_min_cart_amount'] : 0;

        // Response sent to the user when order creation fails
        if ($order->get_total() < $minCartAmount1cc) {
            $response['status']  = false;
            $response['message'] = 'Your current order total is ₹' . $order->get_total() . ' — you must have an order with a minimum of ₹' . $minCartAmount1cc . ' to place your order';
            $response['code']    = 'MIN_CART_AMOUNT_CHECK_FAILED';

            $status                 = 400;
            $logObj['response']     = $response;
            $logObj['rzp_order_id'] = $rzp_order_id;
            $logObj['rzp_response'] = $rzp_response;
            rzpLogError(json_encode($logObj));

            return new WP_REST_Response($response, $status);
        }

        $razorpay = new WC_Razorpay(false);

        $rzp_order_id = $razorpay->createOrGetRazorpayOrderId($orderId, 'yes');
        $rzp_response = $razorpay->getDefaultCheckoutArguments($order);

        // Response sent to the user when order creation fails
        if (empty($rzp_response['order_id'])) {
            $response['status']  = false;
            $response['message'] = 'Unable to create order';
            $response['code']    = 'ORDER_CREATION_FAILED';

            $status                 = 400;
            $logObj['response']     = $response;
            $logObj['rzp_order_id'] = $rzp_order_id;
            $logObj['rzp_response'] = $rzp_response;
            rzpLogError(json_encode($logObj));

            return new WP_REST_Response($response, $status);
        }

        // TODO: getDefaultCheckoutArguments() is already being called in L65 above
        $response = $razorpay->getDefaultCheckoutArguments($order);

        $current_user = wp_get_current_user();

        if ($current_user instanceof WP_User) {
            update_post_meta($orderId, '_customer_user', $current_user->ID);
            $response['prefill']['email']   = $current_user->user_email ?? '';
            $contact                        = get_user_meta($current_user->ID, 'billing_phone', true);
            $response['prefill']['contact'] = $contact ? $contact : '';
        }

        $response['prefill']['coupon_code'] = $couponCode;

        $response['mandatory_login'] = get_option('woocommerce_razorpay_settings')['enable_1cc_mandatory_login'] === 'yes' ? true : false;

        $response['enable_ga_analytics'] = get_option('woocommerce_razorpay_settings')['enable_1cc_ga_analytics'] === 'yes' ? true : false;
        $response['enable_fb_analytics'] = get_option('woocommerce_razorpay_settings')['enable_1cc_fb_analytics'] === 'yes' ? true : false;
        $response['redirect']            = true;
        $response['one_click_checkout']  = true;

        if ($response['enable_fb_analytics'] === true) {
            //Customer cart related data for FB analytics.
            $customer_cart['value']        = (string) WC()->cart->subtotal;
            $customer_cart['content_type'] = 'product';
            $customer_cart['currency']     = 'INR';

            $x = 0;
            // Loop over $cart items
            foreach (WC()->cart->get_cart() as $cart_item) {

                $customer_cart['contents'][$x]['id']         = (string) $cart_item['product_id'];
                $customer_cart['contents'][$x]['name']       = $cart_item['data']->get_title();
                $customer_cart['contents'][$x]['quantity']   = (string) $cart_item['quantity'];
                $customer_cart['contents'][$x]['value']      = (string) ($cart_item['line_subtotal'] + $cart_item['line_subtotal_tax']) / $cart_item['quantity'];
                $customer_cart['contents'][$x]['variant_id'] = (string) $cart_item['variation_id'];

                $x++;
            }

            $response['customer_cart'] = $customer_cart ?? '';
        }

        if (empty(get_option('woocommerce_razorpay_settings')['enable_1cc_cod_intelligence']) === true
            || get_option('woocommerce_razorpay_settings')['enable_1cc_cod_intelligence'] != 'yes') {
            $response['force_cod'] = true;
        }

        $woocommerce->session->set(RZP_1CC_CART_HASH . $cartHash, $orderId);
        set_transient(RZP_1CC_CART_HASH . $orderId, $cartHash, 3600);
        set_transient($razorpay::SESSION_KEY, $orderId, 3600);

        $logObj['response'] = $response;
        rzpLogInfo(json_encode($logObj));

        return new WP_REST_Response($response, 200);
    } else {
        $response['status']  = false;
        $response['message'] = 'Unable to create woocommerce order';
        $response['code']    = 'WOOCOMMERCE_ORDER_CREATION_FAILED';

        $logObj['response']    = $response;
        $logObj['status_code'] = 400;
        rzpLogError(json_encode($logObj));

        return new WP_REST_Response($response, 400);
    }
}