lib/active_merchant/billing/gateways/migs/migs_codes.rb
module ActiveMerchant
module Billing
module MigsCodes
TXN_RESPONSE_CODES = {
'?' => 'Response Unknown',
'0' => 'Transaction Successful',
'1' => 'Transaction Declined - Bank Error',
'2' => 'Bank Declined Transaction',
'3' => 'Transaction Declined - No Reply from Bank',
'4' => 'Transaction Declined - Expired Card',
'5' => 'Transaction Declined - Insufficient funds',
'6' => 'Transaction Declined - Error Communicating with Bank',
'7' => 'Payment Server Processing Error - Typically caused by invalid input data such as an invalid credit card number. Processing errors can also occur',
'8' => 'Transaction Declined - Transaction Type Not Supported',
'9' => 'Bank Declined Transaction (Do not contact Bank)',
'A' => 'Transaction Aborted',
'C' => 'Transaction Cancelled',
'D' => 'Deferred Transaction',
'E' => 'Issuer Returned a Referral Response',
'F' => '3D Secure Authentication Failed',
'I' => 'Card Security Code Failed',
'L' => 'Shopping Transaction Locked (This indicates that there is another transaction taking place using the same shopping transaction number)',
'N' => 'Cardholder is not enrolled in 3D Secure (Authentication Only)',
'P' => 'Transaction is Pending',
'R' => 'Retry Limits Exceeded, Transaction Not Processed',
'S' => 'Duplicate OrderInfo used. (This is only relevant for Payment Servers that enforce the uniqueness of this field)',
'U' => 'Card Security Code Failed'
}
ISSUER_RESPONSE_CODES = {
'00' => 'Approved',
'01' => 'Refer to Card Issuer',
'02' => 'Refer to Card Issuer',
'03' => 'Invalid Merchant',
'04' => 'Pick Up Card',
'05' => 'Do Not Honor',
'07' => 'Pick Up Card',
'12' => 'Invalid Transaction',
'14' => 'Invalid Card Number (No such Number)',
'15' => 'No Such Issuer',
'33' => 'Expired Card',
'34' => 'Suspected Fraud',
'36' => 'Restricted Card',
'39' => 'No Credit Account',
'41' => 'Card Reported Lost',
'43' => 'Stolen Card',
'51' => 'Insufficient Funds',
'54' => 'Expired Card',
'57' => 'Transaction Not Permitted',
'59' => 'Suspected Fraud',
'62' => 'Restricted Card',
'65' => 'Exceeds withdrawal frequency limit',
'91' => 'Cannot Contact Issuer'
}
VERIFIED_3D_CODES = {
'Y' => 'The cardholder was successfully authenticated.',
'E' => 'The cardholder is not enrolled.',
'N' => 'The cardholder was not verified.',
'U' => 'The cardholder\'s Issuer was unable to authenticate due to a system error at the Issuer.',
'F' => 'An error exists in the format of the request from the merchant. For example, the request did not contain all required fields, or the format of some fields was invalid.',
'A' => 'Authentication of your Merchant ID and Password to the Directory Server Failed (see "What does a Payment Authentication Status of "A" mean?" on page 85).',
'D' => 'Error communicating with the Directory Server, for example, the Payment Server could not connect to the directory server or there was a versioning mismatch.',
'C' => 'The card type is not supported for authentication.',
'M' => 'This indicates that attempts processing was used. Verification is marked with status M - ACS attempts processing used. Payment is performed with authentication. Attempts is when a cardholder has successfully passed the directory server but decides not to continue with the authentication process and cancels.',
'S' => 'The signature on the response received from the Issuer could not be validated. This should be considered a failure.',
'T' => 'ACS timed out. The Issuer\'s ACS did not respond to the Authentication request within the time out period.',
'P' => 'Error parsing input from Issuer.',
'I' => 'Internal Payment Server system error. This could be caused by a temporary DB failure or an error in the security module or by some error in an internal system.'
}
class CreditCardType
attr_accessor :am_code, :migs_code, :migs_long_code, :name
def initialize(am_code, migs_code, migs_long_code, name)
@am_code = am_code
@migs_code = migs_code
@migs_long_code = migs_long_code
@name = name
end
end
CARD_TYPES = [
# The following are 4 different representations of credit card types
# am_code: The active merchant code
# migs_code: Used in response for purchase/authorize/status
# migs_long_code: Used to pre-select card for server_purchase_url
# name: The nice display name
%w(american_express AE Amex American\ Express),
%w(diners_club DC Dinersclub Diners\ Club),
%w(jcb JC JCB JCB\ Card),
%w(maestro MS Maestro Maestro\ Card),
%w(master MC Mastercard MasterCard),
%w(na PL PrivateLabelCard Private\ Label\ Card),
%w(visa VC Visa Visa\ Card)
].map do |am_code, migs_code, migs_long_code, name|
CreditCardType.new(am_code, migs_code, migs_long_code, name)
end
end
end
end