I'm thrilled to announce the release of a collection of modules used to drive a full-fledged ecommerce system from within Drupal. The design for this project was to create an extensible framework such that the payment methods, shipping methods, and design are built upon a pluggable architectures. Even the types of products you can create is pluggable. Currently, shippable items, services, and product packages are supported. I plan to have support for file downloads within a month.

By default PayPal is used to process payments. I have also integrated their IPN system, allowing you to track orders and automatically send invoices upon successful payment.

If you sell shippable items, three shipping calculation methods come with the package. Furthermore, you can enable inventory management for the products whose stock you wish to track.

The store can be configured so that users can make a one-time transaction, or they can create an user profile and have their shipping and billing information retained from order to order, speeding up the checkout process next time they return.

Finally, a workflow system has been built for transactions and payment status, allowing you to easily send shipping notifications, print invoices and update or manually create new orders.

You can view the project details and download the code here. To install, drag the entire ecommerce directory into your Drupal modules folder. Then follow the instructions in the INSTALL file via the ecommerce/store directory.

Special thanks goes out to the Drupal developers, who were always there for help and beta testing. Viva la Druplicon!

Good times,
matt

Comments

rinehart’s picture

I've been eagerly anticipating this moment! I'm glad it came before my Go Live date so I have time to implement and configure for my magazine.

Question: does the system allow you to set an inventory amount and control sales based on available stock? For example, it would be nice to tell customers when their item is in stock or on back order at the time of sale. Alternatively, sometimes items are made to order, allowing unlimited stock, while others are one of a kind that should be sold after the first item is gone. What scenarios can your system handle?

Thanks,

Mac

matt westgate’s picture

For each product, you decide whether or not you want to track it's inventory. If you don't track inventory the item is considered as always available. You can change this option at any time.

If you are using inventory management, whenever an item is sold, that quantity is deducted from the number in stock. When stock reaches zero, the 'add to cart' link changes to 'sold out'.

And when dealing with product packages, if any of the single products within the package are under inventory management, then as soon as that product reaches zero stock both the package and the single unit will be marked as 'sold out'.

adrian’s picture

I vote that this gets added to the drupal features list, and a new case study for an e-commerce site gets added to the documentation.

Once i get the core system install api working perfectly, I am almost definately going to make this the first contrib module i write a .install file for.

lapurd’s picture

Great work mathias, allow me to hereby predict my project will learn to modulate with yours, have great influence on drupal and 'some other' things.

Unaware, you proove things beyond Drupal's collective imagination. That is all I will say for now, apart from: alignment of interest.

matt westgate’s picture

you proove things beyond Drupal's collective imagination

Uhm, I'm more an eclectic thief than anything else. Thanks for the nice comments, though.

lapurd’s picture

Nevermind now, it prooves some points - later

Iangbruk’s picture

I noticed another post you made:

No plan, other ways
Submitted by lapurd on March 24, 2004 - 22:10.
Some ways involve helping all future drupal financially.

I've been thinking along the same lines. How much "later" is the later you refer to :-)?

zaur1945’s picture

I have website based on oscommerce http://www.smsaudio.co.uk
I wonder can have opportunity to integrate it to drupal ecommerce?

yktdan’s picture

Fatal error: Call to undefined function: drupal_set_html_head() in /home2/trails/public_html/drupal/modules/ecommerce/cart/cart.module on line 75
------
It looks like a CVS version rather than latest stable version problem. The function is defined in CVS and not in stable.

I presume there is no stable version and I have to convert to CVS for everything. I presume that is not a good idea for a production system.

Walt Daniels

matt westgate’s picture

This package is set to be released with the next version of Drupal which is about a month away. It will not work for 4.3 versions or earlier.

yktdan’s picture

There seem to be too many copies of addresses. Drupal itself has addresses of registered users. Ecommerce has address, shipping address and billing address.

I would like to see an extensible membership info module that is used for everything. I work with a non-profit that tracks all sorts of information beyond name, address, phone and email. Most of this needs to kept relationally rather than in a flat file, e.g. people have seasonal addresses and phone numbers.

Walt Daniels

matt westgate’s picture

The ecommerce package comes with a stand-alone address module and is not dependent on the package in order to be used. If you read the README of this module, you'll see I have plans to add other metadata such as address categories and the ability to set default addresses.

Gunnar Langemark@www.langemark.com’s picture

"I work with a non-profit that tracks all sorts of information beyond name, address, phone and email. Most of this needs to kept relationally rather than in a flat file, e.g. people have seasonal addresses and phone numbers."

I believe it is very important to understand this. For Drupal to be usable in an e-commerce setting or as a member-system you need to be able to set up payment method, shipping-address, billing-address etc. You also need to be able to set up subscriptions with rolling renewal dates etc. (ie not just subscriptions from "beginning of year" to "end of year").

At a superficial glance, it seems that there are no problems here. I hope it proves to be the case.

Dropping in from Langemarks Cafe.

lemius’s picture

But be sure to make it a little flexible. Incase say they want to change the shipping address for one order. For example I just bought my girlfriend a digital mouse frmo NewEgg.com. But she lives in another state. See what I mean? Like I said though, I'm sure that's covered.

kbahey’s picture

Mathias!

You are one creative and imaginative dude!

Thanks for thinking out of the box of Content Management, and giving Drupal yet another powerful feature for those who need it.

This also proves how the Drupal design is such a great thing, so extensible and modular as to allow this type of functionality to be added.

(Now if someone could add a generic database API, where tables and column are defined, and forms for populating them and querying them are generated, that would be yet another good idea to build all sorts of stuff on top of it: Your CD list, your address book, ...etc.)

--
Drupal performance tuning and optimization, hosting, development, and consulting: 2bits.com, Inc. and Twitter at: @2bits
Personal blog: Ba

moshe weitzman’s picture

you just described the amazing flexinode.module. check it out (CVS Drupal only).

Brian@brianpuccio.net’s picture

I think this module further defines what Drupal isn't. Druapl isn't a blog, or forum, or project management software; Drupal's modules are all of those. Drupal is a framework under which pretty much any web-based application can be developed.

yktdan’s picture

In a quick read of the code I saw several things that I need and did not see.

One of our "products" is a donation which doesn't have any set value that can be put into the database. There may be a new field entry needed to mark this as special because no particular value is reserved, e.g. $0 is not usable because we have some items we give away if requested. We would not want all amounts to be changeable by the user. Perhaps the ptype field can be used.

Second, we have a fixed shipping cost per item and there is no field per item to contain it.

Third, we give discounts to members. There needs to be some place to record and calculate that, e.g. a fixed percent off the list price, but not including dues, donations, etc. So perhaps each item needs a discount field. To further complicate things we have a separate discount schedule for wholesalers which we currently handle outside of our ecommerce but they are a major part of our inventory transactions.

We will be implementing a Verisign Payflow payment module (anyone want to help?)

Is there a sample store up and running anywhere? I am nowhere near ready to turn one on on my site and would like to see how things look.

Walt Daniels

matt westgate’s picture

I'll respond to these questions if you file feature requests for each one of these. The forum isn't the best context for this.

Also, contact me via email (found in the README) and I'll provide you a link to a live store.

matterdaddy’s picture

Hi - Is there a reason why http://drupal.org/project/ecommerce is protected. When trying to access it gives an error saying, "You are not authorized to access this page."

Hmmm...

svemir’s picture

I an getting the same "not authorized" error. However, direct link to issues and downloads still work:

http://drupal.org/project/ecommerce/issues
http://drupal.org/drupal/cvs/modules/ecommerce-cvs.tar.gz

Lets hope the main project page is just temporarily out of reach...

kc’s picture

First of all, this is a great module, and I can see a lot of work put into it. Thanks for sharing with the community.

I realized one thing sort of diabled in this module, which is available in Drupal otherwise. path.module. This is an awesome feature in Drupal and helps a ton with google ranking. How? When you create aliases for your URLs like "my-cool-product.html" instead of "node/view/123/" it greatly helps with search engines. If somebody is searching for the phrase "cool product" or "my cool product", your site is most likely to be listed higher in results with "my-cool-product.html" than "node/view/123/"

Would it be too difficult to add this feature already available in Drupal to ecommerce module?

Thanks
KC
------------
My Sites:
powershotblog.com | one-stop-ecommerce.com | amazam.com

erikhopp’s picture

enable the path module in the modules configuration and change the path alias for each node to whatever you want.

kc’s picture

In fact I have already enabled the path.module, and it is available in stories, and blogs and such but not in ecommerce.:-(

Thanks

My Sites:
powershotblog.com | one-stop-ecommerce.com | amazam.com

matt westgate’s picture

Please file a bug report with exact instructions on how to reproduce this problem. Also, let us know which version of Drupal you are using and make sure that you have the latest copy of the ecommerce package.

pruner’s picture

does the latest copy of the ecommerce package work with Drupal 4.4?

matt westgate’s picture

Originally I was going to release it for 4.4, but then I felt it wasn't user-friendly enough and still needed some polishing. It'll be ready for the next release though, and with documentation from Keith Daniels.

mbacas’s picture

I have 4.4.1 of drupal installed and ecommerce seems to have installed and working okay. I think.

I guess I have a few questions.

What would a sample taxonomy look like for a ecommerce site?

I sell pens (fountain, rollerball, etc.) Most pens are "one of a kind" items. Some are vintage and some are new.

Would I setup a vocabulary for the whole store? And then terms for the different types of pens I sell?

Or would I setup a vocabulary for the different types of pens I sell and a term for every item? (That seems like too much, must not be that).

Then last question. How does one go about building the store pages with the items on it? Is this built automatically? Or does one just list a bunch of product nodes on a page? I guess I was looking for something like http://www.site.com/store. Kinda like the tracker (recent posts) or forum (Forums).

Sorry if these questions are in the wrong place. I'm still kinda new to the drupal system.

Is there a way to test the PayPal process without being charged anything? How was this tested? You setup .10 items or something?

Matt, the ecommerce looks like an incredible package of modules.

Thanks for any help,

- Mark

kc’s picture

I thought this was omitted from ecommerce module, so it looks like it normally works but I am having the problem in my installation?

I filed a bug report as you mentioned, but basically the only problem is that path alias texfield which is usually under the title textfiled and above the body text area is not there in ecommerce (or in my installation at least)

Thanks
KC

My Sites:
powershotblog.com | one-stop-ecommerce.com | amazam.com

kc’s picture

Actually I noticed that path alias was in fact available but it was a bit tricky to find it. When you select create content and enter a bunch of information like the TITLE, DESCRIPTION, PRICE etc, it is not available there unlike other nodes like blog, story.

However, if you go to administer/content and select the product, or click on the administer link under the node, then you have the path alias textfield available again.

That was a big relief but a bit tricky. I wanted to let others know as well, in case they get confused like me.

Thanks again for this awesome module.

My Sites:
powershotblog.com | alafranga.com | one-stop-ecommerce.com | amazam.com

Danio’s picture

How do you sell a service? The only options I see are: file download, collection of products, and shippable product.

matt westgate’s picture

I haven't come up with a way to sell services. You could sell a 'file download' product which is a contract outlining what you'll offer or something like that. Just an idea.

pamphile’s picture

I really like the feature:

"Dynamically adjust item prices for a given group of users"

I can see this being used as an purchase incentive.

http://01freelance.com - http://scriptdiary.com - http://01wholesale.com - http://businessletters.com

pamphile’s picture

matt westgate’s picture

I don't have any demos right now, but one way this works is you can adjust the price for a group of users belonging to a specific role. Say all users of group 'happy people' receive a 10% discount just for being happy.

You can also adjust individual prices at the item level. For example I'm writing an auction module for the ecommerce package and this will allow to offer bidding on items.

blowe’s picture

This is a great feature and I plan to switch our online store and classical education website to drupal soon. I noticed that there haven't been many posts recently. Is this module still being actively developed?

Brian Lowe
Memoria Press
http://www.memoriapress.com

robertDouglass’s picture

This module is one of the most actively maintained in all of Drupal-land. Check the cvs messages ( http://drupal.org/cvs ) to see the real activity. Last commit to the ecommerce module was just minutes ago: http://drupal.org/cvs?commit=12797

- Robert Douglass

-----
visit me at www.robshouse.net

Netlynx’s picture

I'm about to have a look at this for a project coming up.
Is it fair to compare it to osCommerce - is it that feature rich?

I am interested to know if anyone has used this module that might be able to compare it to osCommerce for flexibility, features and robustness?

Does it have tax and/or currency flexibility (i.e is it designed around EU/UK/US regime or is it generic)?

The example sites don't appear to be really pushing it hard - are there any complex commerce sights using it yet?

Any info woulld be of interest. In the meantime I guess I'll go see for myself.

Andy_Lowe’s picture

I make a living running several live ecommerce site using osCommerce including http://www.vittitow.com and I have set up and tested this Ecommerce module. I sell millions of dollars a year online and I try to keep up with most shopping carts out there. My opinion is that this module is a great start, but does not yet have the flexibility that many ecommerce sites need. osCommerce has 2,372 contributions (modules) for shipping, payment methods, order editing, virtual products, taxes, froogle and yahoo feeds etc. . .
That being said I think this module has the potential to be much better then osCommerce with development. I plan on keeping a close eye on this module and switching as soon as I can. Even better, I hope to contribute some code.

Here is a short list of pro's and con's for each as I see it.

Everything I say below is just my opinion and could be full of crap.

osCommerce pros:
Designed from the ground up with multi-language and multi tax scheme (European) support
Extensive list of modules for functionality.
Good support system including paid consultants if necessary.
Good community of contributors*

osCommerce cons:
osCommerce development is ruled in a draconian manner by two core developers who are IMHO to rigid and idealistic. Read more about it here:
http://forums.oscommerce.com/index.php?showtopic=119565&st=40&p=529332&#...
http://forums.oscommerce.com/index.php?showtopic=108051
HORRIBLE module management and integration. You have to be a good coder to install many if not most of the modules.
Poor search engine optimization.
By default osCommerce puts a high load on the server and can be slow for large sites.
By default osCommerce is only an average shopping cart. It is not until you look at the modules that it starts to shine.

Ecommerce module pros:
The features it has seem to be well thought out and implemented.
Kit support (multiple items as a single meta item ie shirt and pants as an outfit)
It is part of Drupal which allows for easy and extensive content creation around and in your ecommerce. I personally think this is a HUGE benefit.
Great search engine optimization. This is also HUGE, HUGE I say!
Workflow built into the back end.

Ecommerce module cons:
It is brand new as of writing this, Jan '05, so it doesn't have many modules or features. This is by far the biggest problem, but it is one that can and hopefully will be fixed.
It has the potential to be as slow or slower then osCommerce, but that is the price you pay for flexibility and features. Buy a bigger server.
Drupal's language support is not as good as osCommerce's and this module doesn't have the tax flexibility of osCommerce.
This module does not have the huge community of osCommerce, yet.

Everything I said above is just my opinion and could be full of crap.

So basically, if you only have basic needs from your shopping cart, then this module is great. If you need more advanced features, then I would wait until more development has been done. When this module is more mature it will rock. It definitely has the potential to be the best open source shopping cart I know of.

Andy
http://www.vittitow.com

Poolio’s picture

I've been using it on my site since July... although I didn't have all of the functionality until my recent upgrade to 4.5.x (since it wasn't intended for use on 4.4.x)

Poolio’s picture

Mathias (the contributor of ecommerce) did my upgrade, and he's also done some custom work on the module for me. I've been extremely pleased with all of the work he's done on my behalf, and that of the Drupal community at large.

jjeff’s picture

Currently, shippable items, services, and product packages are supported.

I'm not seeing the "services" option for intangible products. Has this changed, did I screw up the installation somehow, or is there a services module to install? Everything else seems to be working fine and I show menu options for "File Download", "Collection of Products", and "Shippable Product".

I'm trying to setup a system where people can buy classes and workshops.

Thanks for any help you can offer.

Jeff

jjeff’s picture

I really should have read ALL of the previous posts.

Mathias wrote:

I haven't come up with a way to sell services. You could sell a 'file download' product which is a contract outlining what you'll offer or something like that. Just an idea.

Sorry for the bandwidth.

Any progress on this? Other solutions?

Jeff

matt westgate’s picture

A possible solution is to use flexinode to create the information for your classes and then make those nodes products as well. For now, you could use the 'tangible' product type until I create a services product. What's really needed is the ability to create a generic product since all you would probably want to do in this case it tie a price to it. Flexinode can do the rest.

AliaK’s picture

hello, thanks for a great module. I saw the demo at the drupal conference and have tried it out tonight. I have a couple of questions (not sure if these are just config issues on my part or new feature requests)

- how would I get a $0 file download to go straight to order-complete so the person can download straight away. I know we could just have a download link (with an alias path) but we were hoping to use the reports for tracking more accurately (ie completed orders/downloads) instead of collecting possible cancellations from the download article/file. plus there are other items which have a price so we want to have them all in the one place.

the site is running on hosted space so uses poormanscron. I've tried it a few times, and also have been trying to setup a workflow to autoset to completed but I can't work out how to implement it. I don't see the workflow states of the payment methods in workflow module either though they're working, are they stored somewhere else? (thought I could compare to the existing ones)

thanks

matt westgate’s picture

Free products are now possible in the latest CVS version.

Regrading workflow. The ecommerce package uses its own workflow for the time being which isn't related to the workflow module. For Drupal 4.7, I hope to change this.

kbahey’s picture

You could experiment with the COD contributed module in ecommerce.

It allows checkout without a real payment being made, and can have any description you like (e.g. "gratis" or "free").

--

Consulting: 2bits.com
Personal: Baheyeldin.com

--
Drupal performance tuning and optimization, hosting, development, and consulting: 2bits.com, Inc. and Twitter at: @2bits
Personal blog: Ba

AliaK’s picture

thanks very much, I'll try the cvs version (for multiple free downloads). the cod works - it redirected it to a download page ok. I'll have a bit more of a play. cheers

varr’s picture

Ignore the following question.

I just realized that the cvs version is ready and waiting for an official release of Druple.

***********

I looked throughout the site and couldn't find an answer myself (I prefer to exhaust my search abilities before placing a post).

When do you foresee releasing 4.6 with support for subscriptions?

I have a client who needs to charge people for a subscription to see specific content on his website. Is there current support for this in 4.5?

***********

Thanks,
-Varr

enkydu’s picture

Does this mean the whole package available from CVS works with Drupal 4.6?

rmarioni’s picture

I'd also be interested to hear about paid subscriptions for premium content access...paid members only area so to speak in v4.6

enkydu’s picture

This looks like an excellent module and just what I need to complete a system of sites I'm building with Drupal. Thank you.

I have started building my applicaiton on Drupal 4.6. I note that the latest stabile release of the e-commerce module is for 4.5. Are there plans for it to work with 4.6? If so, any idea of when?

And/or does the CVS version of this e-commerce module work with Drupal 4.6?

jey2283’s picture

Can anyone help, i don't know what to do?
i keep getting the following error:
user error: Table 'jey2283_notes3.ec_product' doesn't exist
query: SELECT * FROM ec_product WHERE nid = 23 in /home/jey2283/public_html/notes/includes/database.mysql.inc on line 66.

but i loaded the store.msql file, and everything should be in the correct directory

when i try to make a product, i get the following error:
user error: Table 'jey2283_notes3.ec_product' doesn't exist
query: SELECT COUNT(nid) FROM ec_product WHERE nid = 34 in /home/jey2283/public_html/notes/includes/database.mysql.inc on line 66.
user error: Table 'jey2283_notes3.ec_product' doesn't exist
query: INSERT INTO ec_product (price, sku, hide_cart_link, ptype, nid, is_recurring) VALUES('100', 'tet23', '0', 'generic', '34', '0') in /home/jey2283/public_html/notes/includes/database.mysql.inc on line 66.
warning: Cannot modify header information - headers already sent by (output started at /home/jey2283/public_html/notes/includes/common.inc:384) in /home/jey2283/public_html/notes/includes/common.inc on line 192.

what am i doing wrong?

thanks

matt westgate’s picture

You don't have product module enabled.

Next time please file a bug report.

http://drupal.org/project/ecommerce

jey2283’s picture

When i enable the product module i get the following error:
user error: Table 'jey2283_notes3.ec_product' doesn't exist
query: SELECT * FROM ec_product WHERE nid = 23 in /home/jey2283/public_html/notes/includes/database.mysql.inc on line 66.

i'm sorry, did u mean start posting in the bug report, or next time as in new problem.

silurius’s picture

(moved to bug area)

manishnakar’s picture

I have installed ecommerce module, there are many steps to buy a single product, but I need to minimise steps to 3
:;

where user can select product, click on buy now and checkout.
I have files which user can download on successfull payment.

Can you suggest me how can I do this.

I dont need cart, shipping and payment options to select as I have only one payment option "paypal"

manish

Manish Nakar
ITVidya : India's First Technology Blogging Network
EbizLive : Business Winning Websites

thetoast’s picture

I'm trying to do a similar kind of thing as manishnakar, anyone got any ideas or is this not possible with the current ecommerce module? Seems a bit strange that you can disable the shopping cart but it's not replaced with anything else, i.e. buy now link.