I am using
$token = $_POST['stripeToken'];
$customer = Stripe_Customer::create(array(
"card" => $token,
"plan" => $_POST['plan'],
"email" => "firstname.lastname@example.org",
This is exactly what Stripe's webhooks are for. After creating a customer with an initial subscription, you'll get six webhook notifications:
customer.created, with the customer data (which you already have if you're saving what the API returns)
charge.failed), which contains the initial charge data you're looking for
invoice.created, which is the associated invoice
invoice.payment_failed), also telling you the status of the charge
customer.card.created, with the details of the new card
customer.subscription.created, with the details of the customer's subscription.
Stripe's API, like many APIs and many payment solutions, is built to be used with webhooks. If you're not taking advantage of webhooks, you're going to be missing functionality, and you're probably working too hard for what can be done without webhooks.
Stripe works to deliver the data to you. If you're writing code to poll Stripe, you're working way, way too hard.