Bryan,
Is it necessary for you to have a "shopping cart" and have them
checkout with the subscription in it?
When I've worked on subscription apps, it was always just a page to
see the different subscription types, then you select a type, which
posts to a page to pay (checkout). Once they pay, you create the
subscription record for their user/account.
Otherwise, it sounds like you're on the right track. I would follow
Maher's advice and slap AASM on your subscription model, and have an
initial state of "unpaid". Then when they pay, you can put it in state
"active". Later you can write a cron to get rid of subscription
objects that aren't used.
HTH,
Colin