CartModifierFormHandler - used to modify the shopping cart by adding items, deleting items and modifying the quantities of items in cart and preparing for checkout. u need to use additional form handlers to finish the flow - like shipping/ payment form handlers and finally CommitFormHandler to confirm and commit the order.

on other hand - ShoppingCartFormHandler provides simpler cart management and checkout implementation all in itself.

ShoppingCartFormHandler was used in older versions of ATG and ATG recommends not to use that form handler and it is available to support backward compatibility. Check the discussions regarding this, https://forums.oracle.com/thread/2452549

For your issue, while confirming the order i.e at the final step, use /atg/commerce/order/purchase/CommitOrderFormHandler.commitOrder method.

I just try to complete a check out flow with all details and submit the order .

But It's not updating few details like Price and Tax information in the Order repository.That's reason my order shows Incomplete status.

Can any help me to complete this flow.?

Adding to the already provided answers: The incomplete order status is normally due to some error in the checkout flow and not because price and tax information is not saved in order repository. See if there is any error when you check out or a transaction rollback. If you see some error, enable loggingDebug on the /atg/commerce/PipelineManager to figure out which processor is causing any error/rollback.

ATG has a component /atg/commerce/order/processor/SavePriceInfoObjects and if you look at its default configuration you will see that ATG does not save PriceInfo objects for incomplete orders and they are kept in memory for the current session. Only when an order completes the check out, the PriceInfo objects are saved. The reason for ATG not always saving PriceInfos is that they take space and time for getting persisted in the database and if the order is incomplete, there are chances that the buyer can still modify the order, which means any saved PriceInfos would become obsolete. Although you can change this behavior by reconfiguring the SavePriceInfoObjects component but it won't be optimal.

Check out process will invoke the validateForCheckout pipeline chain through OrderManager.validateOrder() and the "processOrder" pipeline chain. The validateForCheckout pipeline chain involves a CreditCardModCheck processor which performs credit card validations by doing mod checks on credit card number to see if it is a valid one based on the card type. This is done from verifyCreditCard() method of CreditCardTools. There is no authorization done from payment processing system at this stage. From the error it looks like that it is failing in the card number validation. Check the card number and type again or try using another number or try with test numbers. Refer this for more details:

I have used CreateCreditCardFormHandler to store User provided credit card details but I think Its not updated in order object.Because when I am iterating

cartmodifierformhandler.order.paymentgroup and cartmodifierformhandler.order.paymentgroup it doesn't show any data.

Could you please tell me how to update CreateCreditCardFormHandler data to order object.?

OOTB CreateCreditFormHandler will only create the CreditCard payment group and will not associate the payment group with the order. For this we need to use PaymenGroupManager's addPaymentGroupToOrder() method like this:

You can use PaymentGroupFormHandler which takes care of associating PaymentGroups to order using PaymenGroupManager as mentioned above and also handles split payments etc. Use PaymentGroupFormHandler.handleApplyPaymentGroups() when user has supplied the payment information to the order and is ready to proceed with the next step during checkout.

Then Do I need to create a formhandler and pass order and creditCardPaymentGroup object to this methodgetPaymentGroupManager().addPaymentGroupToOrder(order, creditCardPaymentGroup);

Instead of doing above,Is there any out of box formhandler where user can add credit card details from UI then we can assign that formhandler to Order object.

PaymentGroupFormHandler is the one OOTB formhandler which would link your payment group with the order. And in case OOTB formhandlers are not fitting in your requirements or checkout flow, you can even try to extend the CreateCreditFormHandler or PaymentGroupFormHandler to exactly match your requirements.