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>