I wrote a demo ‘PayPal Billing System’ which is used for shopping cart, or web sales marketing business purpose.
This full PDF document is from here: ‘PayPal Billing System‘
Many web applications are desiring to use ‘Online Billing System’ to charge users as profits, as far as I know, there are at least 2 popular ways to implement this function by integrating with PHP:
(1) Drupal CMS + Ubercart.
Ubercart is an exciting open source e-commerce shopping cart that fully integrates your online store with Drupal, the leading open source content management system.
This is the total solution: integrating users admin, billing system, products together as a whole service. By using existing Drupal framework and Ubercart open sources, the developing becomes easily and quickly, which is hot during these days.
Drupal+Ubercart are never the only solution, actually this mode are complained by its speed and performance.
(1.a) This development involves many modules, the compatibility and management are challenging; the performance are not guaranteed;
(1.b) The default tables are numerous, the relationship between the tables are weak; Things become difficult if you face 110 tables (my app) to maintain and utilize, the fact is that many of the tables are optional and not necessary, as well as some source codes.
(1.c) The speed is sometimes terrible slow, my friend used it several years and finally gave it up, and turn to Python + Djangle.
Suppose a customer just wants a simple and direct online-sales-billing-system, however, Drupal+Ubercart fill up the application with 80% un-useful material.
So Drupal+Ubercart are not suitable for any case.
(2) The second solution is PHP + ‘Billing system’ APIs, such as PHP + PayPal APIs.
The benefits are specific, direct, and high efficient. All the design and development focus on the application, the above PDF document gives some ideas of how to implement.
However, this way starts from bottom, is not easy to be scalable, and not as powerful as community open source software.
All depends on the real needs, and either way works.