Transaction Not Completed Timed Out - How to recover from this situation?

Firstly; I have searched the list of previous questions / topics with the title "Transaction Not Completed Timed Out" for an answer and have not found anything that covers the full range of questions I have.

One of our high value merchants (> $1.5M USD / per day) who uses Moneris for processing payments is seeing the following issue when running transactions against the production / live Moneris server.


We use a pre-authorization & completion (charge / capture) workflow for our transactions and receive a successful pre-auth, however when we attempt a pre-auth completion occasionally we see an error message "Transaction Not Completed Timed Out" for our high value merchant this can equate to a few hundred transactions where we receive this response.

We interpret this as a pre-auth completion failure on our side according to the documentation found here: we then re-queue the pre-auth completion job to run again later on.

The Problem

The issue here is that if the transaction was actually successful but the timeout was between Moneris and the payment processor, it is possible that the customer's payment instrument has been charged and seemingly Moneris has no knowledge of that since Moneris received and returned a "Transaction Not Completed Timed Out" message.

How does Moneris handle idempotency in this case? I have seen that we can use a status_check along with completion, however this seems quite limited to me in the fact that it can only be called within 2 minutes of the last failed transaction and then only once. So we could add a status_check before each and every completion but that would add additional complexity to the process and what would happen if the status_check fails before the pre-auth completion? 

In addition another consideration here is that the pdf I have here says to use the status_check that: The feature must be enabled in your merchant profile. To have it enabled, contact MonerisFrom what we have seen in our investigations if this status_check is not enabled on the merchant account a status check functions as whatever transaction is set in type. So in essence we could compound the problem by performing a double pre-auth completion if the merchant account is not setup for status checks.


In summary my questions are:

  • What method of ensuring idempotency does Moneris use for transactions?
  • How can we be sure that a status_check will function as a status_check and not a completion in the event it is not setup on the merchants account?
  • What should we do if a status_check itself fails?

Many thanks in advance for you assistance on this matter

  • As a follow up here, for other people who may be experiencing the same issues; We have been offered the same solution as mentioned here, unfortunately, this is too limited for our use case and appears to be intended to prevent multiple clicks on a "pay" or "submit order" button from the frontend. We charge payments using a message queue and back off any failures we receive to retry again later.

    For us the 2minute window for status check and the fact that it only works on the very next request is too restrictive to be useful. Without Moneris supporting an idempotency key or a better way to query for a transaction before attempting to charge again, this will go unresolved.