Extension Point: Validate Product Sku at Checkout
Basics
| Parameter | Value |
|---|---|
| Extension Point Key | VALIDATE_PRODUCT_SKU_AT_CHECKOUT |
| Extension Point Name | Validate Sku at Checkout |
| Extension Interface | ProductSkuValidator |
| Supports Multiple Extensions? | Yes |
| Selector Type | Store |
| Available Since | 1.0.0 |
Use Cases
Extensions implementing this Extension Point can enforce business rules that prevent items from being purchased.
Methods
validate
The validate method is invoked for each item in the shopping cart during checkout. In Cortex, this happens when the cart order resource is read (GET), when the purchase form resource is read (GET), and when the purchase form is submitted (POST).
For the GET operations, if one or more extensions returns StructuredErrorMessage objects, then the action link is omitted, and the error message details are returned in the "messages" section of the response so that the shopper can understand why the cart can’t be purchased.
For the POST operation, if one or more extensions returns StructuredErrorMessage objects, then a 400 BAD REQUEST response is returned, and the error message details are returned in the response body so that the shopper can understand why the cart can’t be purchased.
note
The Validate Shopping Item at Checkout and Validate Shopping Cart at Checkout Extension Points are invoked at the same time as this Extension Point.
Extension Sample
@Extension
@XPFAssignment(extensionPoint = XPFExtensionPointEnum.VALIDATE_PRODUCT_SKU_AT_CHECKOUT, priority = 100)
public class SampleProductSkuValidator extends XPFExtensionPointImpl implements ProductSkuValidator {
@Override
public Collection<StructuredErrorMessage> validate(final XPFProductSkuValidationContext context) {
List<StructuredErrorMessage> results = new ArrayList<>();
if (context.getProductSku().getAttributeValueByKey("block-purchase")
.map(attributeValue -> (boolean) attributeValue.getValue())
.orElse(false)) {
results.add(new StructuredErrorMessage("unpurchasable-product",
"Product has 'block-purchase' attribute set.", Collections.emptyMap()));
}
return results;
}
}