Using the vault system to authorize payments later

This guide will show you how to set up the following scenario:

Customer checks out, but card is not charged immediately At a later date, the site admin will complete the order

Note: this feature isn't part of our free/included support policy; our support team will provide an estimate before providing any technical support on customer use of force_vault and force_processing.

In your settings, make sure your admins have been given access to check out on a customer's behalf in General Settings > Admin Checkout Groups. Also make sure that the Vault ID field in Orders > Order Field Settings is mapped to a field in your orders channel. Under Subscriptions you will find the list of vault eligible gateways. Make sure that you are configured to use one of these gateways. Under Orders > Order Statuses, make sure you have a "Processing" status mapped.

In the customer's checkout form, use force_vault to create a vault using the customer's payment information. Use force_processing to set the order to processing status instead of complete.

{exp:cartthrob:checkout_form
    force_vault="yes"
    force_processing="yes"
}

{gateway_fields}

<input type="submit" value="Checkout">

{/exp:cartthrob:checkout_form}

An admin interface might then look like this. You'll want to make sure that this template is only accessible to admins, either via template member group checks or template access permissions.

<table>
    <thead>
        <tr>
            <th>Order</th>
            <th>Date</th>
            <th></th>
        </tr>
    </thead>
    <tbody>
{exp:channel:entries channel="orders" status="Processing"}
        <tr>
            <td>{title}</td>
            <td>{entry_date format="%F %j, %Y"}</td>
            <td>
                {exp:cartthrob:checkout_form
                    vault_id="{order_vault_id}"
                    order_id="{entry_id}"
                    skip_stripe_js="yes"
                }
                <input type="submit" value="Process Order">
                {/exp:cartthrob:checkout_form}
            </td>
        </tr>
{/exp:channel:entries}
    </tbody>
</table>