/** * @param int $order_id * @return array */ public function process_payment($order_id) { // get order object $order = new WC_Order($order_id); // update pos_cash data $data = WC_POS_Server::get_raw_data(); $cashback = isset($data['payment_details']['pos-cashback']) ? wc_format_decimal($data['payment_details']['pos-cashback']) : 0; if ($cashback !== 0) { // add order meta update_post_meta($order_id, '_pos_card_cashback', $cashback); // add cashback as fee line item // TODO: this should be handled by $order->add_fee after WC 2.2 $item_id = wc_add_order_item($order_id, array('order_item_name' => __('Cashback', 'woocommerce-pos'), 'order_item_type' => 'fee')); if ($item_id) { wc_add_order_item_meta($item_id, '_line_total', $cashback); wc_add_order_item_meta($item_id, '_line_tax', 0); wc_add_order_item_meta($item_id, '_line_subtotal', $cashback); wc_add_order_item_meta($item_id, '_line_subtotal_tax', 0); wc_add_order_item_meta($item_id, '_tax_class', 'zero-rate'); } // update the order total to include fee $order_total = get_post_meta($order_id, '_order_total', true); $order_total += $cashback; update_post_meta($order_id, '_order_total', $order_total); } // payment complete $order->payment_complete(); // success return array('result' => 'success'); }
public function process_payment($order_id) { // get order object $order = new WC_Order($order_id); // update pos_cash data $data = WC_POS_Server::get_raw_data(); $tendered = isset($data['payment_details']['pos-cash-tendered']) ? wc_format_decimal($data['payment_details']['pos-cash-tendered']) : 0; $change = isset($data['payment_details']['pos-cash-change']) ? wc_format_decimal($data['payment_details']['pos-cash-change']) : 0; update_post_meta($order_id, '_pos_cash_amount_tendered', $tendered); update_post_meta($order_id, '_pos_cash_change', $change); // payment complete $order->payment_complete(); // Return thankyou redirect return array('result' => 'success'); }
/** * Force update translations from AJAX */ public function update_translations() { // security WC_POS_Server::check_ajax_referer(); header("Content-Type: text/event-stream"); header("Cache-Control: no-cache"); header("Access-Control-Allow-Origin: *"); echo ":" . str_repeat(" ", 2048) . PHP_EOL; // 2 kB padding for IE $this->manual_update(); die; }
/** * @return mixed|void */ public function payload() { WC_POS_Server::check_ajax_referer(); $this->params = new WC_POS_Params(); $payload = array('templates' => $this->templates_payload(), 'params' => $this->params->payload(), 'i18n' => WC_POS_i18n::payload()); WC_POS_Server::response($payload); }
/** * Verifies the AJAX request */ public function check_ajax_referer() { $pass = check_ajax_referer(WC_POS_PLUGIN_NAME, 'security', false); if (!$pass) { $result = new WP_Error('woocommerce_pos_invalid_nonce', __('Invalid security nonce', 'woocommerce-pos'), array('status' => 401)); WC_POS_Server::response($result); } }
/** * @return array|bool|mixed|void|WP_Error */ private function process_admin_settings() { // validate if (!isset($_GET['id'])) { return new WP_Error('woocommerce_pos_settings_error', __('There is no settings id', 'woocommerce-pos'), array('status' => 400)); } $id = $_GET['id']; $data = WC_POS_Server::get_raw_data(); // special case: gateway_ $gateway_id = preg_replace('/^gateway_/', '', strtolower($id), 1, $count); if ($count) { $handler = new WC_POS_Admin_Settings_Gateways($gateway_id); // else, find handler by id } else { $handlers = (array) self::handlers(); if (!isset($handlers[$id])) { return new WP_Error('woocommerce_pos_settings_error', sprintf(__('No handler found for %s settings', 'woocommerce-pos'), $_GET['id']), array('status' => 400)); } $handler = new $handlers[$id](); } // Compatibility for clients that can't use PUT/PATCH/DELETE $method = strtoupper($_SERVER['REQUEST_METHOD']); if (isset($_GET['_method'])) { $method = strtoupper($_GET['_method']); } elseif (isset($_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'])) { $method = strtoupper($_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE']); } // bump IDB version if (isset($data['bump_idb_version']) && $data['bump_idb_version']) { self::bump_idb_version(); unset($data['bump_idb_version']); } // get if ($method === 'GET') { return $handler->get(); } // set if ($method === 'POST' || $method === 'PUT') { return $handler->set($data); } // delete if ($method === 'DELETE') { return $handler->delete($data); } return new WP_Error('woocommerce_pos_cannot_' . $method . '_' . $id, __('Settings error', 'woocommerce-pos'), array('status' => 405)); }
/** * Get all the ids for a given post_type * @return json */ public static function get_all_ids() { $entity = isset($_REQUEST['type']) ? $_REQUEST['type'] : false; $updated_at_min = isset($_REQUEST['updated_at_min']) ? $_REQUEST['updated_at_min'] : false; $class_name = 'WC_POS_API_' . ucfirst($entity); $handler = new $class_name(); if (method_exists($handler, 'get_ids')) { $result = call_user_func(array($handler, 'get_ids'), $updated_at_min); } else { $result = new WP_Error('woocommerce_pos_get_ids_error', sprintf(__('There was an error calling %s::%s', 'woocommerce'), 'WC_POS_API', $entity), array('status' => 500)); } WC_POS_Server::response($result); }