Our production environment recently ran into some issues. The back end issued a payment request and our SOAP client failed to receive a successful transaction. Instead, it received this reply:
The request channel timed out while waiting for a reply after 00:00:59.9375020. Increase the timeout value passed to the call to Request or increase the SendTimeout value on the Binding. The time allotted to this operation may have been a portion of a longer timeout.
The back end kept issuing the payment request for the same amount and the same payment profile 12 times. The first 11 requests all failed with the same message like the one printed above. The 12th request received this response:
A duplicate transaction has been submitted
To our surprise, during the reconciliation process, we found out that out of the 11 requests that timed-out, the customer's credit card has been charged 5 times and we have no record of the transactions because all our requests have timed out.
What have we done wrong, if anything? How can we prevent such situations in the future? We can increase the time-out to more than 1 minute, but that will not guarantee that the CC won't be charged even when we do not receive the response.
We use the SOAP-based CIM API.
Thanks,
Eddie
12-12-2016 02:24 PM
I probably can't solve the problem of the connection timing out, but one thing I can suggest is using our new Webhooks API for notifications. If your system times out, you can check to see if you've received notification of a successful transaction before retrying it.
12-12-2016 04:26 PM