activemerchant 1.42.6 → 1.90.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -13
- data/CHANGELOG +1420 -2
- data/CONTRIBUTORS +106 -0
- data/README.md +107 -103
- data/lib/active_merchant/billing/apple_pay_payment_token.rb +22 -0
- data/lib/active_merchant/billing/avs_result.rb +12 -13
- data/lib/active_merchant/billing/base.rb +13 -16
- data/lib/active_merchant/billing/check.rb +35 -24
- data/lib/active_merchant/billing/compatibility.rb +117 -0
- data/lib/active_merchant/billing/credit_card.rb +196 -81
- data/lib/active_merchant/billing/credit_card_formatting.rb +6 -4
- data/lib/active_merchant/billing/credit_card_methods.rb +199 -75
- data/lib/active_merchant/billing/cvv_result.rb +15 -15
- data/lib/active_merchant/billing/gateway.rb +171 -39
- data/lib/active_merchant/billing/gateways/adyen.rb +380 -0
- data/lib/active_merchant/billing/gateways/allied_wallet.rb +205 -0
- data/lib/active_merchant/billing/gateways/authorize_net.rb +933 -604
- data/lib/active_merchant/billing/gateways/authorize_net_arb.rb +417 -0
- data/lib/active_merchant/billing/gateways/authorize_net_cim.rb +74 -54
- data/lib/active_merchant/billing/gateways/axcessms.rb +181 -0
- data/lib/active_merchant/billing/gateways/balanced.rb +130 -370
- data/lib/active_merchant/billing/gateways/bank_frick.rb +225 -0
- data/lib/active_merchant/billing/gateways/banwire.rb +23 -12
- data/lib/active_merchant/billing/gateways/barclaycard_smartpay.rb +351 -0
- data/lib/active_merchant/billing/gateways/barclays_epdq_extra_plus.rb +6 -6
- data/lib/active_merchant/billing/gateways/be2bill.rb +2 -2
- data/lib/active_merchant/billing/gateways/beanstream/beanstream_core.rb +109 -32
- data/lib/active_merchant/billing/gateways/beanstream.rb +59 -13
- data/lib/active_merchant/billing/gateways/beanstream_interac.rb +12 -9
- data/lib/active_merchant/billing/gateways/blue_pay.rb +520 -498
- data/lib/active_merchant/billing/gateways/blue_snap.rb +347 -0
- data/lib/active_merchant/billing/gateways/bogus.rb +80 -46
- data/lib/active_merchant/billing/gateways/borgun.rb +220 -0
- data/lib/active_merchant/billing/gateways/bpoint.rb +277 -0
- data/lib/active_merchant/billing/gateways/braintree/braintree_common.rb +15 -2
- data/lib/active_merchant/billing/gateways/braintree.rb +2 -2
- data/lib/active_merchant/billing/gateways/braintree_blue.rb +311 -121
- data/lib/active_merchant/billing/gateways/braintree_orange.rb +4 -4
- data/lib/active_merchant/billing/gateways/bridge_pay.rb +244 -0
- data/lib/active_merchant/billing/gateways/cams.rb +230 -0
- data/lib/active_merchant/billing/gateways/card_connect.rb +311 -0
- data/lib/active_merchant/billing/gateways/card_save.rb +6 -7
- data/lib/active_merchant/billing/gateways/card_stream.rb +235 -89
- data/lib/active_merchant/billing/gateways/cardknox.rb +327 -0
- data/lib/active_merchant/billing/gateways/cardprocess.rb +254 -0
- data/lib/active_merchant/billing/gateways/cashnet.rb +219 -0
- data/lib/active_merchant/billing/gateways/cc5.rb +50 -8
- data/lib/active_merchant/billing/gateways/cecabank.rb +27 -14
- data/lib/active_merchant/billing/gateways/cenpos.rb +327 -0
- data/lib/active_merchant/billing/gateways/checkout.rb +214 -0
- data/lib/active_merchant/billing/gateways/checkout_v2.rb +233 -0
- data/lib/active_merchant/billing/gateways/citrus_pay.rb +22 -0
- data/lib/active_merchant/billing/gateways/clearhaus.rb +220 -0
- data/lib/active_merchant/billing/gateways/commercegate.rb +142 -0
- data/lib/active_merchant/billing/gateways/conekta.rb +91 -97
- data/lib/active_merchant/billing/gateways/creditcall.rb +271 -0
- data/lib/active_merchant/billing/gateways/credorax.rb +356 -0
- data/lib/active_merchant/billing/gateways/ct_payment.rb +268 -0
- data/lib/active_merchant/billing/gateways/culqi.rb +277 -0
- data/lib/active_merchant/billing/gateways/cyber_source.rb +294 -158
- data/lib/active_merchant/billing/gateways/d_local.rb +226 -0
- data/lib/active_merchant/billing/gateways/data_cash.rb +59 -347
- data/lib/active_merchant/billing/gateways/dibs.rb +199 -0
- data/lib/active_merchant/billing/gateways/digitzs.rb +292 -0
- data/lib/active_merchant/billing/gateways/ebanx.rb +296 -0
- data/lib/active_merchant/billing/gateways/efsnet.rb +24 -39
- data/lib/active_merchant/billing/gateways/elavon.rb +146 -147
- data/lib/active_merchant/billing/gateways/element.rb +356 -0
- data/lib/active_merchant/billing/gateways/epay.rb +41 -31
- data/lib/active_merchant/billing/gateways/evo_ca.rb +1 -1
- data/lib/active_merchant/billing/gateways/eway.rb +79 -78
- data/lib/active_merchant/billing/gateways/eway_managed.rb +35 -36
- data/lib/active_merchant/billing/gateways/eway_rapid.rb +369 -228
- data/lib/active_merchant/billing/gateways/exact.rb +32 -26
- data/lib/active_merchant/billing/gateways/ezic.rb +195 -0
- data/lib/active_merchant/billing/gateways/fat_zebra.rb +90 -64
- data/lib/active_merchant/billing/gateways/federated_canada.rb +6 -14
- data/lib/active_merchant/billing/gateways/finansbank.rb +3 -3
- data/lib/active_merchant/billing/gateways/first_giving.rb +142 -0
- data/lib/active_merchant/billing/gateways/first_pay.rb +128 -122
- data/lib/active_merchant/billing/gateways/firstdata_e4.rb +190 -64
- data/lib/active_merchant/billing/gateways/firstdata_e4_v27.rb +446 -0
- data/lib/active_merchant/billing/gateways/flo2cash.rb +215 -0
- data/lib/active_merchant/billing/gateways/flo2cash_simple.rb +20 -0
- data/lib/active_merchant/billing/gateways/forte.rb +270 -0
- data/lib/active_merchant/billing/gateways/garanti.rb +29 -27
- data/lib/active_merchant/billing/gateways/global_collect.rb +340 -0
- data/lib/active_merchant/billing/gateways/global_transport.rb +194 -0
- data/lib/active_merchant/billing/gateways/hdfc.rb +35 -36
- data/lib/active_merchant/billing/gateways/hps.rb +305 -0
- data/lib/active_merchant/billing/gateways/iats_payments.rb +271 -16
- data/lib/active_merchant/billing/gateways/in_context_paypal_express.rb +15 -0
- data/lib/active_merchant/billing/gateways/inspire.rb +29 -32
- data/lib/active_merchant/billing/gateways/instapay.rb +5 -6
- data/lib/active_merchant/billing/gateways/ipp.rb +175 -0
- data/lib/active_merchant/billing/gateways/iridium.rb +247 -41
- data/lib/active_merchant/billing/gateways/itransact.rb +4 -5
- data/lib/active_merchant/billing/gateways/iveri.rb +251 -0
- data/lib/active_merchant/billing/gateways/jetpay.rb +198 -71
- data/lib/active_merchant/billing/gateways/jetpay_v2.rb +437 -0
- data/lib/active_merchant/billing/gateways/komoju.rb +115 -0
- data/lib/active_merchant/billing/gateways/kushki.rb +219 -0
- data/lib/active_merchant/billing/gateways/latitude19.rb +411 -0
- data/lib/active_merchant/billing/gateways/linkpoint.rb +45 -43
- data/lib/active_merchant/billing/gateways/litle.rb +328 -444
- data/lib/active_merchant/billing/gateways/mastercard.rb +267 -0
- data/lib/active_merchant/billing/gateways/maxipago.rb +145 -115
- data/lib/active_merchant/billing/gateways/mercado_pago.rb +277 -0
- data/lib/active_merchant/billing/gateways/merchant_e_solutions.rb +37 -19
- data/lib/active_merchant/billing/gateways/merchant_one.rb +13 -15
- data/lib/active_merchant/billing/gateways/merchant_partners.rb +245 -0
- data/lib/active_merchant/billing/gateways/merchant_ware.rb +57 -60
- data/lib/active_merchant/billing/gateways/merchant_ware_version_four.rb +59 -48
- data/lib/active_merchant/billing/gateways/merchant_warrior.rb +38 -19
- data/lib/active_merchant/billing/gateways/mercury.rb +77 -54
- data/lib/active_merchant/billing/gateways/metrics_global.rb +11 -30
- data/lib/active_merchant/billing/gateways/micropayment.rb +183 -0
- data/lib/active_merchant/billing/gateways/migs.rb +81 -22
- data/lib/active_merchant/billing/gateways/modern_payments.rb +3 -3
- data/lib/active_merchant/billing/gateways/modern_payments_cim.rb +23 -25
- data/lib/active_merchant/billing/gateways/monei.rb +307 -0
- data/lib/active_merchant/billing/gateways/moneris.rb +146 -64
- data/lib/active_merchant/billing/gateways/moneris_us.rb +197 -53
- data/lib/active_merchant/billing/gateways/money_movers.rb +6 -15
- data/lib/active_merchant/billing/gateways/mundipagg.rb +292 -0
- data/lib/active_merchant/billing/gateways/nab_transact.rb +86 -64
- data/lib/active_merchant/billing/gateways/ncr_secure_pay.rb +165 -0
- data/lib/active_merchant/billing/gateways/net_registry.rb +11 -5
- data/lib/active_merchant/billing/gateways/netaxept.rb +21 -22
- data/lib/active_merchant/billing/gateways/netbanx.rb +290 -0
- data/lib/active_merchant/billing/gateways/netbilling.rb +70 -35
- data/lib/active_merchant/billing/gateways/netpay.rb +5 -6
- data/lib/active_merchant/billing/gateways/network_merchants.rb +241 -0
- data/lib/active_merchant/billing/gateways/nmi.rb +274 -10
- data/lib/active_merchant/billing/gateways/ogone.rb +90 -47
- data/lib/active_merchant/billing/gateways/omise.rb +324 -0
- data/lib/active_merchant/billing/gateways/openpay.rb +48 -20
- data/lib/active_merchant/billing/gateways/opp.rb +369 -0
- data/lib/active_merchant/billing/gateways/optimal_payment.rb +79 -44
- data/lib/active_merchant/billing/gateways/orbital/orbital_soft_descriptors.rb +22 -21
- data/lib/active_merchant/billing/gateways/orbital.rb +346 -102
- data/lib/active_merchant/billing/gateways/pac_net_raven.rb +48 -29
- data/lib/active_merchant/billing/gateways/pagarme.rb +246 -0
- data/lib/active_merchant/billing/gateways/pago_facil.rb +122 -0
- data/lib/active_merchant/billing/gateways/pay_conex.rb +245 -0
- data/lib/active_merchant/billing/gateways/pay_gate_xml.rb +67 -48
- data/lib/active_merchant/billing/gateways/pay_hub.rb +213 -0
- data/lib/active_merchant/billing/gateways/pay_junction.rb +20 -26
- data/lib/active_merchant/billing/gateways/pay_junction_v2.rb +188 -0
- data/lib/active_merchant/billing/gateways/pay_secure.rb +7 -15
- data/lib/active_merchant/billing/gateways/paybox_direct.rb +40 -36
- data/lib/active_merchant/billing/gateways/payeezy.rb +410 -0
- data/lib/active_merchant/billing/gateways/payex.rb +38 -30
- data/lib/active_merchant/billing/gateways/payflow/payflow_common_api.rb +62 -36
- data/lib/active_merchant/billing/gateways/payflow/payflow_express_response.rb +11 -7
- data/lib/active_merchant/billing/gateways/payflow/payflow_response.rb +3 -3
- data/lib/active_merchant/billing/gateways/payflow.rb +74 -27
- data/lib/active_merchant/billing/gateways/payflow_express.rb +77 -81
- data/lib/active_merchant/billing/gateways/payflow_express_uk.rb +2 -3
- data/lib/active_merchant/billing/gateways/payflow_uk.rb +5 -6
- data/lib/active_merchant/billing/gateways/payment_express.rb +54 -45
- data/lib/active_merchant/billing/gateways/paymentez.rb +304 -0
- data/lib/active_merchant/billing/gateways/paymill.rb +160 -66
- data/lib/active_merchant/billing/gateways/paypal/paypal_common_api.rb +54 -7
- data/lib/active_merchant/billing/gateways/paypal/paypal_express_response.rb +4 -0
- data/lib/active_merchant/billing/gateways/paypal/paypal_recurring_api.rb +17 -3
- data/lib/active_merchant/billing/gateways/paypal.rb +36 -27
- data/lib/active_merchant/billing/gateways/paypal_ca.rb +1 -1
- data/lib/active_merchant/billing/gateways/paypal_digital_goods.rb +7 -6
- data/lib/active_merchant/billing/gateways/paypal_express.rb +32 -4
- data/lib/active_merchant/billing/gateways/paypal_express_common.rb +3 -3
- data/lib/active_merchant/billing/gateways/payscout.rb +2 -13
- data/lib/active_merchant/billing/gateways/paystation.rb +96 -88
- data/lib/active_merchant/billing/gateways/payu_in.rb +248 -0
- data/lib/active_merchant/billing/gateways/payu_latam.rb +445 -0
- data/lib/active_merchant/billing/gateways/payway.rb +8 -8
- data/lib/active_merchant/billing/gateways/pin.rb +74 -18
- data/lib/active_merchant/billing/gateways/plugnpay.rb +66 -76
- data/lib/active_merchant/billing/gateways/pro_pay.rb +326 -0
- data/lib/active_merchant/billing/gateways/psigate.rb +30 -30
- data/lib/active_merchant/billing/gateways/psl_card.rb +27 -34
- data/lib/active_merchant/billing/gateways/qbms.rb +65 -54
- data/lib/active_merchant/billing/gateways/quantum.rb +18 -18
- data/lib/active_merchant/billing/gateways/quickbooks.rb +290 -0
- data/lib/active_merchant/billing/gateways/quickpay/quickpay_common.rb +184 -0
- data/lib/active_merchant/billing/gateways/quickpay/quickpay_v10.rb +295 -0
- data/lib/active_merchant/billing/gateways/quickpay/quickpay_v4to7.rb +226 -0
- data/lib/active_merchant/billing/gateways/quickpay.rb +10 -350
- data/lib/active_merchant/billing/gateways/qvalent.rb +236 -0
- data/lib/active_merchant/billing/gateways/realex.rb +78 -48
- data/lib/active_merchant/billing/gateways/redsys.rb +310 -170
- data/lib/active_merchant/billing/gateways/s5.rb +246 -0
- data/lib/active_merchant/billing/gateways/safe_charge.rb +262 -0
- data/lib/active_merchant/billing/gateways/sage.rb +415 -119
- data/lib/active_merchant/billing/gateways/sage_pay.rb +195 -90
- data/lib/active_merchant/billing/gateways/sallie_mae.rb +11 -12
- data/lib/active_merchant/billing/gateways/secure_net.rb +51 -43
- data/lib/active_merchant/billing/gateways/secure_pay.rb +182 -10
- data/lib/active_merchant/billing/gateways/secure_pay_au.rb +25 -14
- data/lib/active_merchant/billing/gateways/secure_pay_tech.rb +10 -18
- data/lib/active_merchant/billing/gateways/securion_pay.rb +264 -0
- data/lib/active_merchant/billing/gateways/skip_jack.rb +35 -38
- data/lib/active_merchant/billing/gateways/smart_ps.rb +50 -42
- data/lib/active_merchant/billing/gateways/so_easy_pay.rb +9 -9
- data/lib/active_merchant/billing/gateways/spreedly_core.rb +62 -12
- data/lib/active_merchant/billing/gateways/stripe.rb +536 -103
- data/lib/active_merchant/billing/gateways/swipe_checkout.rb +12 -18
- data/lib/active_merchant/billing/gateways/telr.rb +274 -0
- data/lib/active_merchant/billing/gateways/tns.rb +22 -0
- data/lib/active_merchant/billing/gateways/trans_first.rb +143 -30
- data/lib/active_merchant/billing/gateways/trans_first_transaction_express.rb +608 -0
- data/lib/active_merchant/billing/gateways/transact_pro.rb +224 -0
- data/lib/active_merchant/billing/gateways/transax.rb +5 -6
- data/lib/active_merchant/billing/gateways/transnational.rb +2 -232
- data/lib/active_merchant/billing/gateways/trexle.rb +218 -0
- data/lib/active_merchant/billing/gateways/trust_commerce.rb +86 -57
- data/lib/active_merchant/billing/gateways/usa_epay.rb +4 -4
- data/lib/active_merchant/billing/gateways/usa_epay_advanced.rb +196 -89
- data/lib/active_merchant/billing/gateways/usa_epay_transaction.rb +157 -32
- data/lib/active_merchant/billing/gateways/vanco.rb +294 -0
- data/lib/active_merchant/billing/gateways/verifi.rb +42 -49
- data/lib/active_merchant/billing/gateways/viaklix.rb +11 -24
- data/lib/active_merchant/billing/gateways/visanet_peru.rb +233 -0
- data/lib/active_merchant/billing/gateways/webpay.rb +26 -28
- data/lib/active_merchant/billing/gateways/wepay.rb +237 -0
- data/lib/active_merchant/billing/gateways/wirecard.rb +153 -31
- data/lib/active_merchant/billing/gateways/world_net.rb +344 -0
- data/lib/active_merchant/billing/gateways/worldpay.rb +207 -63
- data/lib/active_merchant/billing/gateways/worldpay_online_payments.rb +215 -0
- data/lib/active_merchant/billing/gateways/worldpay_us.rb +221 -0
- data/lib/active_merchant/billing/gateways.rb +8 -11
- data/lib/active_merchant/billing/model.rb +30 -0
- data/lib/active_merchant/billing/network_tokenization_credit_card.rb +39 -0
- data/lib/active_merchant/billing/payment_token.rb +21 -0
- data/lib/active_merchant/billing/rails.rb +3 -0
- data/lib/active_merchant/billing/response.rb +31 -24
- data/lib/active_merchant/billing.rb +7 -1
- data/lib/active_merchant/connection.rb +195 -0
- data/lib/active_merchant/country.rb +335 -0
- data/lib/active_merchant/empty.rb +20 -0
- data/lib/active_merchant/errors.rb +35 -0
- data/lib/active_merchant/net_http_ssl_connection.rb +10 -0
- data/lib/active_merchant/network_connection_retries.rb +80 -0
- data/lib/active_merchant/post_data.rb +25 -0
- data/lib/active_merchant/posts_data.rb +92 -0
- data/lib/active_merchant/version.rb +1 -1
- data/lib/active_merchant.rb +23 -27
- data/lib/activemerchant.rb +1 -1
- data/lib/certs/cacert.pem +3988 -0
- data/lib/support/gateway_support.rb +7 -9
- data/lib/support/outbound_hosts.rb +13 -10
- data/lib/support/ssl_verify.rb +6 -7
- data/lib/support/ssl_version.rb +87 -0
- metadata +148 -323
- checksums.yaml.gz.sig +0 -0
- data/gem-public_cert.pem +0 -21
- data/lib/active_merchant/billing/expiry_date.rb +0 -34
- data/lib/active_merchant/billing/gateways/app55.rb +0 -185
- data/lib/active_merchant/billing/gateways/barclays_epdq.rb +0 -314
- data/lib/active_merchant/billing/gateways/certo_direct.rb +0 -277
- data/lib/active_merchant/billing/gateways/ideal/ideal_base.rb +0 -249
- data/lib/active_merchant/billing/gateways/ideal/ideal_rabobank.pem +0 -13
- data/lib/active_merchant/billing/gateways/ideal/ideal_response.rb +0 -29
- data/lib/active_merchant/billing/gateways/ideal_rabobank.rb +0 -66
- data/lib/active_merchant/billing/gateways/orbital/avs_result.rb +0 -93
- data/lib/active_merchant/billing/gateways/orbital/cvv_result.rb +0 -34
- data/lib/active_merchant/billing/gateways/sage/sage_bankcard.rb +0 -93
- data/lib/active_merchant/billing/gateways/sage/sage_core.rb +0 -114
- data/lib/active_merchant/billing/gateways/sage/sage_virtual_check.rb +0 -102
- data/lib/active_merchant/billing/gateways/samurai.rb +0 -118
- data/lib/active_merchant/billing/gateways/vindicia.rb +0 -361
- data/lib/active_merchant/billing/integrations/a1agregator/helper.rb +0 -31
- data/lib/active_merchant/billing/integrations/a1agregator/notification.rb +0 -186
- data/lib/active_merchant/billing/integrations/a1agregator/status.rb +0 -38
- data/lib/active_merchant/billing/integrations/a1agregator.rb +0 -26
- data/lib/active_merchant/billing/integrations/action_view_helper.rb +0 -74
- data/lib/active_merchant/billing/integrations/alipay/helper.rb +0 -34
- data/lib/active_merchant/billing/integrations/alipay/notification.rb +0 -101
- data/lib/active_merchant/billing/integrations/alipay.rb +0 -18
- data/lib/active_merchant/billing/integrations/authorize_net_sim/helper.rb +0 -229
- data/lib/active_merchant/billing/integrations/authorize_net_sim/notification.rb +0 -340
- data/lib/active_merchant/billing/integrations/authorize_net_sim.rb +0 -38
- data/lib/active_merchant/billing/integrations/bit_pay/helper.rb +0 -64
- data/lib/active_merchant/billing/integrations/bit_pay/notification.rb +0 -74
- data/lib/active_merchant/billing/integrations/bit_pay/return.rb +0 -10
- data/lib/active_merchant/billing/integrations/bit_pay.rb +0 -30
- data/lib/active_merchant/billing/integrations/bogus/helper.rb +0 -17
- data/lib/active_merchant/billing/integrations/bogus/notification.rb +0 -11
- data/lib/active_merchant/billing/integrations/bogus/return.rb +0 -10
- data/lib/active_merchant/billing/integrations/bogus.rb +0 -23
- data/lib/active_merchant/billing/integrations/chronopay/helper.rb +0 -120
- data/lib/active_merchant/billing/integrations/chronopay/notification.rb +0 -158
- data/lib/active_merchant/billing/integrations/chronopay/return.rb +0 -10
- data/lib/active_merchant/billing/integrations/chronopay.rb +0 -23
- data/lib/active_merchant/billing/integrations/citrus/helper.rb +0 -40
- data/lib/active_merchant/billing/integrations/citrus/notification.rb +0 -133
- data/lib/active_merchant/billing/integrations/citrus/return.rb +0 -40
- data/lib/active_merchant/billing/integrations/citrus.rb +0 -51
- data/lib/active_merchant/billing/integrations/direc_pay/helper.rb +0 -200
- data/lib/active_merchant/billing/integrations/direc_pay/notification.rb +0 -76
- data/lib/active_merchant/billing/integrations/direc_pay/return.rb +0 -32
- data/lib/active_merchant/billing/integrations/direc_pay/status.rb +0 -37
- data/lib/active_merchant/billing/integrations/direc_pay.rb +0 -41
- data/lib/active_merchant/billing/integrations/directebanking/helper.rb +0 -90
- data/lib/active_merchant/billing/integrations/directebanking/notification.rb +0 -120
- data/lib/active_merchant/billing/integrations/directebanking/return.rb +0 -11
- data/lib/active_merchant/billing/integrations/directebanking.rb +0 -47
- data/lib/active_merchant/billing/integrations/doku/helper.rb +0 -102
- data/lib/active_merchant/billing/integrations/doku/notification.rb +0 -69
- data/lib/active_merchant/billing/integrations/doku/return.rb +0 -10
- data/lib/active_merchant/billing/integrations/doku.rb +0 -24
- data/lib/active_merchant/billing/integrations/dotpay/helper.rb +0 -77
- data/lib/active_merchant/billing/integrations/dotpay/notification.rb +0 -86
- data/lib/active_merchant/billing/integrations/dotpay/return.rb +0 -11
- data/lib/active_merchant/billing/integrations/dotpay.rb +0 -22
- data/lib/active_merchant/billing/integrations/dwolla/common.rb +0 -23
- data/lib/active_merchant/billing/integrations/dwolla/helper.rb +0 -43
- data/lib/active_merchant/billing/integrations/dwolla/notification.rb +0 -64
- data/lib/active_merchant/billing/integrations/dwolla/return.rb +0 -49
- data/lib/active_merchant/billing/integrations/dwolla.rb +0 -23
- data/lib/active_merchant/billing/integrations/e_payment_plans/helper.rb +0 -34
- data/lib/active_merchant/billing/integrations/e_payment_plans/notification.rb +0 -84
- data/lib/active_merchant/billing/integrations/e_payment_plans.rb +0 -48
- data/lib/active_merchant/billing/integrations/easy_pay/common.rb +0 -40
- data/lib/active_merchant/billing/integrations/easy_pay/helper.rb +0 -36
- data/lib/active_merchant/billing/integrations/easy_pay/notification.rb +0 -59
- data/lib/active_merchant/billing/integrations/easy_pay.rb +0 -30
- data/lib/active_merchant/billing/integrations/epay/helper.rb +0 -55
- data/lib/active_merchant/billing/integrations/epay/notification.rb +0 -110
- data/lib/active_merchant/billing/integrations/epay.rb +0 -21
- data/lib/active_merchant/billing/integrations/first_data/helper.rb +0 -61
- data/lib/active_merchant/billing/integrations/first_data/notification.rb +0 -56
- data/lib/active_merchant/billing/integrations/first_data.rb +0 -38
- data/lib/active_merchant/billing/integrations/gestpay/common.rb +0 -42
- data/lib/active_merchant/billing/integrations/gestpay/helper.rb +0 -70
- data/lib/active_merchant/billing/integrations/gestpay/notification.rb +0 -85
- data/lib/active_merchant/billing/integrations/gestpay/return.rb +0 -10
- data/lib/active_merchant/billing/integrations/gestpay.rb +0 -25
- data/lib/active_merchant/billing/integrations/helper.rb +0 -117
- data/lib/active_merchant/billing/integrations/hi_trust/helper.rb +0 -58
- data/lib/active_merchant/billing/integrations/hi_trust/notification.rb +0 -59
- data/lib/active_merchant/billing/integrations/hi_trust/return.rb +0 -68
- data/lib/active_merchant/billing/integrations/hi_trust.rb +0 -27
- data/lib/active_merchant/billing/integrations/ipay88/helper.rb +0 -118
- data/lib/active_merchant/billing/integrations/ipay88/notification.rb +0 -103
- data/lib/active_merchant/billing/integrations/ipay88/return.rb +0 -29
- data/lib/active_merchant/billing/integrations/ipay88.rb +0 -23
- data/lib/active_merchant/billing/integrations/liqpay/helper.rb +0 -43
- data/lib/active_merchant/billing/integrations/liqpay/notification.rb +0 -89
- data/lib/active_merchant/billing/integrations/liqpay/return.rb +0 -83
- data/lib/active_merchant/billing/integrations/liqpay.rb +0 -30
- data/lib/active_merchant/billing/integrations/maksuturva/helper.rb +0 -119
- data/lib/active_merchant/billing/integrations/maksuturva/notification.rb +0 -48
- data/lib/active_merchant/billing/integrations/maksuturva.rb +0 -86
- data/lib/active_merchant/billing/integrations/moneybookers/helper.rb +0 -75
- data/lib/active_merchant/billing/integrations/moneybookers/notification.rb +0 -123
- data/lib/active_merchant/billing/integrations/moneybookers.rb +0 -26
- data/lib/active_merchant/billing/integrations/nochex/helper.rb +0 -68
- data/lib/active_merchant/billing/integrations/nochex/notification.rb +0 -94
- data/lib/active_merchant/billing/integrations/nochex/return.rb +0 -10
- data/lib/active_merchant/billing/integrations/nochex.rb +0 -88
- data/lib/active_merchant/billing/integrations/notification.rb +0 -71
- data/lib/active_merchant/billing/integrations/paxum/common.rb +0 -24
- data/lib/active_merchant/billing/integrations/paxum/helper.rb +0 -42
- data/lib/active_merchant/billing/integrations/paxum/notification.rb +0 -33
- data/lib/active_merchant/billing/integrations/paxum.rb +0 -44
- data/lib/active_merchant/billing/integrations/pay_fast/common.rb +0 -42
- data/lib/active_merchant/billing/integrations/pay_fast/helper.rb +0 -50
- data/lib/active_merchant/billing/integrations/pay_fast/notification.rb +0 -134
- data/lib/active_merchant/billing/integrations/pay_fast/return.rb +0 -10
- data/lib/active_merchant/billing/integrations/pay_fast.rb +0 -70
- data/lib/active_merchant/billing/integrations/paydollar/helper.rb +0 -41
- data/lib/active_merchant/billing/integrations/paydollar/notification.rb +0 -60
- data/lib/active_merchant/billing/integrations/paydollar/return.rb +0 -15
- data/lib/active_merchant/billing/integrations/paydollar.rb +0 -59
- data/lib/active_merchant/billing/integrations/payflow_link/helper.rb +0 -116
- data/lib/active_merchant/billing/integrations/payflow_link/notification.rb +0 -78
- data/lib/active_merchant/billing/integrations/payflow_link.rb +0 -21
- data/lib/active_merchant/billing/integrations/paypal/helper.rb +0 -119
- data/lib/active_merchant/billing/integrations/paypal/notification.rb +0 -227
- data/lib/active_merchant/billing/integrations/paypal/return.rb +0 -10
- data/lib/active_merchant/billing/integrations/paypal.rb +0 -39
- data/lib/active_merchant/billing/integrations/paypal_payments_advanced/helper.rb +0 -15
- data/lib/active_merchant/billing/integrations/paypal_payments_advanced.rb +0 -20
- data/lib/active_merchant/billing/integrations/paysbuy/helper.rb +0 -15
- data/lib/active_merchant/billing/integrations/paysbuy/notification.rb +0 -39
- data/lib/active_merchant/billing/integrations/paysbuy.rb +0 -36
- data/lib/active_merchant/billing/integrations/payu_in/helper.rb +0 -76
- data/lib/active_merchant/billing/integrations/payu_in/notification.rb +0 -154
- data/lib/active_merchant/billing/integrations/payu_in/return.rb +0 -36
- data/lib/active_merchant/billing/integrations/payu_in.rb +0 -36
- data/lib/active_merchant/billing/integrations/payu_in_paisa/helper.rb +0 -19
- data/lib/active_merchant/billing/integrations/payu_in_paisa/notification.rb +0 -13
- data/lib/active_merchant/billing/integrations/payu_in_paisa/return.rb +0 -16
- data/lib/active_merchant/billing/integrations/payu_in_paisa.rb +0 -30
- data/lib/active_merchant/billing/integrations/platron/helper.rb +0 -32
- data/lib/active_merchant/billing/integrations/platron/notification.rb +0 -113
- data/lib/active_merchant/billing/integrations/platron.rb +0 -28
- data/lib/active_merchant/billing/integrations/pxpay/helper.rb +0 -112
- data/lib/active_merchant/billing/integrations/pxpay/notification.rb +0 -157
- data/lib/active_merchant/billing/integrations/pxpay/return.rb +0 -25
- data/lib/active_merchant/billing/integrations/pxpay.rb +0 -31
- data/lib/active_merchant/billing/integrations/quickpay/helper.rb +0 -96
- data/lib/active_merchant/billing/integrations/quickpay/notification.rb +0 -137
- data/lib/active_merchant/billing/integrations/quickpay.rb +0 -21
- data/lib/active_merchant/billing/integrations/rbkmoney/helper.rb +0 -23
- data/lib/active_merchant/billing/integrations/rbkmoney/notification.rb +0 -91
- data/lib/active_merchant/billing/integrations/rbkmoney.rb +0 -17
- data/lib/active_merchant/billing/integrations/return.rb +0 -42
- data/lib/active_merchant/billing/integrations/robokassa/common.rb +0 -19
- data/lib/active_merchant/billing/integrations/robokassa/helper.rb +0 -50
- data/lib/active_merchant/billing/integrations/robokassa/notification.rb +0 -55
- data/lib/active_merchant/billing/integrations/robokassa/return.rb +0 -17
- data/lib/active_merchant/billing/integrations/robokassa.rb +0 -49
- data/lib/active_merchant/billing/integrations/sage_pay_form/encryption.rb +0 -33
- data/lib/active_merchant/billing/integrations/sage_pay_form/helper.rb +0 -136
- data/lib/active_merchant/billing/integrations/sage_pay_form/notification.rb +0 -210
- data/lib/active_merchant/billing/integrations/sage_pay_form/return.rb +0 -31
- data/lib/active_merchant/billing/integrations/sage_pay_form.rb +0 -37
- data/lib/active_merchant/billing/integrations/two_checkout/helper.rb +0 -107
- data/lib/active_merchant/billing/integrations/two_checkout/notification.rb +0 -171
- data/lib/active_merchant/billing/integrations/two_checkout/return.rb +0 -58
- data/lib/active_merchant/billing/integrations/two_checkout.rb +0 -44
- data/lib/active_merchant/billing/integrations/valitor/helper.rb +0 -86
- data/lib/active_merchant/billing/integrations/valitor/notification.rb +0 -13
- data/lib/active_merchant/billing/integrations/valitor/response_fields.rb +0 -97
- data/lib/active_merchant/billing/integrations/valitor/return.rb +0 -13
- data/lib/active_merchant/billing/integrations/valitor.rb +0 -33
- data/lib/active_merchant/billing/integrations/verkkomaksut/helper.rb +0 -88
- data/lib/active_merchant/billing/integrations/verkkomaksut/notification.rb +0 -59
- data/lib/active_merchant/billing/integrations/verkkomaksut.rb +0 -20
- data/lib/active_merchant/billing/integrations/web_pay/common.rb +0 -50
- data/lib/active_merchant/billing/integrations/web_pay/helper.rb +0 -68
- data/lib/active_merchant/billing/integrations/web_pay/notification.rb +0 -51
- data/lib/active_merchant/billing/integrations/web_pay.rb +0 -45
- data/lib/active_merchant/billing/integrations/webmoney/common.rb +0 -17
- data/lib/active_merchant/billing/integrations/webmoney/helper.rb +0 -40
- data/lib/active_merchant/billing/integrations/webmoney/notification.rb +0 -47
- data/lib/active_merchant/billing/integrations/webmoney.rb +0 -43
- data/lib/active_merchant/billing/integrations/wirecard_checkout_page/common.rb +0 -104
- data/lib/active_merchant/billing/integrations/wirecard_checkout_page/helper.rb +0 -145
- data/lib/active_merchant/billing/integrations/wirecard_checkout_page/notification.rb +0 -101
- data/lib/active_merchant/billing/integrations/wirecard_checkout_page/return.rb +0 -35
- data/lib/active_merchant/billing/integrations/wirecard_checkout_page.rb +0 -39
- data/lib/active_merchant/billing/integrations/world_pay/helper.rb +0 -101
- data/lib/active_merchant/billing/integrations/world_pay/notification.rb +0 -160
- data/lib/active_merchant/billing/integrations/world_pay.rb +0 -34
- data/lib/active_merchant/billing/integrations.rb +0 -17
- data.tar.gz.sig +0 -0
- metadata.gz.sig +0 -1
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
module ActiveMerchant #:nodoc:
|
|
2
|
+
module Billing #:nodoc:
|
|
3
|
+
class PayConexGateway < Gateway
|
|
4
|
+
include Empty
|
|
5
|
+
|
|
6
|
+
self.test_url = 'https://cert.payconex.net/api/qsapi/3.8/'
|
|
7
|
+
self.live_url = 'https://secure.payconex.net/api/qsapi/3.8/'
|
|
8
|
+
|
|
9
|
+
self.supported_countries = %w(US CA)
|
|
10
|
+
self.default_currency = 'USD'
|
|
11
|
+
self.supported_cardtypes = [:visa, :master, :american_express, :discover, :jcb, :diners_club]
|
|
12
|
+
|
|
13
|
+
self.homepage_url = 'http://www.bluefincommerce.com/'
|
|
14
|
+
self.display_name = 'PayConex'
|
|
15
|
+
|
|
16
|
+
def initialize(options={})
|
|
17
|
+
requires!(options, :account_id, :api_accesskey)
|
|
18
|
+
super
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def purchase(money, payment_method, options={})
|
|
22
|
+
post = {}
|
|
23
|
+
add_auth_purchase_params(post, money, payment_method, options)
|
|
24
|
+
commit('SALE', post)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def authorize(money, payment_method, options={})
|
|
28
|
+
post = {}
|
|
29
|
+
add_auth_purchase_params(post, money, payment_method, options)
|
|
30
|
+
commit('AUTHORIZATION', post)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def capture(money, authorization, options={})
|
|
34
|
+
post = {}
|
|
35
|
+
add_reference_params(post, authorization, options)
|
|
36
|
+
add_amount(post, money, options)
|
|
37
|
+
commit('CAPTURE', post)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def refund(money, authorization, options={})
|
|
41
|
+
post = {}
|
|
42
|
+
add_reference_params(post, authorization, options)
|
|
43
|
+
add_amount(post, money, options)
|
|
44
|
+
commit('REFUND', post)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def void(authorization, options = {})
|
|
48
|
+
post = {}
|
|
49
|
+
add_reference_params(post, authorization, options)
|
|
50
|
+
commit('REVERSAL', post)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def credit(money, payment_method, options={})
|
|
54
|
+
if payment_method.is_a?(String)
|
|
55
|
+
raise ArgumentError, 'Reference credits are not supported. Please supply the original credit card or use the #refund method.'
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
post = {}
|
|
59
|
+
add_auth_purchase_params(post, money, payment_method, options)
|
|
60
|
+
commit('CREDIT', post)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def verify(payment_method, options={})
|
|
64
|
+
authorize(0, payment_method, options)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def store(payment_method, options={})
|
|
68
|
+
post = {}
|
|
69
|
+
add_credentials(post)
|
|
70
|
+
add_payment_method(post, payment_method)
|
|
71
|
+
add_address(post, options)
|
|
72
|
+
add_common_options(post, options)
|
|
73
|
+
commit('STORE', post)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def supports_scrubbing?
|
|
77
|
+
true
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def scrub(transcript)
|
|
81
|
+
force_utf8(transcript).
|
|
82
|
+
gsub(%r((api_accesskey=)\w+), '\1[FILTERED]').
|
|
83
|
+
gsub(%r((card_number=)\w+), '\1[FILTERED]').
|
|
84
|
+
gsub(%r((card_verification=)\w+), '\1[FILTERED]')
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
private
|
|
88
|
+
|
|
89
|
+
def force_utf8(string)
|
|
90
|
+
return nil unless string
|
|
91
|
+
binary = string.encode('BINARY', invalid: :replace, undef: :replace, replace: '?') # Needed for Ruby 2.0 since #encode is a no-op if the string is already UTF-8. It's not needed for Ruby 2.1 and up since it's not a no-op there.
|
|
92
|
+
binary.encode('UTF-8', invalid: :replace, undef: :replace, replace: '?')
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def add_credentials(post)
|
|
96
|
+
post[:account_id] = @options[:account_id]
|
|
97
|
+
post[:api_accesskey] = @options[:api_accesskey]
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def add_auth_purchase_params(post, money, payment_method, options)
|
|
101
|
+
add_credentials(post)
|
|
102
|
+
add_payment_method(post, payment_method)
|
|
103
|
+
add_address(post, options)
|
|
104
|
+
add_common_options(post, options)
|
|
105
|
+
add_amount(post, money, options)
|
|
106
|
+
add_if_present(post, :email, options[:email])
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def add_reference_params(post, authorization, options)
|
|
110
|
+
add_credentials(post)
|
|
111
|
+
add_common_options(post, options)
|
|
112
|
+
add_token_id(post, authorization)
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def add_amount(post, money, options)
|
|
116
|
+
post[:transaction_amount] = amount(money)
|
|
117
|
+
currency_code = (options[:currency] || currency(money))
|
|
118
|
+
add_if_present(post, :currency, currency_code)
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def add_payment_method(post, payment_method)
|
|
122
|
+
case payment_method
|
|
123
|
+
when String
|
|
124
|
+
add_token_payment_method(post, payment_method)
|
|
125
|
+
when Check
|
|
126
|
+
add_check(post, payment_method)
|
|
127
|
+
else
|
|
128
|
+
if payment_method.respond_to?(:track_data) && payment_method.track_data.present?
|
|
129
|
+
add_card_present_payment_method(post, payment_method)
|
|
130
|
+
else
|
|
131
|
+
add_credit_card(post, payment_method)
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
def add_credit_card(post, payment_method)
|
|
137
|
+
post[:tender_type] = 'CARD'
|
|
138
|
+
post[:card_number] = payment_method.number
|
|
139
|
+
post[:card_expiration] = expdate(payment_method)
|
|
140
|
+
post[:card_verification] = payment_method.verification_value
|
|
141
|
+
post[:first_name] = payment_method.first_name
|
|
142
|
+
post[:last_name] = payment_method.last_name
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
def add_token_payment_method(post, payment_method)
|
|
146
|
+
post[:tender_type] = 'CARD'
|
|
147
|
+
post[:token_id] = payment_method
|
|
148
|
+
post[:reissue] = true
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
def add_card_present_payment_method(post, payment_method)
|
|
152
|
+
post[:tender_type] = 'CARD'
|
|
153
|
+
post[:card_tracks] = payment_method.track_data
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
def add_check(post, payment_method)
|
|
157
|
+
post[:tender_type] = 'ACH'
|
|
158
|
+
post[:first_name] = payment_method.first_name
|
|
159
|
+
post[:last_name] = payment_method.last_name
|
|
160
|
+
post[:bank_account_number] = payment_method.account_number
|
|
161
|
+
post[:bank_routing_number] = payment_method.routing_number
|
|
162
|
+
post[:check_number] = payment_method.number
|
|
163
|
+
add_if_present(post, :ach_account_type, payment_method.account_type)
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
def add_address(post, options)
|
|
167
|
+
address = options[:billing_address]
|
|
168
|
+
return unless address
|
|
169
|
+
|
|
170
|
+
add_if_present(post, :street_address1, address[:address1])
|
|
171
|
+
add_if_present(post, :street_address2, address[:address2])
|
|
172
|
+
add_if_present(post, :city, address[:city])
|
|
173
|
+
add_if_present(post, :state, address[:state])
|
|
174
|
+
add_if_present(post, :zip, address[:zip])
|
|
175
|
+
add_if_present(post, :country, address[:country])
|
|
176
|
+
add_if_present(post, :phone, address[:phone])
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
def add_common_options(post, options)
|
|
180
|
+
add_if_present(post, :transaction_description, options[:description])
|
|
181
|
+
add_if_present(post, :custom_id, options[:custom_id])
|
|
182
|
+
add_if_present(post, :custom_data, options[:custom_data])
|
|
183
|
+
add_if_present(post, :ip_address, options[:ip])
|
|
184
|
+
add_if_present(post, :payment_type, options[:payment_type])
|
|
185
|
+
add_if_present(post, :cashier, options[:cashier])
|
|
186
|
+
|
|
187
|
+
post[:disable_cvv] = options[:disable_cvv] unless options[:disable_cvv].nil?
|
|
188
|
+
post[:response_format] = 'JSON'
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
def add_if_present(post, key, value)
|
|
192
|
+
post[key] = value unless empty?(value)
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
def add_token_id(post, authorization)
|
|
196
|
+
post[:token_id] = authorization
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
def parse(body)
|
|
200
|
+
JSON.parse(body)
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
def commit(action, params)
|
|
204
|
+
raw_response = ssl_post(url, post_data(action, params))
|
|
205
|
+
response = parse(raw_response)
|
|
206
|
+
|
|
207
|
+
Response.new(
|
|
208
|
+
success_from(response),
|
|
209
|
+
message_from(response),
|
|
210
|
+
response,
|
|
211
|
+
authorization: response['transaction_id'],
|
|
212
|
+
:avs_result => AVSResult.new(code: response['avs_response']),
|
|
213
|
+
:cvv_result => CVVResult.new(response['cvv2_response']),
|
|
214
|
+
test: test?
|
|
215
|
+
)
|
|
216
|
+
rescue JSON::ParserError
|
|
217
|
+
unparsable_response(raw_response)
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
def url
|
|
221
|
+
test? ? test_url : live_url
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
def success_from(response)
|
|
225
|
+
response['transaction_approved'] || !response['error']
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
def message_from(response)
|
|
229
|
+
success_from(response) ? response['authorization_message'] : response['error_message']
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
def post_data(action, params)
|
|
233
|
+
params[:transaction_type] = action
|
|
234
|
+
params.map { |k, v| "#{k}=#{CGI.escape(v.to_s)}" }.join('&')
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
def unparsable_response(raw_response)
|
|
238
|
+
message = 'Invalid JSON response received from PayConex. Please contact PayConex if you continue to receive this message.'
|
|
239
|
+
message += " (The raw response returned by the API was #{raw_response.inspect})"
|
|
240
|
+
return Response.new(false, message)
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
end
|
|
244
|
+
end
|
|
245
|
+
end
|
|
@@ -52,7 +52,7 @@ module ActiveMerchant #:nodoc:
|
|
|
52
52
|
#
|
|
53
53
|
# PayGateXML Field ActiveMerchant Use
|
|
54
54
|
#
|
|
55
|
-
# pgid use :login value to gateway
|
|
55
|
+
# pgid use :login value to gateway instantiation
|
|
56
56
|
# pwd use :password value to gateway instantiation
|
|
57
57
|
#
|
|
58
58
|
# cname credit_card.name
|
|
@@ -102,45 +102,45 @@ module ActiveMerchant #:nodoc:
|
|
|
102
102
|
|
|
103
103
|
DECLINE_CODES = {
|
|
104
104
|
# Credit Card Errors - These RESULT_CODEs are returned if the transaction cannot be authorized due to a problem with the card. The TRANSACTION_STATUS will be 2
|
|
105
|
-
900001 =>
|
|
106
|
-
900002 =>
|
|
107
|
-
900003 =>
|
|
108
|
-
900004 =>
|
|
109
|
-
900005 =>
|
|
110
|
-
900006 =>
|
|
111
|
-
900007 =>
|
|
112
|
-
900009 =>
|
|
113
|
-
900010 =>
|
|
114
|
-
900011 =>
|
|
115
|
-
900012 =>
|
|
116
|
-
900013 =>
|
|
117
|
-
900014 =>
|
|
118
|
-
900015 =>
|
|
119
|
-
|
|
120
|
-
900207 =>
|
|
121
|
-
|
|
122
|
-
990020 =>
|
|
123
|
-
|
|
124
|
-
991001 =>
|
|
125
|
-
991002 =>
|
|
105
|
+
900001 => 'Call for Approval',
|
|
106
|
+
900002 => 'Card Expired',
|
|
107
|
+
900003 => 'Insufficient Funds',
|
|
108
|
+
900004 => 'Invalid Card Number',
|
|
109
|
+
900005 => 'Bank Interface Timeout', # indicates a communications failure between the banks systems
|
|
110
|
+
900006 => 'Invalid Card',
|
|
111
|
+
900007 => 'Declined',
|
|
112
|
+
900009 => 'Lost Card',
|
|
113
|
+
900010 => 'Invalid Card Length',
|
|
114
|
+
900011 => 'Suspected Fraud',
|
|
115
|
+
900012 => 'Card Reported As Stolen',
|
|
116
|
+
900013 => 'Restricted Card',
|
|
117
|
+
900014 => 'Excessive Card Usage',
|
|
118
|
+
900015 => 'Card Blacklisted',
|
|
119
|
+
|
|
120
|
+
900207 => 'Declined; authentication failed', # indicates the cardholder did not enter their MasterCard SecureCode / Verified by Visa password correctly
|
|
121
|
+
|
|
122
|
+
990020 => 'Auth Declined',
|
|
123
|
+
|
|
124
|
+
991001 => 'Invalid expiry date',
|
|
125
|
+
991002 => 'Invalid amount',
|
|
126
126
|
|
|
127
127
|
# Communication Errors - These RESULT_CODEs are returned if the transaction cannot be completed due to an unexpected error. TRANSACTION_STATUS will be 0.
|
|
128
|
-
900205 =>
|
|
129
|
-
900206 =>
|
|
128
|
+
900205 => 'Unexpected authentication result (phase 1)',
|
|
129
|
+
900206 => 'Unexpected authentication result (phase 1)',
|
|
130
130
|
|
|
131
|
-
990001 =>
|
|
131
|
+
990001 => 'Could not insert into Database',
|
|
132
132
|
|
|
133
|
-
990022 =>
|
|
133
|
+
990022 => 'Bank not available',
|
|
134
134
|
|
|
135
|
-
990053 =>
|
|
135
|
+
990053 => 'Error processing transaction',
|
|
136
136
|
|
|
137
137
|
# Miscellaneous - Unless otherwise noted, the TRANSACTION_STATUS will be 0.
|
|
138
|
-
900209 =>
|
|
139
|
-
900210 =>
|
|
138
|
+
900209 => 'Transaction verification failed (phase 2)', # Indicates the verification data returned from MasterCard SecureCode / Verified by Visa has been altered
|
|
139
|
+
900210 => 'Authentication complete; transaction must be restarted', # Indicates that the MasterCard SecuerCode / Verified by Visa transaction has already been completed. Most likely caused by the customer clicking the refresh button
|
|
140
140
|
|
|
141
|
-
990024 =>
|
|
141
|
+
990024 => 'Duplicate Transaction Detected. Please check before submitting',
|
|
142
142
|
|
|
143
|
-
990028 =>
|
|
143
|
+
990028 => 'Transaction cancelled' # Customer clicks the 'Cancel' button on the payment page
|
|
144
144
|
}
|
|
145
145
|
|
|
146
146
|
SUCCESS_CODES = %w( 990004 990005 990017 990012 990018 990031 )
|
|
@@ -162,22 +162,32 @@ module ActiveMerchant #:nodoc:
|
|
|
162
162
|
|
|
163
163
|
def purchase(money, creditcard, options = {})
|
|
164
164
|
MultiResponse.run do |r|
|
|
165
|
-
r.process{authorize(money, creditcard, options)}
|
|
166
|
-
r.process{capture(money, r.authorization, options)}
|
|
165
|
+
r.process { authorize(money, creditcard, options) }
|
|
166
|
+
r.process { capture(money, r.authorization, options) }
|
|
167
167
|
end
|
|
168
168
|
end
|
|
169
169
|
|
|
170
170
|
def authorize(money, creditcard, options = {})
|
|
171
171
|
action = 'authtx'
|
|
172
172
|
|
|
173
|
-
options
|
|
173
|
+
options[:money] = money
|
|
174
|
+
options[:creditcard] = creditcard
|
|
174
175
|
commit(action, build_request(action, options))
|
|
175
176
|
end
|
|
176
177
|
|
|
177
178
|
def capture(money, authorization, options = {})
|
|
178
179
|
action = 'settletx'
|
|
179
180
|
|
|
180
|
-
options
|
|
181
|
+
options[:money] = money
|
|
182
|
+
options[:authorization] = authorization
|
|
183
|
+
commit(action, build_request(action, options), authorization)
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
def refund(money, authorization, options={})
|
|
187
|
+
action = 'refundtx'
|
|
188
|
+
|
|
189
|
+
options[:money] = money
|
|
190
|
+
options[:authorization] = authorization
|
|
181
191
|
commit(action, build_request(action, options))
|
|
182
192
|
end
|
|
183
193
|
|
|
@@ -192,17 +202,18 @@ module ActiveMerchant #:nodoc:
|
|
|
192
202
|
xml.instruct!
|
|
193
203
|
|
|
194
204
|
xml.tag! 'protocol', :ver => API_VERSION, :pgid => (test? ? TEST_ID : @options[:login]), :pwd => @options[:password] do |protocol|
|
|
205
|
+
money = options.delete(:money)
|
|
206
|
+
authorization = options.delete(:authorization)
|
|
207
|
+
creditcard = options.delete(:creditcard)
|
|
195
208
|
case action
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
authorization = options.delete(:authorization)
|
|
203
|
-
build_capture(protocol, money, authorization, options)
|
|
209
|
+
when 'authtx'
|
|
210
|
+
build_authorization(protocol, money, creditcard, options)
|
|
211
|
+
when 'settletx'
|
|
212
|
+
build_capture(protocol, money, authorization, options)
|
|
213
|
+
when 'refundtx'
|
|
214
|
+
build_refund(protocol, money, authorization, options)
|
|
204
215
|
else
|
|
205
|
-
raise
|
|
216
|
+
raise 'no action specified for build_request'
|
|
206
217
|
end
|
|
207
218
|
end
|
|
208
219
|
|
|
@@ -218,7 +229,9 @@ module ActiveMerchant #:nodoc:
|
|
|
218
229
|
:budp => 0,
|
|
219
230
|
:amt => amount(money),
|
|
220
231
|
:cur => (options[:currency] || currency(money)),
|
|
221
|
-
:cvv => creditcard.verification_value
|
|
232
|
+
:cvv => creditcard.verification_value,
|
|
233
|
+
:email => options[:email],
|
|
234
|
+
:ip => options[:ip]
|
|
222
235
|
}
|
|
223
236
|
end
|
|
224
237
|
|
|
@@ -228,6 +241,13 @@ module ActiveMerchant #:nodoc:
|
|
|
228
241
|
}
|
|
229
242
|
end
|
|
230
243
|
|
|
244
|
+
def build_refund(xml, money, authorization, options={})
|
|
245
|
+
xml.tag! 'refundtx', {
|
|
246
|
+
:tid => authorization,
|
|
247
|
+
:amt => amount(money)
|
|
248
|
+
}
|
|
249
|
+
end
|
|
250
|
+
|
|
231
251
|
def parse(action, body)
|
|
232
252
|
hash = {}
|
|
233
253
|
xml = REXML::Document.new(body)
|
|
@@ -244,11 +264,11 @@ module ActiveMerchant #:nodoc:
|
|
|
244
264
|
hash
|
|
245
265
|
end
|
|
246
266
|
|
|
247
|
-
def commit(action, request)
|
|
267
|
+
def commit(action, request, authorization = nil)
|
|
248
268
|
response = parse(action, ssl_post(self.live_url, request))
|
|
249
269
|
Response.new(successful?(response), message_from(response), response,
|
|
250
270
|
:test => test?,
|
|
251
|
-
:authorization => response[:tid]
|
|
271
|
+
:authorization => authorization || response[:tid]
|
|
252
272
|
)
|
|
253
273
|
end
|
|
254
274
|
|
|
@@ -258,4 +278,3 @@ module ActiveMerchant #:nodoc:
|
|
|
258
278
|
end
|
|
259
279
|
end
|
|
260
280
|
end
|
|
261
|
-
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
module ActiveMerchant #:nodoc:
|
|
2
|
+
module Billing #:nodoc:
|
|
3
|
+
class PayHubGateway < Gateway
|
|
4
|
+
self.live_url = 'https://checkout.payhub.com/transaction/api'
|
|
5
|
+
|
|
6
|
+
self.supported_countries = ['US']
|
|
7
|
+
self.default_currency = 'USD'
|
|
8
|
+
self.supported_cardtypes = [:visa, :master, :american_express, :discover]
|
|
9
|
+
|
|
10
|
+
self.homepage_url = 'http://www.payhub.com/'
|
|
11
|
+
self.display_name = 'PayHub'
|
|
12
|
+
|
|
13
|
+
CVV_CODE_TRANSLATOR = {
|
|
14
|
+
'M' => 'CVV matches',
|
|
15
|
+
'N' => 'CVV does not match',
|
|
16
|
+
'P' => 'CVV not processed',
|
|
17
|
+
'S' => 'CVV should have been present',
|
|
18
|
+
'U' => 'CVV request unable to be processed by issuer'
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
AVS_CODE_TRANSLATOR = {
|
|
22
|
+
'0' => 'Approved, Address verification was not requested.',
|
|
23
|
+
'A' => 'Approved, Address matches only.',
|
|
24
|
+
'B' => 'Address Match. Street Address math for international transaction Postal Code not verified because of incompatible formats (Acquirer sent both street address and Postal Code)',
|
|
25
|
+
'C' => 'Serv Unavailable. Street address and Postal Code not verified for international transaction because of incompatible formats (Acquirer sent both street and Postal Code).',
|
|
26
|
+
'D' => 'Exact Match, Street Address and Postal Code match for international transaction.',
|
|
27
|
+
'F' => 'Exact Match, Street Address and Postal Code match. Applies to UK only.',
|
|
28
|
+
'G' => 'Ver Unavailable, Non-U.S. Issuer does not participate.',
|
|
29
|
+
'I' => 'Ver Unavailable, Address information not verified for international transaction',
|
|
30
|
+
'M' => 'Exact Match, Street Address and Postal Code match for international transaction',
|
|
31
|
+
'N' => 'No - Address and ZIP Code does not match',
|
|
32
|
+
'P' => 'Zip Match, Postal Codes match for international transaction Street address not verified because of incompatible formats (Acquirer sent both street address and Postal Code).',
|
|
33
|
+
'R' => 'Retry - Issuer system unavailable',
|
|
34
|
+
'S' => 'Serv Unavailable, Service not supported',
|
|
35
|
+
'U' => 'Ver Unavailable, Address unavailable.',
|
|
36
|
+
'W' => 'ZIP match - Nine character numeric ZIP match only.',
|
|
37
|
+
'X' => 'Exact match, Address and nine-character ZIP match.',
|
|
38
|
+
'Y' => 'Exact Match, Address and five character ZIP match.',
|
|
39
|
+
'Z' => 'Zip Match, Five character numeric ZIP match only.',
|
|
40
|
+
'1' => 'Cardholder name and ZIP match AMEX only.',
|
|
41
|
+
'2' => 'Cardholder name, address, and ZIP match AMEX only.',
|
|
42
|
+
'3' => 'Cardholder name and address match AMEX only.',
|
|
43
|
+
'4' => 'Cardholder name match AMEX only.',
|
|
44
|
+
'5' => 'Cardholder name incorrect, ZIP match AMEX only.',
|
|
45
|
+
'6' => 'Cardholder name incorrect, address and ZIP match AMEX only.',
|
|
46
|
+
'7' => 'Cardholder name incorrect, address match AMEX only.',
|
|
47
|
+
'8' => 'Cardholder, all do not match AMEX only.'
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
STANDARD_ERROR_CODE_MAPPING = {
|
|
51
|
+
'14' => STANDARD_ERROR_CODE[:invalid_number],
|
|
52
|
+
'80' => STANDARD_ERROR_CODE[:invalid_expiry_date],
|
|
53
|
+
'82' => STANDARD_ERROR_CODE[:invalid_cvc],
|
|
54
|
+
'54' => STANDARD_ERROR_CODE[:expired_card],
|
|
55
|
+
'51' => STANDARD_ERROR_CODE[:card_declined],
|
|
56
|
+
'05' => STANDARD_ERROR_CODE[:card_declined],
|
|
57
|
+
'61' => STANDARD_ERROR_CODE[:card_declined],
|
|
58
|
+
'62' => STANDARD_ERROR_CODE[:card_declined],
|
|
59
|
+
'65' => STANDARD_ERROR_CODE[:card_declined],
|
|
60
|
+
'93' => STANDARD_ERROR_CODE[:card_declined],
|
|
61
|
+
'01' => STANDARD_ERROR_CODE[:call_issuer],
|
|
62
|
+
'02' => STANDARD_ERROR_CODE[:call_issuer],
|
|
63
|
+
'04' => STANDARD_ERROR_CODE[:pickup_card],
|
|
64
|
+
'07' => STANDARD_ERROR_CODE[:pickup_card],
|
|
65
|
+
'41' => STANDARD_ERROR_CODE[:pickup_card],
|
|
66
|
+
'43' => STANDARD_ERROR_CODE[:pickup_card]
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
def initialize(options={})
|
|
70
|
+
requires!(options, :orgid, :username, :password, :tid)
|
|
71
|
+
|
|
72
|
+
super
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def authorize(amount, creditcard, options = {})
|
|
76
|
+
post = setup_post('auth')
|
|
77
|
+
add_creditcard(post, creditcard)
|
|
78
|
+
add_amount(post, amount)
|
|
79
|
+
add_address(post, (options[:address] || options[:billing_address]))
|
|
80
|
+
add_customer_data(post, options)
|
|
81
|
+
|
|
82
|
+
commit(post)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def purchase(amount, creditcard, options={})
|
|
86
|
+
post = setup_post('sale')
|
|
87
|
+
add_creditcard(post, creditcard)
|
|
88
|
+
add_amount(post, amount)
|
|
89
|
+
add_address(post, (options[:address] || options[:billing_address]))
|
|
90
|
+
add_customer_data(post, options)
|
|
91
|
+
|
|
92
|
+
commit(post)
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def refund(amount, trans_id, options={})
|
|
96
|
+
# Attempt a void in case the transaction is unsettled
|
|
97
|
+
post = setup_post('void')
|
|
98
|
+
add_reference(post, trans_id)
|
|
99
|
+
response = commit(post)
|
|
100
|
+
return response if response.success?
|
|
101
|
+
|
|
102
|
+
post = setup_post('refund')
|
|
103
|
+
add_reference(post, trans_id)
|
|
104
|
+
commit(post)
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def capture(amount, trans_id, options = {})
|
|
108
|
+
post = setup_post('capture')
|
|
109
|
+
|
|
110
|
+
add_reference(post, trans_id)
|
|
111
|
+
add_amount(post, amount)
|
|
112
|
+
|
|
113
|
+
commit(post)
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
# No void, as PayHub's void does not work on authorizations
|
|
117
|
+
|
|
118
|
+
def verify(creditcard, options={})
|
|
119
|
+
authorize(100, creditcard, options)
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
private
|
|
123
|
+
|
|
124
|
+
def setup_post(action)
|
|
125
|
+
post = {}
|
|
126
|
+
post[:orgid] = @options[:orgid]
|
|
127
|
+
post[:tid] = @options[:tid]
|
|
128
|
+
post[:username] = @options[:username]
|
|
129
|
+
post[:password] = @options[:password]
|
|
130
|
+
post[:mode] = (test? ? 'demo' : 'live')
|
|
131
|
+
post[:trans_type] = action
|
|
132
|
+
post
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
def add_reference(post, trans_id)
|
|
136
|
+
post[:trans_id] = trans_id
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
def add_customer_data(post, options = {})
|
|
140
|
+
post[:first_name] = options[:first_name]
|
|
141
|
+
post[:last_name] = options[:last_name]
|
|
142
|
+
post[:phone] = options[:phone]
|
|
143
|
+
post[:email] = options[:email]
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
def add_address(post, address)
|
|
147
|
+
return unless address
|
|
148
|
+
post[:address1] = address[:address1]
|
|
149
|
+
post[:address2] = address[:address2]
|
|
150
|
+
post[:zip] = address[:zip]
|
|
151
|
+
post[:state] = address[:state]
|
|
152
|
+
post[:city] = address[:city]
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
def add_amount(post, amount)
|
|
156
|
+
post[:amount] = amount(amount)
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
def add_creditcard(post, creditcard)
|
|
160
|
+
post[:cc] = creditcard.number
|
|
161
|
+
post[:month] = creditcard.month.to_s
|
|
162
|
+
post[:year] = creditcard.year.to_s
|
|
163
|
+
post[:cvv] = creditcard.verification_value
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
def parse(body)
|
|
167
|
+
JSON.parse(body)
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
def commit(post)
|
|
171
|
+
success = false
|
|
172
|
+
|
|
173
|
+
begin
|
|
174
|
+
raw_response = ssl_post(live_url, post.to_json, {'Content-Type' => 'application/json'})
|
|
175
|
+
response = parse(raw_response)
|
|
176
|
+
success = (response['RESPONSE_CODE'] == '00')
|
|
177
|
+
rescue ResponseError => e
|
|
178
|
+
raw_response = e.response.body
|
|
179
|
+
response = response_error(raw_response)
|
|
180
|
+
rescue JSON::ParserError
|
|
181
|
+
response = json_error(raw_response)
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
Response.new(success,
|
|
185
|
+
response_message(response),
|
|
186
|
+
response,
|
|
187
|
+
test: test?,
|
|
188
|
+
avs_result: {code: response['AVS_RESULT_CODE']},
|
|
189
|
+
cvv_result: response['VERIFICATION_RESULT_CODE'],
|
|
190
|
+
error_code: (success ? nil : STANDARD_ERROR_CODE_MAPPING[response['RESPONSE_CODE']]),
|
|
191
|
+
authorization: response['TRANSACTION_ID']
|
|
192
|
+
)
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
def response_error(raw_response)
|
|
196
|
+
parse(raw_response)
|
|
197
|
+
rescue JSON::ParserError
|
|
198
|
+
json_error(raw_response)
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
def json_error(raw_response)
|
|
202
|
+
{
|
|
203
|
+
error_message: 'Invalid response received from the Payhub API. Please contact wecare@payhub.com if you continue to receive this message.' \
|
|
204
|
+
" (The raw response returned by the API was #{raw_response.inspect})"
|
|
205
|
+
}
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
def response_message(response)
|
|
209
|
+
(response['RESPONSE_TEXT'] || response['RESPONSE_CODE'] || response[:error_message])
|
|
210
|
+
end
|
|
211
|
+
end
|
|
212
|
+
end
|
|
213
|
+
end
|