First of all I need to explain why there is the phrase “almost right” in the header. The reason is following. There is no way (as far I have researched) to implement the subscription model properly. What I mean with properly is this. User signs up to your services and he is automatically logged in and the payment issue is handled at the background. If the user wants to cancel or upgrade the plan he can do it by single click from your application.
This solution requires payment gateway + merchant account or Paypal pro services (I think available only for US, Canada, UK at the moment). Finding the first of these two option (payment gateway & merchant account) for Slovak territory is currently impossible. I have contacted two gateways which suppose to be the only two who deals with this territory but they never get back to me. Merchant account is whole other story.
Let’s forget about the perfect scenario and see what we can do with the tools which are available. Sadly enough I have only found one tool on the market which can be used. Talking to other start-ups as well only confirmed my worries.
Paypal basic subscription buttons
Paypal allows you to create subscription buttons where you can define what plan the button is linked to, what is the monthly payment, if there is a trial period and so on. Paypal also allows you to create unsubscribe button but be careful with this one. The subscription can be upgraded up to 20%. For most of the web services this does not make sense. Your upgrades are more likely to be 100% and more. Paypal also allows you to create cancel button. You will need this button to give users the option to cancel their subscription. You might also need this button for the users who want to upgrade or downgrade the plan as the only way you can do this is to create a new plan and cancel the previous one.
What you will need
You will need Paypal business account which is linked to you business account. This can be sorted pretty quickly on the paypal.com. You can also be verified if you have card linked with this account.
Loging into your Paypal business account allows you to create subscription buttons. Look for subscription services in your profile.
Create your subscription buttons. One for each of your plans. Create the cancel button as well.
Implementation
Create a page inside your application when you paste the code which comes as the button. It is web form.
When user signs up to your application (your application creates the user account) forward the user to the page with the subscription button and submit the form at the background with javascipt. This means, the user will sing in and will be registered and sent to the paypal.com where he/she will make the payment. The subscription button form will allow you to have hidden fields where you can specify user’s email address (the one he used when registering on your app.) and fulfill the Paypal login form with it so user just types the Paypal password and he is in. Once he confirmes the payment Paypal sends him back to your application. (you will need to define this URL for each subscription button) We have already saved lots of clicks to your user.
I am also displaying animated slider with text description on the page which sends the user to Paypal just so the user experience feels more smooth but you could send him there without showing anything.
You understand that in case where user does not have Paypal account he/she will need to create one, even if he/she chose to pay by payment card. This is not ideal but we have no other options.
Canceling account can be done by simply inserting the “cancel button code” you got from Paypal into your application’s user profile page. I have create a separate page for this again where I forward user one the crenelation of my application services take place. I want to make sure I cancel the users account on my side first (delete all the necessary data etc.) and the forward the user to the page with the cancel form. I again use javascript to submit this form at the background so user does not have to click twice.
Note: The code which Paypal generates for cancel button is actually not form but you can create a form and use the given link.
The most tricky bit is the upgrade option. Now generate another set of subscription buttons (not upgrade buttons) in your paypal account with the word UPGRADE in the front as that is what user see when he/she is forward to the paypal site to upgrade your plane. It also allows you to see easily what is going on when you look at the list of the activities in the Paypal view.
The implementation of upgrade button is again the similar. You create a separate page where you paste the code for the subscription buttons. You will also need and Plans page where the users can chose a new plan. You will forward the user from his/her profile into this “New plan page”. Once the user will chose the new plan you forward him into the page with the subscription plan form and submit the form with js at the background. The user will create new plan on the Paypal site and will be sent back to your application by Paypal server. If you have been following carefully you know that the user has now two plans. I did not ask the user to cancel the first plan and then come back to my app. and create a new plan as it is kinda crazy. I send my self an email instead when the user upgrades. I will cancel his old plan from my paypal account. This is not ideal but unless I have hundreds users upgrading I am fine with it. It is far better then the first option.
Few more notes at the end. I am also sending emails to my app. support account when new subscription is created as well when the account is canceled. There are also some disadvantages as you do not actually have any real-time confirmation if the user has actually confirm the payment. I do have to say there is service which Paypal offers where you can set it up so the Paypal’s system will send you the information into the url you specify. It will even try couple of times if it fails. I have not implemented this as I do not expect tons of users signing in and I can always check every user in my Paypal business account. I would consider implementing this as it sounds like a useful feature but I am hoping that there will be better system for recurring payments in our area in the upcoming future.
This is not ideal as it requires you to be part of the whole payment system in some kind of managing role but it is the best I am come up with. If you have better idea which can be used in our territory please let us know. I hope I helped you to save some time researching how the whole process works.