Duplicate payments prevention
This topic applies to Dynamics 365 for Retail and Dynamics 365 for Finance and Operations.
This topic provides an overview of the duplicate payments protection feature for Dynamics 365 for Retail Modern POS.
This topic describes the user experience when the point of sale (POS) recovers from a loss of communication with the payment terminal, which causes the POS and the payment terminal to be out of sync.
The duplicate payment protection feature ensures that Dynamics 365 for Retail Modern POS can seamlessly recover from a loss of communication without requiring the shopper to process another payment through the payment terminal, which can lead to duplicate payments.
This topic covers the following aspects of the duplicate payment protection feature:
- Prerequisites – Set of prerequisites to leverage this feature in Dynamics 365 for Retail Modern POS.
- Scenario details – Detailed description of the scenarios covered by the duplicate payment protection feature.
- Troubleshooting – Steps to take when encountering issues with the duplicate payment protection feature.
- Additional resources – List of related articles you might find useful when using the duplicate payment protection feature.
- The payment connector and corresponding payment gateway or processor must support this feature. The payment connector is an extension which facilitates communication between Dynamics 365 for Retail (and associated components) and a payment service. The connector described in this topic was implemented using the standard payments SDK.
- If a connector implements the corresponding duplicate payment protection interfaces, the feature is automatically enabled in Dynamics 365 for Retail Modern POS. Otherwise, it is automatically turned off.
The duplicate payment protection feature is applicable to any scenario in which a payment is initiated and completed on a payment terminal, but Dynamics 365 for Retail Modern POS is unable to receive the corresponding response. As a result, the customer's card (such as a credit card) is charged but the payment line is not added to the POS. In most cases, the cashier will trigger a subsequent payment on the payment terminal, which results in a duplicate payment for the customer.
How duplicate payments scenarios are triggered
Cashier initiates payment
The cashier initiates a card payment by clicking Pay card in Dynamics 365 for Retail Modern POS, navigates to the Payment page, and clicks Tender.
Customer interacts with payment terminal
After the payment is initiated, the payment terminal prompts the customer for payment. The customer initiates the payment process on the payment terminal.
Dynamics 365 for Retail Modern POS loses connectivity to the payment terminal
- While the customer is running a payment on the payment terminal, Dynamics 365 for Retail Modern POS loses connectivity to the payment terminal because it either crashes, loses network connectivity, is closed, or the terminal is rebooted.
- The cashier will re-launch Dynamics 365 for Retail Modern POS and address any connectivity issues.
Customer completes payment on the payment terminal
As Dynamics 365 for Retail Modern POS is being reset, the customer completes the payment on the payment terminal and is charged.
Dynamics 365 for Retail Modern POS is launched
The cashier completes the reset/launch of Dynamics 365 for Retail Modern POS but the payment is not added to the cart.
Payment recovery scenarios
Once the point of sale or network communications have been recovered, there are several scenarios that will result in the cashier being prompted to use the previous payment. Here are a few scenarios that can trigger payment recovery:
If there is a unrecovered payment and the cashier takes one of the following actions, the cashier is shown a dialog box indicating that a payment has already been made.
- Invokes another payment for any amount using a card payment.
- Invokes another payment for any amount using a cash payment.
- Attempts to void a line on the cart.
- Attempts to void the transaction.
- Attempts to suspend the transaction.
When the cashier clicks OK, the payment is recovered and added as a payment line to the cart.
The primary function of the duplicate payment protection feature is to put Dynamics 365 for Retail Modern POS back into the same state it would be if the original payment would have been successfully processed and the corresponding payment line was added to the cart.
How to skip payment recovery
In some cases, the cashier might explicitly choose to skip the duplicate payment protection and opt not to recover a previous payment. In those cases, the cashier can use the following steps described to void the transaction without recovering the payment.
Re-launch Dynamics 365 for Retail Modern POS
After Dynamics 365 for Retail Modern POS has lost connectivity to the payment terminal, re-launch the POS.
Void the transaction
Navigate to the cart page and click Void Transaction.
Ignore the recovered payment
A new dialog box will appear indicating that a recovered payment is available. Click Ignore to skip the payment recovery.
What to do if the customer leaves the store
In some cases, the customer might leave the store before the cashier can finalize the transaction. In those cases, follow the steps described in the How to skip payment recovery section to void the transaction and manually void the payment on the portal of the payment gateway/processor.
For all general issues, you should always consult the Modern POS or IIS Hardware Station event logs first. The logs can be found under these nodes in the Windows event log:
- Application and Services Logs > Microsoft > Dynamics > Commerce-ModernPOS
- Application and Services Logs > Microsoft > Dynamics > Commerce-Hardware Station
Validate that the customer is not double charged
Even if the duplicate payment protection feature is enabled, it is generally recommended that the merchant verifies that no double charge has occurred. To do this, check all transactions on the corresponding payment gateway/processor portal.
Payment recovery fails
An error may occur while a previous payment is being recovered on Dynamics 365 for Retail Modern POS. This can happen if there is an issue in the payment connector or payment gateway/processor that does not allow the previous payment to be recovered. To resolve this issue, because the previous payment cannot be recovered, the cashier must skip the recovery as described in the How to skip Payment Recovery section.