Q:

PayPal subscription integration workflow

I am looking to offer subscriptions on one of my websites, but am a little confused on exactly which PayPal services I need to use to accomplish this. I'm not looking for any code to help me here, just a little guidance on how the entire process should play out and whether I'm using the correct PayPal tools. 
So, users sign up for an account on my site and receive a free 30 day membership (I know I can set this in PayPal, but I do not want to ask users for credit card/billing information at registration). Within that initial 30 days, users have the option of subscribing and keeping their account active by entering their payment information directly on my site using PayPal Payments Advanced. If the user still has, for example, 10 days left in the complimentary subscription, I do not want them to be charged until after their complimentary subscription expires.
Is there a way I can specify the date I would like the subscription to start when submitting the subscription information to PayPal? Or would I need to use a simple 'Buy Now' type of transaction for the first payment, and then set up a subscription?
Am I also correct in assuming that by using PayPal IPN I will receive relevant subscription information, such as when I receive a payment, when a customer's payment could not be successfully completed, etc., so that I can take the necessary administrative actions on my site to activate or deactivate their accounts?
Also, can I use "Modify Subscription" buttons to allow users to update their credit card or billing information, or would they need to directly login to their PayPal accounts for this?
Finally, would all this still work as intended for users who do not have PayPal accounts?

A:

What i would do is a normal subscription which is processed through the paypal site. In your IPN code it to say something along the lines of "If the users expirationTime > time() (this gets the current timestamp), then expirationTime += timeInSecondsPurchased (for example if they bought 7 days, then 60 * 60 * 24 * 7). Else, expirationTime = time() + timeInSecondsPurchased. Really simple. And by doing this you don't have to manually "activate or deactivate" accounts.
By doing this, anyone with a credit card, debit card or paypal account can purchase and if a payment is skipped, your sql database simply doesn't update to add the time and the users account expires. You can also code it in so that if the user requests a refund, you're sent a text or an email and then the user's account is deleted automatically (include in the TOS they agree to at purchase that requesting a refund will result in such actions).

