Class: ActiveMerchant::Billing::TransFirstTransactionExpressGateway
- Inherits:
-
Gateway
- Object
- Gateway
- ActiveMerchant::Billing::TransFirstTransactionExpressGateway
- Defined in:
- lib/active_merchant/billing/gateways/trans_first_transaction_express.rb
Constant Summary collapse
- V1_NAMESPACE =
'http://postilion/realtime/merchantframework/xsd/v1/'
- SOAPENV_NAMESPACE =
'http://schemas.xmlsoap.org/soap/envelope/'
- AUTHORIZATION_FIELD_SEPARATOR =
'|'
- APPROVAL_CODES =
%w(00 10)
- RESPONSE_MESSAGES =
{ '00' => 'Approved', '01' => 'Refer to card issuer', '02' => 'Refer to card issuer, special condition', '03' => 'Invalid merchant', '04' => 'Pick-up card', '05' => 'Do not honor', '06' => 'Error', '07' => 'Pick-up card, special condition', '08' => 'Honor with identification', '09' => 'Request in progress', '10' => 'Approved, partial authorization', '11' => 'VIP Approval', '12' => 'Invalid transaction', '13' => 'Invalid amount', '14' => 'Invalid card number', '15' => 'No such issuer', '16' => 'Approved, update track 3', '17' => 'Customer cancellation', '18' => 'Customer dispute', '19' => 'Re-enter transaction', '20' => 'Invalid response', '21' => 'No action taken', '22' => 'Suspected malfunction', '23' => 'Unacceptable transaction fee', '24' => 'File update not supported', '25' => 'Unable to locate record', '26' => 'Duplicate record', '27' => 'File update field edit error', '28' => 'File update file locked', '29' => 'File update failed', '30' => 'Format error', '31' => 'Bank not supported', '33' => 'Expired card, pick-up', '34' => 'Suspected fraud, pick-up', '35' => 'Contact acquirer, pick-up', '36' => 'Restricted card, pick-up', '37' => 'Call acquirer security, pick-up', '38' => 'PIN tries exceeded, pick-up', '39' => 'No credit account', '40' => 'Function not supported', '41' => 'Lost card, pick-up', '42' => 'No universal account', '43' => 'Stolen card, pick-up', '44' => 'No investment account', '45' => 'Account closed', '46' => 'Identification required', '47' => 'Identification cross-check required', '48' => 'No customer record', '49' => 'Reserved for future Realtime use', '50' => 'Reserved for future Realtime use', '51' => 'Not sufficient funds', '52' => 'No checking account', '53' => 'No savings account', '54' => 'Expired card', '55' => 'Incorrect PIN', '56' => 'No card record', '57' => 'Transaction not permitted to cardholder', '58' => 'Transaction not permitted on terminal', '59' => 'Suspected fraud', '60' => 'Contact acquirer', '61' => 'Exceeds withdrawal limit', '62' => 'Restricted card', '63' => 'Security violation', '64' => 'Original amount incorrect', '65' => 'Exceeds withdrawal frequency', '66' => 'Call acquirer security', '67' => 'Hard capture', '68' => 'Response received too late', '69' => 'Advice received too late (the response from a request was received too late )', '70' => 'Reserved for future use', '71' => 'Reserved for future Realtime use', '72' => 'Reserved for future Realtime use', '73' => 'Reserved for future Realtime use', '74' => 'Reserved for future Realtime use', '75' => 'PIN tries exceeded', '76' => 'Reversal: Unable to locate previous message (no match on Retrieval Reference Number)/ Reserved for future Realtime use', '77' => 'Previous message located for a repeat or reversal, but repeat or reversal data is inconsistent with original message/ Intervene, bank approval required', '78' => 'Invalid/non-existent account – Decline (MasterCard specific)/ Intervene, bank approval required for partial amount', '79' => 'Already reversed (by Switch)/ Reserved for client-specific use (declined)', '80' => 'No financial Impact (Reserved for declined debit)/ Reserved for client-specific use (declined)', '81' => 'PIN cryptographic error found by the Visa security module during PIN decryption/ Reserved for client-specific use (declined)', '82' => 'Incorrect CVV/ Reserved for client-specific use (declined)', '83' => 'Unable to verify PIN/ Reserved for client-specific use (declined)', '84' => 'Invalid Authorization Life Cycle – Decline (MasterCard) or Duplicate Transaction Detected (Visa)/ Reserved for client-specific use (declined)', '85' => 'No reason to decline a request for Account Number Verification or Address Verification/ Reserved for client-specific use (declined)', '86' => 'Cannot verify PIN/ Reserved for client-specific use (declined)', '87' => 'Reserved for client-specific use (declined)', '88' => 'Reserved for client-specific use (declined)', '89' => 'Reserved for client-specific use (declined)', '90' => 'Cut-off in progress', '91' => 'Issuer or switch inoperative', '92' => 'Routing error', '93' => 'Violation of law', '94' => 'Duplicate Transmission (Integrated Debit and MasterCard)', '95' => 'Reconcile error', '96' => 'System malfunction', '97' => 'Reserved for future Realtime use', '98' => 'Exceeds cash limit', '99' => 'Reserved for future Realtime use', '1106' => 'Reserved for future Realtime use', '0A' => 'Reserved for future Realtime use', 'A0' => 'Reserved for future Realtime use', 'A1' => 'ATC not incremented', 'A2' => 'ATC limit exceeded', 'A3' => 'ATC configuration error', 'A4' => 'CVR check failure', 'A5' => 'CVR configuration error', 'A6' => 'TVR check failure', 'A7' => 'TVR configuration error', 'A8' => 'Reserved for future Realtime use', 'B1' => 'Surcharge amount not permitted on Visa cards or EBT Food Stamps/ Reserved for future Realtime use', 'B2' => 'Surcharge amount not supported by debit network issuer/ Reserved for future Realtime use', 'C1' => 'Unacceptable PIN', 'C2' => 'PIN Change failed', 'C3' => 'PIN Unblock failed', 'D1' => 'MAC Error', 'E1' => 'Prepay error', 'N1' => 'Network Error within the TXP platform', 'N0' => 'Force STIP/ Reserved for client-specific use (declined)', 'N3' => 'Cash service not available/ Reserved for client-specific use (declined)', 'N4' => 'Cash request exceeds Issuer limit/ Reserved for client-specific use (declined)', 'N5' => 'Ineligible for re-submission/ Reserved for client-specific use (declined)', 'N7' => 'Decline for CVV2 failure/ Reserved for client-specific use (declined)', 'N8' => 'Transaction amount exceeds preauthorized approval amount/ Reserved for client-specific use (declined)', 'P0' => 'Approved; PVID code is missing, invalid, or has expired', 'P1' => 'Declined; PVID code is missing, invalid, or has expired/ Reserved for client-specific use (declined)', 'P2' => 'Invalid biller Information/ Reserved for client-specific use (declined)/ Reserved for client-specific use (declined)', 'R0' => 'The transaction was declined or returned, because the cardholder requested that payment of a specific recurring or installment payment transaction be stopped/ Reserved for client-specific use (declined)', 'R1' => 'The transaction was declined or returned, because the cardholder requested that payment of all recurring or installment payment transactions for a specific merchant account be stopped/ Reserved for client-specific use (declined)', 'Q1' => 'Card Authentication failed/ Reserved for client-specific use (declined)', 'XA' => 'Forward to Issuer/ Reserved for client-specific use (declined)', 'XD' => 'Forward to Issuer/ Reserved for client-specific use (declined)' }
- EXTENDED_RESPONSE_MESSAGES =
{ 'B40K' => 'Declined Post – Credit linked to unextracted settle transaction' }
- TRANSACTION_CODES =
{ authorize: 0, void_authorize: 2, purchase: 1, capture: 3, void_purchase: 6, void_capture: 6, refund: 4, credit: 5, void_refund: 13, void_credit: 13, verify: 9, purchase_echeck: 11, refund_echeck: 16, void_echeck: 16, wallet_sale: 14 }
Constants inherited from Gateway
Gateway::CREDIT_DEPRECATION_MESSAGE, Gateway::RECURRING_DEPRECATION_MESSAGE, Gateway::STANDARD_ERROR_CODE
Instance Attribute Summary
Attributes inherited from Gateway
Instance Method Summary collapse
- #authorize(amount, payment_method, options = {}) ⇒ Object
- #capture(amount, authorization, options = {}) ⇒ Object
- #credit(amount, payment_method, options = {}) ⇒ Object
-
#initialize(options = {}) ⇒ TransFirstTransactionExpressGateway
constructor
A new instance of TransFirstTransactionExpressGateway.
- #purchase(amount, payment_method, options = {}) ⇒ Object
- #refund(amount, authorization, options = {}) ⇒ Object
- #scrub(transcript) ⇒ Object
- #store(payment_method, options = {}) ⇒ Object
- #supports_scrubbing? ⇒ Boolean
- #verify(credit_card, options = {}) ⇒ Object
- #void(authorization, options = {}) ⇒ Object
Methods inherited from Gateway
#add_field_to_post_if_present, #add_fields_to_post_if_present, #card_brand, card_brand, #generate_unique_id, inherited, #supported_countries, supported_countries, supported_countries=, supports?, #supports_network_tokenization?, #test?
Methods included from CreditCardFormatting
#expdate, #format, #strftime_yyyymm
Methods included from PostsData
included, #raw_ssl_request, #ssl_get, #ssl_post, #ssl_request
Constructor Details
#initialize(options = {}) ⇒ TransFirstTransactionExpressGateway
Returns a new instance of TransFirstTransactionExpressGateway.
185 186 187 188 |
# File 'lib/active_merchant/billing/gateways/trans_first_transaction_express.rb', line 185 def initialize( = {}) requires!(, :gateway_id, :reg_key) super end |
Instance Method Details
#authorize(amount, payment_method, options = {}) ⇒ Object
219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 |
# File 'lib/active_merchant/billing/gateways/trans_first_transaction_express.rb', line 219 def (amount, payment_method, = {}) if credit_card?(payment_method) request = build_xml_transaction_request do |doc| add_credit_card(doc, payment_method) add_contact(doc, payment_method.name, ) add_amount(doc, amount) end else wallet_id = (payment_method).last request = build_xml_transaction_request do |doc| add_amount(doc, amount) add_wallet_id(doc, wallet_id) end end commit(:authorize, request) end |
#capture(amount, authorization, options = {}) ⇒ Object
237 238 239 240 241 242 243 244 245 |
# File 'lib/active_merchant/billing/gateways/trans_first_transaction_express.rb', line 237 def capture(amount, , = {}) transaction_id = ()[1] request = build_xml_transaction_request do |doc| add_amount(doc, amount) add_original_transaction_data(doc, transaction_id) end commit(:capture, request) end |
#credit(amount, payment_method, options = {}) ⇒ Object
268 269 270 271 272 273 274 275 |
# File 'lib/active_merchant/billing/gateways/trans_first_transaction_express.rb', line 268 def credit(amount, payment_method, = {}) request = build_xml_transaction_request do |doc| add_pan(doc, payment_method) add_amount(doc, amount) end commit(:credit, request) end |
#purchase(amount, payment_method, options = {}) ⇒ Object
190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 |
# File 'lib/active_merchant/billing/gateways/trans_first_transaction_express.rb', line 190 def purchase(amount, payment_method, = {}) if credit_card?(payment_method) action = :purchase request = build_xml_transaction_request do |doc| add_credit_card(doc, payment_method) add_contact(doc, payment_method.name, ) add_amount(doc, amount) add_order_number(doc, ) end elsif echeck?(payment_method) action = :purchase_echeck request = build_xml_transaction_request do |doc| add_echeck(doc, payment_method) add_contact(doc, payment_method.name, ) add_amount(doc, amount) add_order_number(doc, ) end else action = :wallet_sale wallet_id = (payment_method).last request = build_xml_transaction_request do |doc| add_amount(doc, amount) add_wallet_id(doc, wallet_id) end end commit(action, request) end |
#refund(amount, authorization, options = {}) ⇒ Object
257 258 259 260 261 262 263 264 265 266 |
# File 'lib/active_merchant/billing/gateways/trans_first_transaction_express.rb', line 257 def refund(amount, , = {}) action, transaction_id = () request = build_xml_transaction_request do |doc| add_amount(doc, amount) unless action == 'purchase_echeck' add_original_transaction_data(doc, transaction_id) end commit(refund_type(action), request) end |
#scrub(transcript) ⇒ Object
315 316 317 318 319 320 321 322 |
# File 'lib/active_merchant/billing/gateways/trans_first_transaction_express.rb', line 315 def scrub(transcript) transcript. gsub(%r((<[^>]+pan>)[^<]+(<))i, '\1[FILTERED]\2'). gsub(%r((<[^>]+sec>)[^<]+(<))i, '\1[FILTERED]\2'). gsub(%r((<[^>]+id>)[^<]+(<))i, '\1[FILTERED]\2'). gsub(%r((<[^>]+regKey>)[^<]+(<))i, '\1[FILTERED]\2'). gsub(%r((<[^>]+acctNr>)[^<]+(<))i, '\1[FILTERED]\2') end |
#store(payment_method, options = {}) ⇒ Object
286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 |
# File 'lib/active_merchant/billing/gateways/trans_first_transaction_express.rb', line 286 def store(payment_method, = {}) store_customer_request = build_xml_payment_storage_request do |doc| store_customer_details(doc, payment_method.name, ) end MultiResponse.run do |r| r.process { commit(:store, store_customer_request) } return r unless r.success? && r.params['custId'] customer_id = r.params['custId'] store_payment_method_request = build_xml_payment_storage_request do |doc| doc['v1'].cust do add_customer_id(doc, customer_id) doc['v1'].pmt do doc['v1'].type 0 # add add_credit_card(doc, payment_method) end end end r.process { commit(:store, store_payment_method_request) } end end |
#supports_scrubbing? ⇒ Boolean
311 312 313 |
# File 'lib/active_merchant/billing/gateways/trans_first_transaction_express.rb', line 311 def supports_scrubbing? true end |
#verify(credit_card, options = {}) ⇒ Object
277 278 279 280 281 282 283 284 |
# File 'lib/active_merchant/billing/gateways/trans_first_transaction_express.rb', line 277 def verify(credit_card, = {}) request = build_xml_transaction_request do |doc| add_credit_card(doc, credit_card) add_contact(doc, credit_card.name, ) end commit(:verify, request) end |
#void(authorization, options = {}) ⇒ Object
247 248 249 250 251 252 253 254 255 |
# File 'lib/active_merchant/billing/gateways/trans_first_transaction_express.rb', line 247 def void(, = {}) action, transaction_id = () request = build_xml_transaction_request do |doc| add_original_transaction_data(doc, transaction_id) end commit(void_type(action), request) end |