I would recommend going with Express Checkout and Recurring Payments. Specifically, you'll be using SetExpressCheckout, GetExpressCheckoutDetails (optional), DoExpressCheckoutPayment (optional), and CreateRecurringPaymentsProfile depending on exactly what you're doing with your application.
SEC will return a token that you'll use to redirect the user to PayPal as well as in following API calls.
GECD is used to obtain buyer details (ie. shipping address, address status, payer status, etc.) from PayPal now that the user has signed in and agreed to continue.
DECP would allow you to finalize a one-time payment that includes shipping and tax info, item details etc.
CRPP allows you to setup the recurring profile including one-time initial payment, trial amounts, regular amounts and periods, etc.
Then behind that you can use the UpdateRecurringPaymentsProfile API to manage the profiles programatically.