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::DEBIT_CARDS, 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
#card_brand, card_brand, #generate_unique_id, inherited, supported_countries, #supported_countries, supported_countries=, supports?, #supports_network_tokenization?, #test?
Methods included from CreditCardFormatting
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
314 315 316 317 318 319 320 |
# File 'lib/active_merchant/billing/gateways/trans_first_transaction_express.rb', line 314 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') 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 |
# 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
310 311 312 |
# File 'lib/active_merchant/billing/gateways/trans_first_transaction_express.rb', line 310 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 |