I have a free and premium subscription plan ($5). during sign up, the user can choose to be a free user, or a premium user. If they go premium right away, paypal works fine and they go through with there transaction normally. If the user chooses a free membership, then logs in, then visits the manage membership page, it lets them either unsubscribe, or "upgrade" to premium. If the user clicks the upgrade button it just converts them into a premium member without going through with any paypal checkout process or an opportunity to collect money. If a user upgrades to a different subscription plan, and that subscription plan costs money, obviously they should be charged before being granted access.
paypal express - single payment