Digital products are products such as downloadable music or books for which there is no physical fulfillment. Once they are ordered and paid for, they are immediately fulfilled.
To set up digital products, you can either use the existing “DIGITAL GOOD” product type or create your own ProductType (in seed data XML file) for which isPhysical=”N” and isDigital=”Y”. Then, products are created as “digital” by assigning them to this product type in the Catalog Manager.
Even though digital products do not have physical shipment, they still must be “fulfilled” or delivered to the user. This could be done by creating a service which should be executed each time the digital product is ordered and which performs the steps for fulfilling it. Then, the service needs to be associated with the digital product. This is done by setting up a Content entity with a serviceName field for the fulfillment service and associating it with the Product under the [Catalog] > product > [Content] tab. Associate it as “Fulfillment External Sync” for synchronous or “Fulfillment External Async” for asynchronous fulfillment. Synchronous fulfillment will happen as the order is being placed. Asynchronoous fulfillment will be scheduled as a batch job to run later. If the fulfillment fails once, the job scheduler will generally schedule it again. Generally, asynchronous fulfillment is better.
Be very careful: it is possible to have the same fulfillment service associated with a Product several times. This could cause the product to be fulfilled several times.
Email fulfillment is currently not supported.
When an order item is approved (typically by authorizing the credit card and approving the whole order), the system will check for order items which are digital products. If so, it will call fulfillDigitalItem, which will look for a service for fulfilling the digital product. All digital items on an order will be automatically invoiced and then marked COMPLETE.
This is all done with the checkItemDigitalFulfillment service, which fires off as a SECA when order item is marked ITEM_APPROVED, as defined in applications/order/servicedef/secas.xml
Fulfillment is done by the service fufillDigitalItems which is called from within checkItemDigitalFulfillment.