Stripe_InvalidRequestError: You cannot use a Stripe token more than once
OK I have figured it out, when the form code is running, it runs multiple times, to stop it I added a variable to $form_state so the top of my code above becomes:

Stripe::setApiKey($stripe['secret_key']);

if (!empty($form_state['input']) &amp;&amp; !isset($form_state['processed'])) {
  $form_state['processed'] = TRUE;