I'm not entirely sure how the charge is being made, but I'm fairly confident that the reason you aren't getting the token, is because of this line
$token = $POST['stripeToken']; //get the creditcard details from the form
When accessing POST data in PHP, the global variable is prefixed with an underscore, so you'd need to do
$token = $_POST['stripeToken']; //get the creditcard details from the form
That should fix it.
-- UPDATE ---
Just for readability, in your javascript, I would specify the input field as follows
var $input = $('<input type="hidden" name="stripeToken" />').val(res.id);
I've also checked out the stripe documentation again, and it looks like the card attribute is optional, as is customer, but it does state that one must be provided. Chances are, it's not throwing an error because of an issue with their code that doesn't catch the eventuality of neither being provided.