E-commerce is an important tool that allows companies to advertise and sell their products and services via the web. Today many online shoppers will not tolerate very many problems during their online shopping experience before they search for another website to make their purchase. So for companies in e-commerce its integral that the purchasing process operate perfectly to mitigate the risks of losing sales. Drupal offers several e-commerce features though the two most widely used modules are called E-commerce and Ubercart. Both modules contain several sub-modules that will satisfy the e-commerce needs of most of the sites.
The Drupal module E-commerce is a contributed module that has long been available, though the first versions had limitations that has caused it to be re-factored many times. The latest version of the E-commerce module is currently version 4, which provides a more flexible and secured architecture that allows developers to extend the core functionality to provide additional e-commerce features. Moreover, the E-commerce module contains built-in integration with very popular modules such as Views, Rules and Chaos tool suite.
Ubercart began as a fork of the initial E-commerce module, created to provide a more complete and user-friendly e-commerce solution out-of-the-box. Since version 2, it took a slightly different approach to improve its flexibility and provide a stronger API for developers. It integrates with many popular modules as well, such as the Content Construction Kit module which provides the ability to attach more data to products and the Google Analytics module which integrates with the Google Analytics services to provide tracking and statistics data.
There are several features in common between these two popular e-commerce modules, however they also have some differences. I think a better way to understand which module is suited to your needs is through a comparison table:
|Create Products||The E-commerce module allows defining different types of products that can be assigned to single or multiple content types. Additionally, it allows specifying whether anonymous users are allowed to buy the product or not.||Ubercart leverages the Drupal content type capabilities to create a new product type just by creating a new content type. Several options can be configured for each content type and for each node.|
|Product Catalog||The integration of Views with the E-commerce module allows site developers to create a catalog of products.||Ubercart provides a built-in catalog feature that displays the products in a hierarchical way. Ubercart has also been integrated with Views as well which allows you to create a catalog of products for users.|
|Invoices/Order Management||The E-commerce module manages user’s orders through receipts which are created once the order is placed. Invoices are automatically generated.||The Ubercart has a full featured orders management function which allows site administrators to view edit and create orders|
|Shopping cart||Both modules provide a block and page to display the current items and their quantity in the user’s shopping cart. This feature is very similar for both modules|
|Site Subscriptions||E-commerce module is more flexible when creating site subscriptions. It can be implemented by granting roles through the Rules module which is a powerful module that also allows handling several conditions and actions when a transaction is completed.||Site subscriptions can be done by adding the grant role feature which is tied to the product. This is a more straightforward way for the site builder but it lacks the power and flexibility of the Rules module, it also assumes that the order state must be “completed” to grant the role.|
|Product Fees||Product fees are known as charges in the E-commerce module. The module allows setting different charges to transactions or products by performing a calculation over the different values involved in the transactions including adjustments and discounts.||Ubercart allows setting fixed fees and taxes to products according to locations and some other variables. It is not as flexible as the E-commerce module but will be sufficient for most of the cases|
||There is no straightforward way to set up recurring payments here. According to the module page it is possible to set up recurring payments but it does not specify how in any place of the documentation.||There is another contributed module that handles recurring fees, these fees are attached to each product as attribute and the time start and time interval of the fees can be specified.|
|Addresses||E-commerce provides out-of-the-box fields to input billing and shipping addresses but it does not provide any front-end or server validation of state or zip code values||Ubercart provides a more complete solution that provides validation of the address before submitting the order. It also saves user addresses so it can be automatically selected when purchasing another product. Both modules should integrate the addresses functionality of a more generic module that can handle addresses in a more generic and better way such as the Location module.|
|Shippable Items||When defining the product type, site builders can specify if the product is shippable or not. Out-of-the-box the module creates two types of products: a generic product which is not shippable and another shippable product type. When purchasing a shippable product the corresponding rules and settings for shippable products applies such as input the shipping address.||When creating a product, this module allows defining if the product is shippable or not. There are several settings that can be configured for shippable items. Also it contains several sub-modules that integrate with fulfillment services such as UPS to process and track products delivery.|
|Customer Notifications||Several notifications options are handled through the Rules module. An e-mail notification can be sent to the customer every time the status of the order is updated.||The module provides several notification options through a module called conditional actions, which pretty much replicates what the Rules module does. This feature should be changed to leverage the Rules module capabilities which at the moment is far more flexible than the Conditional Actions|
|Inventory Management||An inventory can be set up to track availability of products by adding a specific attribute to a content type belonging to the set of products that are part of the inventory.||A similar feature is provided by this module through the Stock module which allows tracking the stock levels of the products.|
|Payment Gateways||The E-commerce module provides out-of-the-box a payment gateway to connect to the PayPal service for payments. There are some additional payment gateways for the E-commerce module such as Authorize.net but they had to be downloaded separately.||This module provides a wide set of payment gateways for the following services: 2Checkout, Authorize.net, Cybersource, Google Checkout, and Paypal. It also contains a Payment Method Pack that allows performing payments through checks/money orders or COD. In addition, a generic credit card module can be used by developers to ease the implementation any gateway that requires credit card payments.|
|Configurable Workflow||This module allows configuring different states of the order for different workflow purposes. The Rules module can be used as well to trigger different actions when transaction changes from one state to another.||Different workflow states can be enabled or disabled through this module. In addition, actions on states can be set by using conditional actions.|
|Reports||E-commerce provides basic reporting capabilities by displaying the receipts data and a list of transactions being placed.||Ubercart provides several reports features with statistical data. It also includes integration with Google Analytics which can help to keep track of customer’s interests|
|API||The API provided by this module is very straightforward and flexible and allows customizing almost every aspect of the e-commerce features.||The API of this module is also powerful but is not very straightforward in some cases. It can be difficult to customize, especially when trying to change a form that is presented to the customer.|
|Documentation||There is a lack of documentation for this module. There is not enough information provided on the project website.||There is a lot of documentation, tutorials, manuals and several blog posts in both, the Drupal site and the project main website.|
Ubercart contains a more complete package out-of-the-box that can be useful for several purposes, especially when integration with different services for shippable products is required. Customization is difficult to implement in this module because of some API restrictions and that more of the features are already implemented in ways that are commonly used; it can be difficult to change. On the other hand, the E-commerce module can be very useful when only specific features provided by this module are needed. The E-commerce module can also take advantage of its integration with the Rules module, which can be used to configure any type of custom functionality without the need of coding a new module.