Broadleaf Microservices
  • v1.0.0-latest-prod

Release Notes for 1.7.0-GA

Requirements

  • JDK 11 is now required for Broadleaf release trains 1.7.0-GA, and beyond.

New Features & Notable Changes

Feature/Notable Change Related Services Links

Introduction of PaymentTransactionServices to store payment data and handle payment gateway interactions

CartOperationServices, OrderOperationServices, PaymentTransactionServices

Cart payment storage and management moved to PaymentTransactionServices

CartServices, CartOperationServices, PaymentTransactionServices

Replace Payment status concept with PaymentSummary

CartOperationServices, OrderOperationServices, PaymentTransactionServices

Checkout payment transactions are now executed via PaymentTransactionServices

CartOperationServices, PaymentTransactionServices

Move 3DS transaction recording endpoint to PaymentTransactionServices

CartOperationServices, PaymentTransactionServices

Update guest token logic to archive the cart’s related payments via PaymentTransactionService when a new guest token is created

CartOperationServices, PaymentTransactionServices

Update CSR and admin preview functionality to restrict access to payments in PaymentTransactionServices while the cart is owned by a CSR or preview session

CartOperationServices, PaymentTransactionServices

Introduced a payment locking mechanism to avoid multiple processes modifying a payment simultaneously

CartOperationServices, OrderOperationServices, PaymentTransactionServices

Introduced a payment time-to-live threshold for anonymous customers to protect their data

PaymentTransactionServices

Updated DefaultCartPricingService#allocateCartTotalToPayment(…​) logic to update the payment amount via PaymentTransactionServices

CartOperationServices, PaymentTransactionServices

Job responsible for reversing transactions marked with "REQUIRES_REVERSAL" have been moved to PaymentTransactionServices

CartServices, CartOperationServices, PaymentTransactionServices

Integrated with ShippingServices to determine shipping rates

CartOperationServices, ShippingServices

Improved support for OMS return/cancellation logic based on offer targets and qualifiers

CartServices, CartOperationServices, Order Services, OrderOperationServices, PromotionServices

Added tenant narrowing logic for scheduled jobs to ensure that they execute within the context of a single tenant

MicroMessagingCommon, DataTracking, ScheduledJobServices, CartServices, InventoryServices, CartOperationServices, MicroBulkCommon, ImportServices, MicroExportCommon, AuthenticationServices

Introduced support VAT taxes and tax codes

CartOperationServices

Introduced support for variant add-on pricing overrides

CartOperationServices, CatalogServices

Add max and min thresholds to cart item for use on frontend

CartOperationServices

Updated CartPaymentMethodValidationActivity to gather PaymentSummaries from PaymentTransactionService

CartOperationServices

Updated CartPaymentMethodValidationActivity’s validation to require that if the payment has a successful transaction, then that transaction amount must be equal to the payment’s amount

CartOperationServices

Updated CartPaymentMethodValidationActivity’s validation to require that the payment has a successful transaction whose amount is equal to the payment’s amount, if the transaction was expected to be executed externally - i.e. if broadleaf.cartoperation.service.checkout.checkout-transaction-external.{GATEWAY_TYPE} = true

CartOperationServices

Introduced mechanisms to remove CartItems if their related product is no longer exists in the catalog

CartOperationServices, CatalogServices

Populate offer proration type on adjustments from offer response

CartOperationServices, OfferServices

Populate OfferRef on Order and FulfillmentOrder adjustments

CartOperationServices, OfferServices

Removed PaymentGatewayCommon dependency

CartOperationServices

Bug Fixes

  • Remove cart version check from ManageCartEndpoint#getCart(…​) (the read cart endpoint), allowing the caller to always resolve their most up-to-date cart

  • Error when adding an item with multiple inventory locations or same sku for multiple vendors

    • Also impacts:

      • InventoryServices

      • AuthenticationServices

  • Fixed JSONMappingException when an empty page is gathered form ItemListOperationEndpoint

  • Fixed advanced tags and option values missing from Line Item DTO attributes sent to Offer Services to calculate discounts

Upgrade Guide

API Changes

Additions/Updates Removals
  • GET /cart/{cartId}

    • No longer requires cart version

  • POST /checkout/{cartId}/process

    • Now includes the cart’s related PaymentSummaries

    • Now returns FAILED_PAYMENT_TRANSACTION failure type, instead of FAILED_PAYMENT_CONFIRMATION in the case of a transaction failure

    • Now includes a collection of PaymentTransactionFailureDetails if the checkout attempt included failed payment transactions

  • POST /checkout/{cartId}/payments

  • PATCH /checkout/{cartId}/payments/{paymentId}

  • DELETE /checkout/{cartId}/payments/{paymentId}

  • POST /cart/payments

  • PATCH /cart/payments/{paymentId}

  • DELETE /cart/payments/{paymentId}

Message Payload Changes

  • CartOperationServices

    • CheckoutCompletionEvent

      • Since the cart no longer contains a list of its related payments, non-sensitive payment data must be gathered from PaymentTransactionServices. Note: in 1.7.1-GA, this data will be communicated as a part of the CheckoutCompletionEvent via a paymentSummaries collection.

Configuration Properties

Added Properties

  • broadleaf.cartoperation.service.checkout.checkout-transaction-types.{GATEWAY_TYPE}

    • Description: Describes the transaction type that should be used during checkout

    • Default value: AUTHORIZE

  • broadleaf.cartoperation.service.checkout.tenant.{MY_TENANT}.checkout-transaction-types.{GATEWAY_TYPE}

    • Description: Tenant-discriminated property describing the transaction type that should be used during checkout

    • Default value: AUTHORIZE

  • broadleaf.cartoperation.service.checkout.application.{MY_APPLICATION}.checkout-transaction-types.{GATEWAY_TYPE}

    • Description: Application-discriminated property describing the transaction type that should be used during checkout

    • Default value: AUTHORIZE

  • broadleaf.cartoperation.service.checkout.checkout-transaction-external.{GATEWAY_TYPE}

    • Description: Whether the checkout transaction occurs externally such as for transparent redirect. Otherwise, the transaction is created in Broadleaf during the checkout workflow. CartOperationServices uses this when validating payments to make sure that they have been executed by the external service.

    • Default value: false

  • broadleaf.cartoperation.service.checkout.tenant.{MY_TENANT}.checkout-transaction-external.{GATEWAY_TYPE}

    • Description: Tenant-discriminated property describing whether the checkout transaction occurs externally such as for transparent redirect. Otherwise, the transaction is created in Broadleaf during the checkout workflow. CartOperationServices uses this when validating payments to make sure that they have been executed by the external service.

    • Default value: false

  • broadleaf.cartoperation.service.checkout.application.{MY_APPLICATION}.checkout-transaction-external.{GATEWAY_TYPE}

    • Description: Application-discriminated property describing whether the checkout transaction occurs externally such as for transparent redirect. Otherwise, the transaction is created in Broadleaf during the checkout workflow. CartOperationServices uses this when validating payments to make sure that they have been executed by the external service.

    • Default value: false

  • broadleaf.cartoperation.service.checkout.transaction-retrieval-strategy-for-3-ds.{GATEWAY_TYPE}

    • Description: Describes when/how we fetch the checkout transaction for 3DS transactions during the checkout workflow.

  • broadleaf.cartoperation.service.checkout.tenant.{MY_TENANT}.transaction-retrieval-strategy-for-3-ds.{GATEWAY_TYPE}

    • Description: Tenant-discriminated property describing when/how we fetch the checkout transaction for 3DS transactions during the checkout workflow.

  • broadleaf.cartoperation.service.checkout.application.{MY_APPLICATION}.transaction-retrieval-strategy-for-3-ds.{GATEWAY_TYPE}

    • Description: Application-discriminated property describing when/how we fetch the checkout transaction for 3DS transactions during the checkout workflow.

  • broadleaf.cartoperation.campaignprovider.service-client

    • Description: The service client used when calling CampaignServices from CartOperationServices.

    • Default value: "cartopsclient"

  • broadleaf.cartoperation.cartprovider.service-client

    • Description: The service client used when calling CartServices from CartOperationServices.

    • Default value: "cartopsclient"

  • broadleaf.cartoperation.catalogprovider.service-client

    • Description: The service client used when calling CatalogServices from CartOperationServices.

    • Default value: "cartopsclient"

  • broadleaf.cartoperation.inventoryprovider.service-client

    • Description: The service client used when calling InventoryServices from CartOperationServices.

    • Default value: "cartopsclient"

  • broadleaf.cartoperation.offerprovider.service-client

    • Description: The service client used when calling OfferServices from CartOperationServices.

    • Default value: "cartopsclient"

  • broadleaf.cartoperation.pricingprovider.service-client

    • Description: The service client used when calling PricingServices from CartOperationServices.

    • Default value: "cartopsclient"

  • broadleaf.cartoperation.shippingprovider.url

    • Description: The base url for the ShippingService.

  • broadleaf.cartoperation.shippingprovider.all-rates-uri

    • Description: URI for retrieving a list of shipping rates for all available shipping methods.

  • broadleaf.cartoperation.shippingprovider.retrieve-rate-uri

    • Description: URI for retrieving a single rate for a specific shipping method.

  • broadleaf.cartoperation.shippingprovider.service-client

    • Description: The service client used when calling ShippingServices from CartOperationServices.

    • Default value: "cartopsclient"

  • broadleaf.cartoperation.paymentprovider.url

    • Description: The base url for an external payment transaction service.

  • broadleaf.cartoperation.paymentprovider.payments-uri

    • Description: The URI path for basic CRUD operations on payments.

  • broadleaf.cartoperation.paymentprovider.lock-payments-uri

    • Description: The URI path for locking multiple payments.

  • broadleaf.cartoperation.paymentprovider.unlock-payments-uri

    • Description: The URI path for unlocking multiple payments.

  • broadleaf.cartoperation.paymentprovider.authorize-uri

    • Description: The URI path for executing an authorize transaction.

  • broadleaf.cartoperation.paymentprovider.authorize-and-capture-uri

    • Description: The URI path for executing an authorize and capture transaction.

  • broadleaf.cartoperation.paymentprovider.service-client

    • Description: The service client used when calling PaymentTransactionServices from CartOperationServices.

    • Default value: "cartopsclient"

Removed Properties

  • broadleaf.cartoperation.service.price-invalidation.add-payment-method

    • Since the add payment call no longer goes through CartOperationServices, the request to reprice the cart should be coordinated by the service/resource that created the payment.

  • broadleaf.cartoperation.service.price-invalidation.update-payment-method

    • Since the update payment call no longer goes through CartOperationServices, the request to reprice the cart should be coordinated by the service/resource that updated the payment.

  • broadleaf.cartoperation.service.price-invalidation.remove-payment-method

    • Since the remove payment call no longer goes through CartOperationServices, the request to reprice the cart should be coordinated by the service/resource that removed the payment.

Application Configuration

As of 1.7, payment data storage and interactions have been moved to the PaymentTransactionService. This means that CartOps needs a payment provider so that it can communicate with PaymentTransactionServices to perform payment-related actions.

Additionally, CartOps is now integrated with the ShippingServices. This integration calls for a shipping provider to communicate with the ShippingServices to read shipping rates.

The following properties are required to configure the providers:

broadleaf:
  cartoperation:
    shippingprovider:
      url: 'https://localhost:8447'
    paymentprovider:
      url: 'https://localhost:8447'
Note

Default ports:

  • Min flex package: 8447

  • Balanced flex package: 9458

  • Granular flex package: 8476

Auth Configuration

Change in default client names for service-to-service communication

The default client configurations have changed for service-to-service communication.

In short, the following properties need to be configured:

spring:
  security:
    oauth2:
      client:
        registration:
          cartopsclient:
            authorization-grant-type: client_credentials
            client-id: cartopsclient
            client-secret: cart_ops_secret
        provider:
          cartopsclient:
            token-uri: https://localhost:8443/oauth/token

For more details on the full scope of these changes, please review the AuthServices release notes.

New Permissions

There are new permissions and scopes for some service OAuth2 clients. Permissions and scopes can be added via admin or sql script.

See AuthServices release notes for more details.

Auth Server Service Service ID New Scopes New Permissions

Services

Cart Ops Service Client

cartopsclient

SHIPPING_RATES, SYSTEM_PAYMENT_MANAGEMENT, EXECUTE_AUTHORIZE, EXECUTE_AUTHORIZE_AND_CAPTURE

READ_SHIPPING_RATES, ALL_SYSTEM_PAYMENT_MANAGEMENT, ALL_EXECUTE_AUTHORIZE, ALL_EXECUTE_AUTHORIZE_AND_CAPTURE