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);
}
}