Document Properties
Kbid
29H284
Last Modified
13-Oct-2021
Added to KB
12-Nov-2019
Public Access
Everyone
Status
Online
Doc Type
Concepts
Product
  • ICM 7.10
  • ICM 11
Concept - Cashback

Introduction

Info

The Cashback feature is available from ICM version 7.10.15.2 or later.

Cashback is a promotional activity that should encourage customers to make further purchases. When a customer places an order in the webshop, a certain adjustable amount of cashback money is credited to the customer's account.

This cashback amount is stored in the database after the order has been processed.

Depending on the configuration in Intershop Commerce Management, there are two options:

  • The cashback can be used directly in the webshop to get a discount on the next order using a generated promotion code, or
  • The cashback value can be used for further processing, e.g., in a third-party tool for collecting cashbacks, bonus points etc. 

Note

Cashback is currently only supported for B2C channels.

References

Cashback Process

The standard cashback process consists of the following steps:

  1. The earning of cashback in one order (earning process)
  2. The redemption of earned cashback via a promotion code in the next order, if configured (redemption process)
  3. The optional return process

Earning

When the cashback feature is enabled and a cashback promotion is configured in Intershop Commerce Management, all orders that are created through the order creation process will earn cashback. For every "earning order" a cashback object with a corresponding promotion code is automatically generated and stored in the database. Each cashback has a configurable validity period (e.g., 30 days). The corresponding order creation handler is "CashbackOrderCreationHandler".
Initially, a cashback promotion code has a theoretical maximum value. It gains its practical value for each shipped line item. This means the maximum cashback value is available once all line items are shipped. It is not available as discount immediately after purchase. In the Intershop Commerce Management this is handled with the Order Fulfillment Status Import, see Concept - Order Fulfillment Status Import

In case the earning order is returned (also via Order Fulfillment Status Import), the cashback that was earned with this order becomes invalid (voided) if it is not already redeemed. 

Redemption

If a promotion code was generated for the earned cashback, this code can be used to redeem the earned cashback amount in one of the next orders. If the cashback has a positive available amount, the promotion code can be applied to a basket even if there are line items from the earning order that have not been shipped yet. In that case only the available amount of the cashback will be given as discount and the remaining amount that is not charged yet will expire. The promotion code can only be applied once and the cashback is given as single order discount. If less than the available cashback value is used, the remaining amount expires. A cashback promotion code is bound to the person (registered or unregistered) that earned the cashback. Only this person can redeem the code using the same user account or e-mail address like in the earning process.

Info

Only one cashback code per basket can be redeemed.

The order that included a cashback promotion code is called redemption order for a certain cashback code. A redemption order for promotion code A can also be the earning order for promotion code B.

The redemption of the promotion code will be handled in the order creation chain handler "CashbackRedemptionOrderCreationHandler".

Return

If one line item of the earning order is returned, the whole cashback amount is voided.

Feature Flag and Preferences

The cashback feature can be disabled/enabled in the Channel at Preferences | Promotion Preferences | Cashback Settings as shown below.
It is also possible to maintain how the generated cashback promotion codes look like (code length, prefix, excluded characters).

When the cashback feature is deactivated after a certain time of activity, the earned promotion codes cannot be used anymore. Promotion codes that are already applied to a basket when the feature is switched off stay valid and will be redeemed in the order process.

At the end of a cashback campaign it is recommended to disable the earning promotion first and not to disable the feature at all. This ensures that no further cashback is collected but existing cashback promotion codes can be redeemed within the defined validity period.

Charging and Voiding

Order Fulfillment Status Import

When the Order Fulfillment Status Import is used to update the order / order PLI status information, the earned cashback will automatically be available when the product line items are delivered.

Info

Example

Earning order:

  • PLI1: 2 Notebooks
  • PLI2: 5 Cables

As soon as the 5 cables are delivered, the earned cashback of PLI2, e.g., 20 USD will be available.
The 2 notebooks are delivered one week later. Then the earned cashback of the PLI1, e.g. 100 USD, will be added to the available value of the cashback, if the cashback code is not redeemed yet.
The available value of the cashback for redemption with the next order is now 120 USD.

If an order or any order product line item with the status "RETURNED" is imported, the cashback will be voided.

After the fulfillment status import a CashbackOrderStatusChangeHandler is triggered to process the cashback in case of status changes for an order or a product line item. This handler also triggers the notification, see Notification Handling.
If a custom implementation of this handler is required, it can be replaced. See Recipe: Exchange the implementation of the CashbackOrderStatusChangeHandler interface for details.

Manual Execution

In case the Order Fulfillment Status is not imported via the Order Fulfillment Status Import, the charging and voiding of cashback promotion codes has to be triggered manually. This can be done by using a CashbackOrderStatusChangeHandler.
Here is a code example of how to call the handler:

Example - How to call the handler
...
@Inject
private CashbackOrderStatusChangeHandler cashbackOrderStatusChangeHandler;

// set status of order (only relevant for voiding cashback in case of return)
cashbackOrderStatusChangeHandler.orderStatusChanged(OrderBO, "DELIVERED", "RETURNED");

// set status of order product line items (important for charging of cashback for shipped line items)
cashbackOrderStatusChangeHandler.orderProductLineItemsStatusChanged(OrderBO, Collection<CashbackPLIStatus>);
...

CashbackPLIStatus is just an aggregated object to store the status (before, after) for every OrderProductLineItemBO.

CashbackPLIStatus
class CashbackPLIStatus
{
    OrderProductLineItemBO pliBO;    // The order product line items whose status changed
    String preFulfillmentStatus;     // e.g. "NEW"
    String actualFulfillmentStatus;  // e.g. "DELIVERED"
}

The standard implementation of the CashbackOrderStatusChangeHandlerhandler also triggers the notification process, see Notification Handling.

Notification Handling

In case the cashback is charged or canceled, the customer gets an e-mail notification from the mail service.
The standard CashbackOrderStatusChangeHandler implementation triggers the strict pipeline ProcessCashbackNotifications-NotificationCashbackCharged for charging and ProcessCashbackNotifications-NotificationCashbackVoided for cancelation.
Each of these pipelines contains a pipeline extension point with the following parameters:

  • CashbackInformation (contains all the needed information about the cashback)
  • NotificationType (TOTAL_DELIVERY, PARTIAL_DELIVERY_INITIAL, PARTIAL_DELIVERY_INTERMEDIATE, PARTIAL_DELIVERY_FINAL), only for charging
  • ApplicationBO (optional)

which should be used to connect to a mail notification. 

By default there is a storefront pipeline (ProcessCashbackNotificationsExtension.pipeline) connected to the extension points which sends e-mails to the customer on every cashback status change. If this is not suitable and should be changed, a custom implementation can be added (Recipe: Add a Custom Cashback Notification Extension) or the current implementation can be replaced (Recipe: Exchange Standard Cashback Notification With Custom Implementation).

Implementation

Promotions

The cashback earning promotion as well as the cashback redemption promotion are based on promotions with specific settings and also a special condition and action.
The cashback condition and action are only available if the cashback feature flag is enabled.

The setup of cashback promotions for cashback earning and redemption is explained in the following paragraphs.

Cashback Earning Promotion

This promotion is necessary to earn cashback. Consider the following settings:

General Settings


(1) Priority: Use the lowest priority (0) to ensure that the cashback earning is the last promotion and all other discounts are subtracted first.
(2) Calculation: The calculation should be based on the discounted price to ensure that the cashback is earned for the final price where other discounts are subtracted first.
(3) Combination: Cashback earning promotions are always combinable with any other promotion, independent of this setting.

Target Group


Ensure that an appropriate customer segment / customer is selected as target group. 
It is also possible to have multiple cashback earning promotions, e.g., for different customer segments with different validation periods.

Promotion Code (Optional)


If the promotion should be triggered by a promotion code, Promotion Code Required must be checked and the corresponding promotion code configuration must be provided.

It depends on the requirements if the cashback earning promotion should be triggered by code or not. Therefore this setting is optional.

Discount Rules

(1) The cashback earning process requires a promotion that uses the Cashback Earning Condition. Using this condition, the entered promotion discount is not an actual discount anymore but rather treated as the value of the cashback. It has two configuration values:

  • Promotion Code Group (optional) - if configured, a promotion code for every cashback is created in this group; this group will then be used in the cashback redemption promotion.
  • Validity Period (mandatory)- every cashback expires after this time period.

(2) The Cashback Earning condition can be combined with other conditions e.g., Minimum Order Value.

(3) The Promotion Discount defines the value of the cashback. This could either be a fixed amount (e.g., $10 for each order with a minimal order value of $100) or a percentage-based amount on the order value (e.g., 10% of the order value, max $200).

Messaging

Messaging corresponds to that of a regular promotion, see paragraph Storefront for details.

Cashback Redemption Promotion

This promotion is necessary to allow customers to redeem their earned cashback from previous orders with promotion codes.

Consider the following promotion settings:

General

(1) The cashback redemption promotion has the highest priority per default (see (2)).

(2) Select whether this promotion should be combinable or not. Due to the fact that it has the highest default priority, this promotion will always be the first (and only one, if not combinable) that is executed.

Target Group

Select an appropriate customer segment and/or customer etc.
The cashback redemption promotion should only exist once in the system for everyone. Since the cashback is stored customer-specifically, the customer check is executed implicitly during the code redemption process.

Promotion Code

(1) This cashback redemption promotion requires a promotion code.

(2) This code is stored in a promotion code group.

(3) This is the same promotion code group that was already selected in the cashback earning promotion condition, see Discount Rule tab of the cashback earning promotion.

Discount Rules

(1) Cashback redemption can be freely combined with conditions like Item Inclusions/Exclusions to restrict the assortments earned cashback can be applied to.

(2) The cashback redemption process requires a Cashback Redemption Discount as action. No configuration values are needed. The earned cashback is provided as order discount.

Messaging

Messaging corresponds to that of a regular promotion, see paragraph Storefront for details.

Storefront

Earning Cashback

In the inSPIRED storefront, information of earned cashback is displayed in the order summary box that is shown on the cart page and on all checkout pages (default/cart/common/CostSummary.isml). Since cashback is not a real discount, it is displayed separately below the total price.

The appearance of the information can be configured in the Messaging tab of the promotion configuration page.

Default Title

If no title is defined in the Messaging tab, the default title will be displayed in the order summary box.

Intershop Commerce ManagementinSPIRED Storefront

Custom Title

Intershop Commerce ManagementinSPIRED Storefront

No Message

If the checkbox Disable Messages is enabled, no cashback information is shown in the order summary box.

Intershop Commerce ManagementinSPIRED Storefront

Redeeming Cashback

The display of the cashback redemption promotion follows the standard promotion process for Order Discounts.
In the inSPIRED storefront, information about the promotion is displayed in the order summary box that is shown on the cart page and on all checkout pages (default/cart/common/CostSummary.isml).
The appearance of this information can be configured in the Messaging tab of the promotion configuration page.

Default Title

If no title is defined in the Messaging tab, the default title will be displayed in the order summary box.

Intershop Commerce ManagementinSPIRED Storefront

Custom Title

Intershop Commerce ManagementinSPIRED Storefront

No Specific Message

If the checkbox Disable Messages is enabled, no specific cashback information is shown in the order summary box.

Intershop Commerce ManagementinSPIRED Storefront

Database Design

The cashback objects are stored in a separate table cashback. The entities have relations to the promotion code entities to store the promotion code (if configured) and also two times to order entities to store the earning and redemption order.
Except for a technical relation to a domain entity, all entities are loosely coupled without foreign key relations. This allows to ease possible migrations of existing cashback implementations.

Personal Data / GDPR

Personal Data Request

The earned cashback objects will be exported within the set of personal data. The exported data consists of the following fields for cashback:
AVAILABLEVALUE, CREATIONDATE, CUSTOMERNO, EMAIL, EXPIRATIONDATE, PROMOTIONCODE, REDEMPTIONDATE, REDEMPTIONVALUE

Account Deletion of Registered Customers

If the account deletion is requested for a registered customer, all earned cashback objects including promotion codes are automatically removed from the system and therefore cannot be used anymore.

Account Deletion of Unregistered Customers

When an unregistered customer requests the deletion of personal data, the customer representative has to do a manual search for earned cashback of the customer via e-mail address (1)+(2).
Then all entries can be selected (3) and deleted (4).

Disclaimer
The information provided in the Knowledge Base may not be applicable to all systems and situations. Intershop Communications will not be liable to any party for any direct or indirect damages resulting from the use of the Customer Support section of the Intershop Corporate Web site, including, without limitation, any lost profits, business interruption, loss of programs or other data on your information handling system.
Home
Knowledge Base
Product Releases
Log on to continue
This Knowledge Base document is reserved for registered customers.
Log on with your Intershop Entra ID to continue.
Write an email to supportadmin@intershop.de if you experience login issues,
or if you want to register as customer.