Error 97: This transaction cannot be accepted.
Response Reason Code: 97
Response Reason Text: This transaction cannot be accepted.
Notes: Applicable only to the SIM API. Fingerprints are only valid for a short period of time. This code indicates that the transaction fingerprint has expired.
Important Note: While AIM, SIM, and DPM are supported integration methods, we strongly recommend that you use one of our modern connection methods to integrate with the Authorize.Net Payment Gateway. Visit https://developer.authorize.net/api/upgrade_guide/ for more information on our current APIs.
Error 97s occur when we receive an invalid timestamp from your Web server. Your Web server would use its clock to generate a timestamp which is used to generate a fingerprint hash for security reasons. When your script submits a transaction to us, the fingerprint hash and the timestamp are sent to us. If the timestamp is either fifteen minutes ahead or fifteen minutes behind the current time in Greenwich Mean Time (GMT)--also called Coordinated Universal Time (UTC)--this error would occur.
This error may occur occasionally if a customer takes too long to check out, since the timestamp submitted to us would no longer be current by the time the customer is done. In such a situation the error should not occur very often.
If the error occurs every time a customer tries to check out, the issue is that your Web server's clock is not set correctly, and so the timestamp would be inaccurate. Please contact your Web hosting company for assistance in setting your Web server's clock to the correct time in GMT/UTC.
Adjusting the script
If you cannot adjust the time on your Web server to correct the time difference, you can adjust the timestamp in your script so it will be in sync with the Authorize.Net servers. This should be done as a last resort, since it may be necessary to readjust the timestamp should the Web server's time become corrected later.
You will want to determine the difference between your Web server's timestamp and the Authorize.Net server timestamp. You would then modify your script to subtract (or add) that time in seconds before the fingerprint is generated. Examples on how to make the adjustment, based on Authorize.Net sample scripts, follow below:
In the SimLib.pm file, replace the following line:
my $tstamp = time;
my $tstamp = time - (time difference in seconds);
my $tstamp = time + (time difference in seconds);
In the simlib.asp file, replace the following line:
var tstamp = GetSecondsSince1970 ();
var tstamp = GetSecondsSince1970() - (time difference in seconds);
var tstamp = GetSecondsSince1970() + (time difference in seconds);
In the simlib.php file, replace the following line:
$tstamp = time ();
$tstamp = time () - (time difference in seconds);
$tstamp = time () + (time difference in seconds);
For more details, see our Error 97 resolution tool at http://developer.authorize.net/tools/responsecode97/