Implementing E-Commerce on Your Linux System
Yams: A Real Surprise

Kevin Reichard
Monday, December 20, 1999 06:49:10 PM
Yams (Yet Another Merchant
System) may not be as highly publicized or promoted as TallyMan or
OpenMerchant, but in most ways it's the equal of both packages. Built around
Perl and back-end MySQL database (specifically, Perl 5_005_03, MySQL 3.22.25,
Apache 1.36, mod_auth_mysql 2,20 and mod_perl 1.21), Yams 0.5.5 runs in
conjunction with any Web server, either as a CGI script or as a Perl script
under Apache summoned under the mod_perl module.
It supports both physical goods (toys, books, merchandise, et al.) and
electronic goods (services, subscriptions, software downloads). (Be warned that
a reference to "affiliate programs" in the Yams documentation is
treated slightly differently in Yams than in TallyMan: in TallyMan you run the
program and disburse payments to those advertising your products on the Web,
while in Yams the assumption is that you're the one reselling items offered by
others.)
Yams already has addressed the shopping-card issue by including a persistent
shopping cart after a user has logged in. This means that a user can
at all times access their shopping cart to see what's been set aside, to delete
items or to check out of the system.
It also supports inventory tracking (when a product is out of stock, it
will inform the user), and sales-tax calculation (though not to the extent
offered by TallyMan).
We downloaded the source code and configured it on our Slackware Linux
7 server. Installation is rather simple, although it does help to know a little
about Apache, Perl and MySQL configuration. The first step is to properly
configure the back-end SQL database files. The MySQL file tables.sql contains
all the definitions needed to create the databases and tables used in the
system. To enable user registration, configure the http_auth
database.
The actual Yams distribution is stored in three directories: modules (the
actual code, which should be placed in the site_perl directory), scripts
(which contains all the Perl scripts that are called as CGI or mod_perl
scripts), and html (where HTML files are stored).
Preparing the Apache Web server for use as an e-commerce system may
require some small changes. First, Apache must have mod_auth to
be compiled into to enable the user registration system. The mod_perl
module must be compiled into Apache to run Yams as Apacha::Registry
scripts. (It's also necessary to define initial database connections in the
perl-startup.pl file, and the code to do this is included with the
distribution.) If Yams is to be run as a normal CGI script, then mod_cgi
must be compiled into Apache.
Most of the work in Yams is done in four Perl files: CreditCard.pm,
Shipping.pm, Template.pm, and YamsGlobals.pm. The YamsGlobals.pm is the
configuration file for the system, providing information about variables
and how to toggle them. The CreditCard.pm file contains the code used to
authorize real-time credit-cards transactions using the Signio (formerly
PaymentNet) authorization service--currently the only payment service set up,
but support for other vendors is planned. The Template.pm file specifies a templated header and footer around dynamically generated content. This templating ability is still
crude, but plans include the addition of several other
variables (such as a departmental image, a navigation bar, and more). Finally,
the Shipping.pm file calculates shipping per item or weight (using UPS ground
rates), with plans calling for an increase in the number of possible
shipping calculations. (To use UPS ground shipping and
calculate pricing based on weight requires the Perl module Business::UPS.)
The back-end administration tools are surprisingly robust. View all orders or a subset (for instance, only new orders or a specific customer's orders), order status, or item status
(inventory levels, which items are on order or back-ordered, retired items).
When an order is initiated, the system automatically assigns it a tracking number.
Set up an online store via departments and subdepartments. With these
departments you can have product categories.
By default, Yams stores various bits of information about products in
specific fields. These fields can be changed at any point, but for many online
stores the defaults should be more than enough. The default fields are: SKU
(the tracking number for the product; assign your own number or use the
same numbering system as the manufacturer), name, category,
department/subdepartment, platform (any, Linux, Mac, Windows, Windows/Mac, or
NA; these fields are pretty worthless outside of the software world!), type
(shipped, subscription, download, subscription renewal, affiliate, bundle), URL
for downloading, short description, long description, other text, small image
path, large image path, price, taxable, weight, domestic shipping cost,
international shipping cost, initial amount in stock, threshold quantity when
an administrator is notified and status.
In the Inventory area is a list of all the products with
number shipped and the current inventory. This is the most
rudimentary inventory-management system possible; other more sophisticated
e-commerce tools have links to back-end inventory managers or accounting
packages that can provide instant information about inventory levels.
Yams is unique in that it supports subscriptions--no surprise as
it was obviously designed with software management in mind. Many software
packages--including many Linux distributions--are sold on a subscription
basis, with the end user receiving all updates within a specified
period. Yams manages basic subscriptions, as well as supplying
subscriptions to specific groups (permissions that are administered via the Web
server).
Clearly Yams is still a work-in-progress and is missing essential
features. For instance, security isn't addressed in the documentation, and
while it's true that security in this situation is more a matter of the Web
server and the payment server enabling secure transactions, it would have been
nice to see those relationships spelled out more clearly. There's currently no
mechanism for automatically sending out electronic mail to both customers and
merchants when a transaction is completed, but sending confirmation mail out to
users is a critical part of e-commerce today. There's no search engine letting
end users search for specific items (although it shouldn't be hard
to implement one in Perl). We're hoping that these glaring holes are addressed
before an initial release.
Yams is distributed under the GNU General Public License. As stated earlier,
it has not received a lot of press to date nor attracted a lot of
developer interest judging by the lack of participation in the Yams
forums at the Open Forge site hosting it. This is a shame, as it's on its
way to being a very good open-source e-commerce package.
Next: OpenMerchant: Tested Under Fire »