Hello all,
I'm in the process of designing a new website and I would like your comments and bits of advice on some topics. The purpose of the website is to provide paid access to a certain set of applications (web-based, not yet developped, which gives us some freedom as to our choices). Moreover, we would like to post some news, give access to forums and ideally build a small community of people sharing a common profession.
Because of the latter requirements, I decided to go with Drupal (I'm familiar with it, although mainly having build small, simple, websites) which with all of its modules would most certainly cover all these needs. However, regarding the applications part, I was not keen on integrating them directly into drupal (as modules). The reasoning here is that I do not know how this project will go in the future, and if it goes better than planned, drupal might not remain the best option for my applications. Moreover, we might end up building something much more powerfull which will require more ressources (again only speaking only for the applications, all CMS-related tasks will still rely on drupal), maybe taking leverage of cloud-computing (EC2, S3, or similar)... Anyway, long story short, I want to make something that can be portable without recoding everything (using drupal forms is a no-go for instance), should we decide to expand.
We have not yet decided on how to charge the clients, but my guess is that we will deploy the following ways:
- a crediting system: the user buys credits and uses some of them each time he "runs" an applications
- a packages system: the user buys a package giving him access for X days/weeks/months to a given set of applications
For now, we will only focus on the first option (but I still wanted to mention the "packages" one in case you have something to share), which seems to be addressable via the Commerce and Userpoints modules (I also saw Commerce Credits, but it seems better suited for the "packages" option).
Now, on to the applications. As I said, I want them to be independent from drupal (maybe on different servers, different domains), but I still need to connect to it somehow for authentication, payment and such. Each application will do a rather simple task: get input from user via forms (eventually multi-step ones), validate input, compute a result, charge the user and send him back the result. I'm moving toward a solution where each application provides a specific interface for the aforementioned actions and I will develop a drupal module that will call them approprietaly, log any action I want to log (for statistics, monitoring, etc.) and so on. This connection will most certainly be implemented via Web services, XML-RPC, or such. I was also considering developping all applications on some framework like CakePHP but I don't think MVC is quite needed here, and feel like this part is more of "hand-made" kind of task.
What is your take on all of this. Am I missing something? Are there some modules out there that might make it easier/better? Is this the right way to go (via a custom module I mean), or should the applications be directly accessible (in which case the application authenticates the user via drupal, verifies and takes the credits, logs, etc.; if so, how can I do all that if I'm on a different domain [especially the authentication, since if the user is connected to drupal, I don't want him to give again his credentials when running an app])?
Your comments and thoughts will be greatly appreciated! Many thanks.
Comments
.
Yeah, that's how I would do it. A packages solution might have a couple of hidden fields on the order for a product that relate to expiration. You won't get anything out of the box that will allow you to configure a package or credit system with Services 100%, but you can configure it up to the point where you need a module to handle specific services or some expiration field handling.
Some way of verifying the identify of the Services call. I wrote my own vendor module for a specific situation that generates keys for that.
Edit: in the most recent model I have done license/entitlement was done with several custom entity modules where a license is associated with a user and a product (and some other things). And then I had a license expiration date field on the license object. In my web services calls, I check license expiration in my resource access callbacks. Before that part, when I launch a product I need to send to a url with some parameters so that the app. knows what user to check entitlement for. This can be done with OAuth or a custom services authentication scheme or your own access scheme.
how about you site
I am doing the same thing, have you finish it.