Broadleaf Microservices
  • v1.0.0-latest-prod

Release Notes for 1.1.8-GA

Important
Release Train 1.8.2-GA includes changes from 1.1.4-1.1.8. These have been consolidated here for convenience. In the future, services like Payment Transaction will see release candidates (RCs) created instead of GAs so that they align with Release Train RCs and GAs.

Requirements

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

  • JDK 17 is supported for Broadleaf release trains 1.8.1-GA, and beyond.

New Features & Notable Changes

  • Introduced the totalEverCaptured field to the PaymentSummary to communicate the total amount that’s ever been captured for the Payment, as opposed to the PaymentSummary#amountCaptured which reflects the current amount that’s been captured, excluding amounts that have been refunded.

Bug Fixes

  • Fixed payment lock issue causing checkout payment finalization to fail if the lock TTL is exceeded

    • Updated DefaultPaymentLockService logic to attempt obtaining a new lock, rather than throwing a ResourceLockException, if the LockState determined from a lockToken is DOES_NOT_EXIST.

    • Added warn-level logging highlighting this scenario & suggesting that clients extend their payment TTL.

    • Increased the default Payment lock TTL to decrease the likelihood of this payment lock scenario during checkout. Note: we’ve only seen this scenario produced by setting breakpoints during local development.

  • Added missing exception handlers for known exceptions within PTS and updated errors and warn logging to include stacktraces

  • Fix Webhook condition for recording transaction results for known transactions, in previous implementations we are passing SUBSEQUENT_TRANSACTION_RESULTS Enum now we changed that to TRANSACTION_RESULTS.

  • Fixed bug causing anonymous-user-owned payments that contributed to a successful checkout to be archived due to a call to the read all cart payments endpoint once the payment TTL had expired. With the fix in place, these unintentional archivals no longer occur.

Sql query to identify candidate payments to unarchive
select p.id, p.trk_archived from paymenttransaction.blc_payment p
join paymenttransaction.blc_payment_transaction pt on p.id = pt.payment_id
where p.trk_archived = 'Y'
	and p.audit_updater = 'anonymous'
	and pt.status = 'SUCCESS'
	and (pt.type = 'AUTHORIZE' or pt.type = 'AUTHORIZE_AND_CAPTURE')
	and pt.management_state = 'AUTOMATIC_REVERSAL_NOT_ALLOWED';
Note
If these payments were archived via the read all cart payments endpoint, then we expect the audit_updater to be anonymous indicating that the anonymous user’s lookup of their payments after the TTL expired caused the archival. Additionally, we check that the payment has a successful checkout transaction (Authorize or AuthorizeAndCapture) & that the transaction’s management_state is AUTOMATIC_REVERSAL_NOT_ALLOWED, indicating that the checkout was successfully completed.
Update statement to unarchive payments
update paymenttransaction.blc_payment p
set trk_archived = 'N'
from paymenttransaction.blc_payment_transaction pt
where p.id = pt.payment_id
	and p.trk_archived = 'Y'
	and p.audit_updater = 'anonymous'
	and pt.status = 'SUCCESS'
	and (pt.type = 'AUTHORIZE' or pt.type = 'AUTHORIZE_AND_CAPTURE')
	and pt.management_state = 'AUTOMATIC_REVERSAL_NOT_ALLOWED';