/** * Get payment gateway class by order data. * * @param int|WC_Order $order * @return WC_Payment_Gateway|bool */ public function getWcPaymentGatewayByOrder($order) { if (function_exists('wc_get_payment_gateway_by_order')) { /** * @since WooCommerce 2.2 */ return wc_get_payment_gateway_by_order($order); } if (WC()->payment_gateways()) { $payment_gateways = WC()->payment_gateways->payment_gateways(); } else { $payment_gateways = array(); } if (!$order instanceof WC_Order) { $order = $this->getWcOrder($order); if (!$order) { return false; } } return isset($payment_gateways[$order->payment_method]) ? $payment_gateways[$order->payment_method] : false; }
<?php if (!defined('ABSPATH')) { exit; // Exit if accessed directly } global $wpdb; // Get the payment gateway $payment_gateway = wc_get_payment_gateway_by_order($order); // Get line items $line_items = $order->get_items(apply_filters('woocommerce_admin_order_item_types', 'line_item')); $line_items_fee = $order->get_items('fee'); $line_items_shipping = $order->get_items('shipping'); if (wc_tax_enabled()) { $order_taxes = $order->get_taxes(); $tax_classes = WC_Tax::get_tax_classes(); $classes_options = array(); $classes_options[''] = __('Standard', 'woocommerce'); if (!empty($tax_classes)) { foreach ($tax_classes as $class) { $classes_options[sanitize_title($class)] = $class; } } // Older orders won't have line taxes so we need to handle them differently :( $tax_data = ''; if ($line_items) { $check_item = current($line_items); $tax_data = maybe_unserialize(isset($check_item['line_tax_data']) ? $check_item['line_tax_data'] : ''); } elseif ($line_items_shipping) { $check_item = current($line_items_shipping); $tax_data = maybe_unserialize(isset($check_item['taxes']) ? $check_item['taxes'] : '');
/** * Save new payment method for a subscription * * @since 2.0 * @param WC_Payment_Gateway|empty $payment_method * @param array $payment_meta Associated array of the form: $database_table => array( value, ) */ public function set_payment_method($payment_gateway, $payment_meta = array()) { if (!empty($payment_meta) && isset($payment_gateway->id)) { $this->set_payment_method_meta($payment_gateway->id, $payment_meta); } if (empty($payment_gateway) || !isset($payment_gateway->id)) { $this->update_manual(true); update_post_meta($this->id, '_payment_method', ''); update_post_meta($this->id, '_payment_method_title', ''); } elseif ($this->payment_method !== $payment_gateway->id) { // Set subscription to manual when the payment method doesn't support automatic payments $available_gateways = WC()->payment_gateways->get_available_payment_gateways(); if ('yes' == get_option(WC_Subscriptions_Admin::$option_prefix . '_turn_off_automatic_payments', 'no')) { $this->update_manual(true); } elseif (!isset($available_gateways[$payment_gateway->id]) || !$available_gateways[$payment_gateway->id]->supports('subscriptions')) { $this->update_manual(true); } else { $this->update_manual(false); } update_post_meta($this->id, '_payment_method', $payment_gateway->id); update_post_meta($this->id, '_payment_method_title', $payment_gateway->get_title()); } $this->payment_gateway = wc_get_payment_gateway_by_order($this); }