Understand Punchout

The Retail Digital Commerce punchout features let you integrate an account-based store with a procurement system.

This section applies to OSF. This section applies to Open Storefront Framework (OSF).

This integration allows a shopper who is logged into a procurement system to access a Retail Digital Commerce storefront, view items from the assigned catalog, add items to the cart, and return to the procurement system.

Once the procurement system approves the purchase, it sends Retail Digital Commerce a purchase order, which is used to create the Retail Digital Commerce order.

Retail Digital Commerce punchout functionality is provided through server-side extensions (SSEs). Retail Digital Commerce identifies incoming punchout orders that come through the SSE (as cXML-based orders) by setting the originOfOrder property to punchout for incomplete orders and purchaseOrder once the order has been approved by the procurement system.

The following are some key terms that you need to be familiar with before you implement a punchout integration:

  • The procurement system is an external system where the buyer starts the shopping process, and where the buyer’s proposed purchases are approved.
  • The supplier/seller is the Retail Digital Commerce merchant.
  • A purchase order is a message sent from the procurement system to Retail Digital Commerce. The purchase order includes details about the cart the punchout shopper created. Retail Digital Commerce requires the purchase order so it can create an order.
  • After a shopper has submitted cart data to the procurement system, they may need to update the order. This is called a re-punchout. The only difference between the punchout and re-punchout process is that after the process has returned the security token, re-punchout creates or updates incomplete orders and returns the order information in JSON format. The procurement system passes the cart information in cXML format for re-punchout; no cart information is passed during punchout.

During re-punchout, if the cart contains an invalid product or SKU, Retail Digital Commerce automatically removes it. If the cart contains a product or SKU that is out of stock, it remains in the cart and storefront displays a message that notifies the shopper of its inventory status.

Punchout functionality can be implemented only for a Retail Digital Commerce store that is configured for account-based commerce. (See Configure Business Accounts for more information.)

Punchout is implemented using cXML (commerce eXtensible Markup Language) 1.2, which is an open-standard XML-based data-exchange format. Before configuring punchout, you should be familiar with cXML. For information about cXML 1.2, see http://cxml.org/.

Understand Retail Digital Commerce Punchout Limitations

Retail Digital Commerce does not support level 2 punchout, which implements CIF (Content Interchange Format) catalogs to allow shoppers to view your Commerce catalog on the procurement system’s site before punching out to your Retail Digital Commerce site to see real-time data, like prices, and add items to the cart.

Retail Digital Commerce does not support punchout marketplaces or networks, where buyers can connect to a number of different suppliers. Retail Digital Commerce supports only direct punchout.

Punchout can be used with most Retail Digital Commerce features that can be configured for account-based stores. However, punchout cannot be used with scheduled orders or quoting.

Configure CORS Support

To access Retail Digital Commerce endpoints from the procurement system, you must configure CORS (cross-origin resource sharing) support in Retail Digital Commerce by explicitly specifying the procurement system’s domain as one that is permitted to make requests to the punchout site. See CORS support for more information about configuring CORS support. See Work with the punchout server-side extension for details about the information that must be included in the punchoutSetupResponse Retail Digital Commerce sends to the procurement system (in response to the punchoutSetupRequest request).