/** * Create or update an order fee. * * @param WC_Order $order Order data. * @param array $fee Item data. * @param string $action 'create' to add fee or 'update' to update it. * @throws WC_REST_Exception Invalid data, server error. */ protected function set_fee($order, $fee, $action) { if ('create' === $action) { // Fee name is required. if (empty($fee['name'])) { throw new WC_REST_Exception('woocommerce_rest_invalid_fee_item', __('Fee name is required.', 'woocommerce'), 400); } $fee_data = new stdClass(); $fee_data->id = sanitize_title($fee['name']); $fee_data->name = $fee['name']; $fee_data->amount = isset($fee['total']) ? floatval($fee['total']) : 0; $fee_data->taxable = false; $fee_data->tax = 0; $fee_data->tax_data = array(); $fee_data->tax_class = ''; // If taxable, tax class and total are required. if (isset($fee['tax_status']) && 'taxable' === $fee['tax_status']) { if (!isset($fee['tax_class'])) { throw new WC_REST_Exception('woocommerce_rest_invalid_fee_item', __('Fee tax class is required when fee is taxable.', 'woocommerce'), 400); } $fee_data->taxable = true; $fee_data->tax_class = $fee['tax_class']; if (isset($fee['total_tax'])) { $fee_data->tax = isset($fee['total_tax']) ? wc_format_refund_total($fee['total_tax']) : 0; } } $fee_id = $order->add_fee($fee_data); if (!$fee_id) { throw new WC_REST_Exception('woocommerce_rest_cannot_create_fee', __('Cannot create fee, try again.', 'woocommerce'), 500); } } else { $fee_args = array(); if (isset($fee['name'])) { $fee_args['name'] = $fee['name']; } if (isset($fee['tax_class'])) { $fee_args['tax_class'] = $fee['tax_class']; } if (isset($fee['total'])) { $fee_args['line_total'] = floatval($fee['total']); } if (isset($fee['total_tax'])) { $fee_args['line_tax'] = floatval($fee['total_tax']); } $fee_id = $order->update_fee($fee['id'], $fee_args); if (!$fee_id) { throw new WC_REST_Exception('woocommerce_rest_cannot_update_fee', __('Cannot update fee, try again.', 'woocommerce'), 500); } } }
/** * Successful Payment! **/ function successful_request($posted) { $order = new WC_Order((int) $posted["wooorderid"]); $var = ""; if (strlen($this->md5key) > 0) { foreach ($posted as $key => $value) { if ($key != "hash") { $var .= $value; } } $genstamp = md5($var . $this->md5key); if ($genstamp != $posted["hash"]) { echo "MD5 error"; error_log('MD5 check failed for ePay callback with order_id:' . $posted["wooorderid"]); status_header(500); exit; } } if ($order->has_status('pending')) { // Payment completed $order->add_order_note(__('Callback completed', 'woocommerce-gateway-epay-dk')); if ($this->settings["addfeetoorder"] == "yes") { $order_fee = new stdClass(); $order_fee->id = 'epay_fee'; $order_fee->name = __('Fee', 'woocommerce-gateway-epay-dk'); $order_fee->amount = isset($posted['txnfee']) ? floatval($posted['txnfee'] / 100) : 0; $order_fee->taxable = false; $order_fee->tax = 0; $order_fee->tax_data = array(); $order->add_fee($order_fee); $order->set_total($order->order_total + floatval($posted['txnfee'] / 100)); } $order->payment_complete(); update_post_meta((int) $posted["wooorderid"], 'Transaction ID', $posted["txnid"]); update_post_meta((int) $posted["wooorderid"], 'Card no', $posted["cardno"]); if (isset($posted["subscriptionid"])) { update_post_meta((int) $posted["wooorderid"], 'Subscription ID', $posted["subscriptionid"]); } } echo "OK"; status_header(200); exit; }
/** * Create or update an order fee. * * @since 2.5.0 * @param \WC_Order $order * @param array $fee item data * @param string $action 'create' to add fee or 'update' to update it * @throws WC_CLI_Exception invalid data, server error */ protected function set_fee($order, $fee, $action) { if ('create' === $action) { // fee title is required if (!isset($fee['title'])) { throw new WC_CLI_Exception('woocommerce_invalid_fee_item', __('Fee title is required', 'woocommerce')); } $order_fee = new stdClass(); $order_fee->id = sanitize_title($fee['title']); $order_fee->name = $fee['title']; $order_fee->amount = isset($fee['total']) ? floatval($fee['total']) : 0; $order_fee->taxable = false; $order_fee->tax = 0; $order_fee->tax_data = array(); $order_fee->tax_class = ''; // if taxable, tax class and total are required if (isset($fee['taxable']) && $fee['taxable']) { if (!isset($fee['tax_class'])) { throw new WC_CLI_Exception('woocommerce_invalid_fee_item', __('Fee tax class is required when fee is taxable', 'woocommerce')); } $order_fee->taxable = true; $order_fee->tax_class = $fee['tax_class']; if (isset($fee['total_tax'])) { $order_fee->tax = isset($fee['total_tax']) ? wc_format_refund_total($fee['total_tax']) : 0; } if (isset($fee['tax_data'])) { $order_fee->tax = wc_format_refund_total(array_sum($fee['tax_data'])); $order_fee->tax_data = array_map('wc_format_refund_total', $fee['tax_data']); } } $fee_id = $order->add_fee($order_fee); if (!$fee_id) { throw new WC_CLI_Exception('woocommerce_cannot_create_fee', __('Cannot create fee, try again', 'woocommerce')); } } else { $fee_args = array(); if (isset($fee['title'])) { $fee_args['name'] = $fee['title']; } if (isset($fee['tax_class'])) { $fee_args['tax_class'] = $fee['tax_class']; } if (isset($fee['total'])) { $fee_args['line_total'] = floatval($fee['total']); } if (isset($fee['total_tax'])) { $fee_args['line_tax'] = floatval($fee['total_tax']); } $fee_id = $order->update_fee($fee['id'], $fee_args); if (!$fee_id) { throw new WC_CLI_Exception('woocommerce_cannot_update_fee', __('Cannot update fee, try again', 'woocommerce')); } } }
/** * Add an item to the provided order * * @since 3.0.0 * @param \WC_Order $order * @param array $item Parsed item data from CSV * @param string $type Line item type * @return int|false ID of the inserted order item, false on failure */ private function add_order_item(WC_Order $order, $item, $type) { $result = false; switch ($type) { case 'line_item': $product = $this->get_product_for_item($item); $args = $this->prepare_product_args($item); $result = $order->add_product($product, $args['qty'], $args); if (!$result) { wc_csv_import_suite()->log(sprintf(__('> > Warning: cannot add order item "%s".', 'woocommerce-csv-import-suite'), esc_html($identifier))); } break; case 'shipping': $args = array('order_item_name' => $item['method_title'], 'order_item_type' => 'shipping'); // we're using wc_add_order_item instead of $order->add_shipping because // we do not want the order total to be recalculated $result = wc_add_order_item($order->id, $args); if (!$result) { wc_csv_import_suite()->log(sprintf(__('> > Warning: cannot add shipping method "%s".', 'woocommerce-csv-import-suite'), esc_html($item['title']))); } break; case 'tax': $args = array('order_item_name' => $item['code'], 'order_item_type' => 'tax'); $result = wc_add_order_item($order->id, $args); if (!$result) { wc_csv_import_suite()->log(sprintf(__('> > Warning: cannot add tax "%s".', 'woocommerce-csv-import-suite'), esc_html($item['label']))); } break; case 'coupon': $result = $order->add_coupon($item['code'], $item['amount']); if (!$result) { wc_csv_import_suite()->log(sprintf(__('> > Warning: cannot add coupon "%s".', 'woocommerce-csv-import-suite'), esc_html($item['code']))); } break; case 'fee': $order_fee = new stdClass(); $order_fee->id = sanitize_title($item['title']); $order_fee->name = $item['title']; $order_fee->amount = isset($item['total']) ? floatval($item['total']) : 0; $order_fee->taxable = false; $order_fee->tax = 0; $order_fee->tax_data = array(); $order_fee->tax_class = ''; // if taxable, tax class and total are required if (isset($item['taxable']) && $item['taxable']) { $order_fee->taxable = true; $order_fee->tax_class = $item['tax_class']; if (isset($item['total_tax'])) { $order_fee->tax = isset($item['total_tax']) ? wc_format_refund_total($item['total_tax']) : 0; } if (isset($item['tax_data'])) { $tax_data = isset($item['tax_data']['total']) ? $item['tax_data']['total'] : $item['tax_data']; $order_fee->tax = wc_format_refund_total(array_sum($tax_data)); $order_fee->tax_data = array_map('wc_format_refund_total', $tax_data); } } $result = $order->add_fee($order_fee); if (!$result) { wc_csv_import_suite()->log(sprintf(__('> > Warning: cannot add fee "%s".', 'woocommerce-csv-import-suite'), esc_html($item['title']))); } break; } // store original order item ID if ($result && isset($item['order_item_id']) && $item['order_item_id'] > 0) { wc_update_order_item_meta($result, '_original_order_item_id', $item['order_item_id']); } return $result; }