/**
     * Delete card
     * 
     * @access public
     * @return void
     */
    public function delete_card()
    {
        global $woocommerce;

        // Not our request?
        if ($_SERVER['REQUEST_METHOD'] !== 'GET' || !isset($_GET['subscriptio_stripe_delete_card'])) {
            return;
        }

        // User not logged in?
        if (!is_user_logged_in()) {
            return;
        }

        $user_id = get_current_user_id();

        // Load cards
        $cards = get_user_meta($user_id, '_subscriptio_stripe_customer_cards', true);

        if (empty($cards)) {
            return;
        }

        $cards = maybe_unserialize($cards);

        // No such card?
        if (!isset($cards[$_GET['subscriptio_stripe_delete_card']])) {
            return;
        }

        // Load customer id
        $customer_id = get_user_meta($user_id, '_subscriptio_stripe_customer_id', true);

        if (empty($customer_id)) {
            return;
        }

        // Load payment gateway object to access its methods
        $gateway = new Subscriptio_Stripe_Gateway();

        // Send request to delete this card
        $response = $gateway->send_request('cards', 'delete', array(
            'id'            => $customer_id,
            'secondary_id'  => $_GET['subscriptio_stripe_delete_card'],
        ));

        // Delete card from user's card list
        unset($cards[$_GET['subscriptio_stripe_delete_card']]);

        // Last card deleted?
        if (empty($cards)) {
            delete_user_meta($user_id, '_subscriptio_stripe_customer_cards');
            delete_user_meta($user_id, '_subscriptio_stripe_customer_default_card');
        }
        else {
            update_user_meta($user_id, '_subscriptio_stripe_customer_cards', $cards);

            // Default card deleted?
            $default_card = get_user_meta($user_id, '_subscriptio_stripe_customer_default_card', true);

            if (!empty($default_card) && $default_card == $_GET['subscriptio_stripe_delete_card']) {
                $new_default = array_keys($cards);
                $new_default = array_shift($new_default);
                update_user_meta($user_id, '_subscriptio_stripe_customer_default_card', $new_default);
            }
        }

        // Show success message
        $woocommerce->add_message(__('Credit card deleted successfully.', 'subscriptio-stripe'));
        wp_safe_redirect(get_permalink(woocommerce_get_page_id('myaccount')));
        exit;
    }
    /**
     * Refund payment
     * 
     * @access public
     * @param int $order_id
     * @return void
     */
    public function refund($order_id)
    {
        $order = new WC_Order($order_id);

        if (!$order) {
            return;
        }

        // Paid via Stripe?
        if ($order->payment_method == 'subscriptio_stripe') {

            // Get charge id
            $charge_id = get_post_meta($order_id, '_subscriptio_stripe_charge_id', true);

            if (empty($charge_id)) {
                return;
            }

            // Load payment gateway object to access its methods
            $gateway = new Subscriptio_Stripe_Gateway();

            // Send request to capture payment
            $response = $gateway->send_request('charges', 'refund', array(
                'id'        => $charge_id,
                'amount'    => $order->order_total * apply_filters('subscriptio_stripe_decimals_in_currency', 100, $order),
            ));

            // Request failed?
            if (!is_object($response)) {
                $order->add_order_note(__('Stripe refund failed.', 'subscriptio-stripe') . ' ' . $response);
                return;
            }

            // Received error from Stripe?
            if (!empty($response->error)) {
                $order->add_order_note(__('Stripe refund failed.', 'subscriptio-stripe') . ' ' . $response->error->message);
                return;
            }

            // Request was successful
            $order->add_order_note(sprintf(__('Stripe charge %s refunded.', 'subscriptio-stripe'), $response->id));
            delete_post_meta($order->id, '_subscriptio_stripe_charge_id');
            delete_post_meta($order->id, '_subscriptio_stripe_charge_captured');
        }
    }