We offer many pre-built e-commerce modules which can be used to build a company's e-commerce website. These modules are written in Java™ and can be customized to any company's needs. The primary database is Oracle 8i, though they can also work with Microsoft's SQL Server. These modules have been certified to work on Linux, Solaris and Windows 2000 operating systems, running under any standards-compliant Java Servlet container like Allaire's JRun™ or Apache Software Foundation's Tomcat.

We can also customize these modules to fit unique requirements of a company.
System Diagram

This module provides an entry-point into the system. It allows a customer to enter an order over an encrypted SSL connection. The front-end is designed in JSP (Java Server Pages), and can be customized for any company's needs. The order is received and stored in a database. If any e-mail or LDAP accounts need to be created for the user who entered the order, they get created at time of order acceptance as well.

If a credit-card transaction needs to occur, it happens before an order is accepted. Connectivity is provided for Authorize.net Payment Processing Gateway. Connectivity to additional Payment Processing Gateways like Cybercash can also be provided.

The order is stored in the database. Even if any internal errors happen in the processing of an order - network connectivity to the Payment Gateway, failure of E-Mail Server, etc., the application stores the order and flags the errors as required. If the database server fails, then the order is still logged in a file for manual entry by internal staff.

The module can be configured to send e-mail notifications about new orders to any number of personnel in the company. In case of failures or errors detected in order processing, system administrators can be notified as well. The e-mail's Subject can be customized depending on the nature of the notification (e.g. Successful new order, Error in Credit-card Payment Gateway, Database Failure, Email Server Failure, etc.).

Care has been taken for capturing the order without causing the user to be notified of any internal system errors. This prevents the customers from getting frustrated and turning away to some other vendors.

The order-entry module has its own separate denormalized tables to capture the order information. This keeps the logic simple, and less prone to failures. The data in these denormalized tables can then be extracted by background jobs and normalized into the real tables of the e-commerce system, so that it can be used across rest of the system. This also means that if the data has to be integrated into a company's existing system, then it can be easily done due to the clean separation mentioned above.

For companies that sell products and services in a combined manner, the order-entry module allows pricing these separately or in a combined manner. For example, if a company wants to sell wireless phones along with monthly subscription services, the application will allow definition of such pricing models. If the subscription services need to be activated instantaneously (like activating a cellular phone service), then the order information is communicated to the parent service provider through the Service Activation Module.

When a company sells products that could also be sold in Super-stores like Fry's Electronics, Walmart, K-Mart, etc., the application takes into consideration the fact that special shipping prices need to be applied when the customer is one of these Super-stores. If the product is usually sold along with a service or subscription (e.g. a cellular phone), the application knows that the service will be activated separately after an end-user has purchased the product from one of the Super-stores. Hence the products shipped in such an order have a special Service Status indicating that it is "Pending Activation".

The shipping module is useful when a company has an order-fulfillment center. This could be an external or internal center.

When an order has been received, it triggers a chain of events whereby the company's staff verifies the order, and sets the status of the order as "Ready for Shipping". Once this has been done, the Shipping Module extracts those orders and communicates them in a format required by the fulfillment center. This could be done via FTPing a delimited file, or posting the data to a website in any custom format.

The shipping module has pre-built functionality to do this kind of work, and it is a simple matter of customizing the format of extract files that need to be communicated to the fulfillment center.

The module also tracks the responses from order-fulfillment center, and stores the Shipment Tracking Number, and a variety of other information in the database. This is useful in analyzing the status of a shipment. Where there are failures in shipping a product, notifications are sent to appropriate staff in the company, and the database is updated to reflect such anamolies.

Where a company's business is to sell products as well as related services (e.g. wireless subscription plans), it is important for the service part to get activated when an order is accepted. Activating a service could be a simple task, wherein an internal database table needs to be updated, or it could be a complex task wherein the service information needs to be communicated to the system of the Parent Service Provider company.

When the order information needs to be communicated to an external system (Parent Service Provider), the Service Activation Module provides pre-built functionality to handle this. It extracts those orders whose service needs to be activated, suspended, re-activated or cancelled. This module has its own workflow for managing the requests sent to the external system, and tracking the responses received from it. If a "success" response is received, then the appropriate action is taken on the service. If the response is a "failure", many appropriate actions could be taken depending on why the failure occurred (e.g. Invalid Subscriber ID, Subscriber already Active, System Failure - Please Resubmit, etc.).

This module is aware of certain shipments of products shipped to Super-Stores, which should not be activated until an end-user has purchased the physical product. It therefore does not activate the service for such a product until the user comes in through a special web-page and confirms the purchase of a particular unit. Only then is the service for that product activated.

This functionality for service activation can be customized to each company's unique needs, though the core base for managing the workflow can remain the same.

This module provides a set of screens (either Web-based or Java Swing based) for internal staff of a company for managing the Service Accounts or Subscriptions of their customers. For example, if the customer wants to suspend his service for one month because he is going on vacation, the staff can update the status of his Service Account. This change of status is communicated to the external Parent Service Provider's system (if necessary) by the Service Activation Module.

This module allows recording of reasons for changing the status of a service or subscription, along with the staff's name and time when it was updated. This provides a complete audit trail of all the changes in a service's history.

This module provides a set of classes for managing communication with the Credit-Card Processing Gateway (Payment Processor). Pre-built connectors are provided for communicating with Authorize.net platform, while additional connectors can be easily implemented for CyberCash, etc.

The module can be configured to handle errors generated on the Payment Processor side. For example, if the Payment Processor returns an error message saying "Too Busy", then this module can wait for a few seconds and retry the same transaction. Also, if there are certain bugs on the Payment Processor which cause erratic behaviour intermittently, this module can be configured to recognize that and retry at certain intervals, or try an alternative URL for the Payment Processor. This ensures maximum probability of getting a transaction completed successfully.

This module also does basic Credit Card validations before submitting the information to the Payment Processor, thus preventing fake transactions being submitted by hackers.

When a company sells services or subscription plans which require periodic payments from the customer, this module allows for charging the customer's credit-cards at proper intervals. The module is capable of flagging credit-cards which are no longer active, and notifying the staff as well as the customer about such events. When a payment cannot be done automatically within a certain period of time, the module can be configured to suspend the customer's service or subscription automatically (with the help of Service Activation Module.

Customers with inactive credit-cards get a chance to enter new credit-card information to keep their service current. This is done by providing a hyperlink in the notification e-mail, which the customer can click and logon to their own account on the company's website.

The module allows for the company staff to prevent certain Service Accounts from getting charged. This is to allow for special conditions wherein a customer is actually a staff in the company, or a reporter who is testing the product, etc.

If the company has a network of Resellers who sell products and services in niche markets, they can ask their customers to enter orders through "branded" websites hosted by the main company. Or, it is also possible to provide special Web Pages for order-entry which would indicate that the customer has been referred to by a Reseller, and is eligible for special pricing.

The Order-Entry Module has the capability of processing orders received from Resellers or from customers of Resellers. Even orders entered by customers who have bought products from Super-Stores can be tracked, and commissions paid to the Super-Stores.

The Commissions module calculates the commissions that are due to each Reseller (with a maximum depth of 3 Resellers - i.e. a Reseller's Reseller's Reseller) based on rules configured in the system. These rules tell how much percentage of commissions to allocate to each Reseller based on factors like Volume of Sales, Types of Products sold, etc. These rules can be customized based on a company's policy.

This module is complimentary to the Reseller Commissions module. In addition to paying Resellers based on actual sales, a company may want to pay a Web Portal based on number of hits it generates on its website. This module stores complete information about the Re-directing Pages, and allows a company to monitor the success of their promotional campaigns by viewing statistics of each campaign.

The rules for calculating the commissions are stored in the Reseller Commissions Module. That module treats an Affiliate as any other Reseller, and calculated commissions to be paid.

This module provides a database-driven electronic catalog through which a customer chooses the products and services he/she wants to buy. These selections can be stored temporarily for a few days on the server, in case the customer wants to come back and buy them later. The cart allows for standard functionality for adding and deleting items, changing quantities, etc. Because the information is stored in a database, and not in the browser session, the user can login through any machine. For example, a user can initiate a purchase at lunch-time in office, and complete the transaction at home after dinner.


(c) Soorya Software Inc. 2001