If submitting a createTransactionRequest, and there is a communication error, the POS application will not know if the transaction was processed or not. What is the best way to either ensure that the transaction did not go through, or determine if it did so that the transaction can be recorded in the POS system?
In other gateways that I've worked with, there was a facility to reverse a transaction by the merchant generated reference number. That way, you could ensure that the transaction did not go through.
What is authorize.net's recommendation for handling this scenario?
In this scenario, we wouldn't have an authorize.net generated transaction ID, only the merchant generated reference number. It doesn't look like you can look up or void a transaction based on only the reference number. The only thing I could come up with was:
1. use getTransactionListForCustomerRequest to generate a list of transactions for that customerProfileId/customerPaymentProfileId
2. for transactions where the amount matches, and the time is close, use getTransactionDetailsRequest to determine if the transrefId matches
3. if we find a match, then we know the transaction ID from #1, so void the transaction, or record it
This solution depends on the merchant having enabled the Transaction Details API.
Is there a better solution?
You can also use Webhooks for getting realtime notifications for payment events .
The notifications generated can be used to call getTransactionDetails to validate the merchant referenceID for which the communicationError was received .
We are enhancing the Payment notifications to add in the merchant referenceID .
Hope it helps !!!