Is it possible to subscribe a user to Mailchimp during checkout in Craft Commerce? Our checkout is only for registered users. 

Ideally you'd just provide a checkbox that says: Subscribe to Mailchimp? 

Any ideas?
We offer this during checkout.  

We use André Elvan's: https://github.com/aelvan/mailchimp-subscribe-craft

We implement it simply as an ajax call that happens in the background as the order is submitted for payment:

    if ($('#subscribeMC').prop('checked')) {
        // Fire this off asynchronously and with any luck it just works...
        $.ajax({
            type: 'POST',
            url: '/actions/mailchimpSubscribe/list/Subscribe',
            data: {
                CRAFT_CSRF_TOKEN: window.csrfTokenValue,
                email: email,
                mcvars: {
                    FNAME: firstName,
                    LNAME: lastName,
                }
            }
        });
    }


One thing I like about our implementation is that I added a 'check if subscribed' function to the above plugin and we only show the checkbox if they're not already on the list - it's one of my pet hates when I keep seeing a newsletter box for a list I know I am already on.

$.ajax({
    type: 'POST',
    url: '/actions/mailchimpSubscribe/list/checkIfSubscribed',
    data: {
        'CRAFT_CSRF_TOKEN': window.csrfTokenValue,
        'email': email
    },
    success: function(response) {
        //They're on the newsletter - hide the subscription form
        if (response.success) {
            $container.hide();
            $heading.hide();
        }
        //They're not on the list, bait the hook
        else {
            $container.fadeIn('fast');
            $heading.fadeIn('fast');
        }
    },
    //something went wrong, might as well show the form
    error: function(response) {
        $container.fadeIn('fast');
        $heading.fadeIn('fast');
    }
});


If you wanted to avoid JS/ajax, then I guess you could implement your own controller that you submit to at any point (e.g. intercept the commerce pay controller) - that first does your Mailchimp stuff and then calls the native controller using Craft's runController.

But the above JS works well and we get a bunch of newsletter subs with it every day...during subscribe checkout is by far the most effective way of increasing your mailing list we've found.  (And, please, whatever else you may do, do not implement a page covering newsletter signup popover!!)