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
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# coding: utf-8
|
|
2
|
+
|
|
2
3
|
require 'nokogiri'
|
|
3
4
|
|
|
4
5
|
module ActiveMerchant #:nodoc:
|
|
@@ -9,30 +10,14 @@ module ActiveMerchant #:nodoc:
|
|
|
9
10
|
# used by many banks in Spain and is particularly well supported by
|
|
10
11
|
# Catalunya Caixa's ecommerce department.
|
|
11
12
|
#
|
|
12
|
-
#
|
|
13
|
-
#
|
|
14
|
-
#
|
|
15
|
-
# == Example use:
|
|
16
|
-
#
|
|
17
|
-
# gateway = ActiveMerchant::Billing::RedsysGateway.new(
|
|
18
|
-
# :login => "091358382",
|
|
19
|
-
# :secret_key => "qwertyasdf0123456789"
|
|
20
|
-
# )
|
|
21
|
-
#
|
|
22
|
-
# # Run a purchase for 10 euros
|
|
23
|
-
# response = gateway.purchase(1000, creditcard, :order_id => "123456")
|
|
24
|
-
# puts reponse.success? # => true
|
|
25
|
-
#
|
|
26
|
-
# # Partially refund the purchase
|
|
27
|
-
# response = gateway.refund(500, response.authorization)
|
|
13
|
+
# Redsys requires an order_id be provided with each transaction and it must
|
|
14
|
+
# follow a specific format. The rules are as follows:
|
|
28
15
|
#
|
|
29
|
-
# Redsys requires an order_id be provided with each transaction of a
|
|
30
|
-
# specific format. The rules are as follows:
|
|
31
|
-
#
|
|
32
|
-
# * Minimum length: 4
|
|
33
|
-
# * Maximum length: 12
|
|
34
16
|
# * First 4 digits must be numerical
|
|
35
17
|
# * Remaining 8 digits may be alphanumeric
|
|
18
|
+
# * Max length: 12
|
|
19
|
+
#
|
|
20
|
+
# If an invalid order_id is provided, we do our best to clean it up.
|
|
36
21
|
#
|
|
37
22
|
# Much of the code for this library is based on the active_merchant_sermepa
|
|
38
23
|
# integration gateway which uses essentially the same API but with the
|
|
@@ -40,43 +25,66 @@ module ActiveMerchant #:nodoc:
|
|
|
40
25
|
#
|
|
41
26
|
# Written by Samuel Lown for Cabify. For implementation questions, or
|
|
42
27
|
# test access details please get in touch: sam@cabify.com.
|
|
28
|
+
#
|
|
29
|
+
# *** SHA256 Authentication Update ***
|
|
30
|
+
#
|
|
31
|
+
# Redsys is dropping support for the SHA1 authentication method. This
|
|
32
|
+
# adapter has been updated to work with the new SHA256 authentication
|
|
33
|
+
# method, however in your initialization options hash you will need to
|
|
34
|
+
# specify the key/value :signature_algorithm => "sha256" to use the
|
|
35
|
+
# SHA256 method. Otherwise it will default to using the SHA1.
|
|
36
|
+
#
|
|
37
|
+
#
|
|
43
38
|
class RedsysGateway < Gateway
|
|
44
|
-
self.live_url =
|
|
45
|
-
self.test_url =
|
|
39
|
+
self.live_url = 'https://sis.sermepa.es/sis/operaciones'
|
|
40
|
+
self.test_url = 'https://sis-t.redsys.es:25443/sis/operaciones'
|
|
46
41
|
|
|
47
|
-
# Sensible region specific defaults.
|
|
48
42
|
self.supported_countries = ['ES']
|
|
49
43
|
self.default_currency = 'EUR'
|
|
50
44
|
self.money_format = :cents
|
|
51
45
|
|
|
52
46
|
# Not all card types may be activated by the bank!
|
|
53
47
|
self.supported_cardtypes = [:visa, :master, :american_express, :jcb, :diners_club]
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
self.homepage_url = "http://www.redsys.es/"
|
|
57
|
-
|
|
58
|
-
# What to call this gateway
|
|
59
|
-
self.display_name = "Redsys"
|
|
48
|
+
self.homepage_url = 'http://www.redsys.es/'
|
|
49
|
+
self.display_name = 'Redsys'
|
|
60
50
|
|
|
61
51
|
CURRENCY_CODES = {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
52
|
+
'AED' => '784',
|
|
53
|
+
'ARS' => '32',
|
|
54
|
+
'AUD' => '36',
|
|
55
|
+
'BRL' => '986',
|
|
56
|
+
'BOB' => '68',
|
|
57
|
+
'CAD' => '124',
|
|
58
|
+
'CHF' => '756',
|
|
59
|
+
'CLP' => '152',
|
|
60
|
+
'CNY' => '156',
|
|
61
|
+
'COP' => '170',
|
|
62
|
+
'CRC' => '188',
|
|
63
|
+
'CZK' => '203',
|
|
64
|
+
'DKK' => '208',
|
|
65
|
+
'DOP' => '214',
|
|
66
|
+
'EUR' => '978',
|
|
67
|
+
'GBP' => '826',
|
|
68
|
+
'GTQ' => '320',
|
|
69
|
+
'HUF' => '348',
|
|
70
|
+
'IDR' => '360',
|
|
71
|
+
'INR' => '356',
|
|
72
|
+
'JPY' => '392',
|
|
73
|
+
'KRW' => '410',
|
|
74
|
+
'MYR' => '458',
|
|
75
|
+
'MXN' => '484',
|
|
76
|
+
'NOK' => '578',
|
|
77
|
+
'NZD' => '554',
|
|
78
|
+
'PEN' => '604',
|
|
79
|
+
'PLN' => '985',
|
|
80
|
+
'RUB' => '643',
|
|
81
|
+
'SAR' => '682',
|
|
82
|
+
'SEK' => '752',
|
|
83
|
+
'SGD' => '702',
|
|
84
|
+
'THB' => '764',
|
|
85
|
+
'TWD' => '901',
|
|
86
|
+
'USD' => '840',
|
|
87
|
+
'UYU' => '858'
|
|
80
88
|
}
|
|
81
89
|
|
|
82
90
|
# The set of supported transactions for this gateway.
|
|
@@ -94,77 +102,72 @@ module ActiveMerchant #:nodoc:
|
|
|
94
102
|
# a card has been rejected. Syntax or general request errors
|
|
95
103
|
# are not covered here.
|
|
96
104
|
RESPONSE_TEXTS = {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
9257 => "Preauth not allowed for card",
|
|
164
|
-
9261 => "Operating limit exceeded",
|
|
165
|
-
9912 => "Issuer not available",
|
|
166
|
-
9913 => "Confirmation error",
|
|
167
|
-
9914 => "KO Confirmation"
|
|
105
|
+
0 => 'Transaction Approved',
|
|
106
|
+
400 => 'Cancellation Accepted',
|
|
107
|
+
481 => 'Cancellation Accepted',
|
|
108
|
+
500 => 'Reconciliation Accepted',
|
|
109
|
+
900 => 'Refund / Confirmation approved',
|
|
110
|
+
|
|
111
|
+
101 => 'Card expired',
|
|
112
|
+
102 => 'Card blocked temporarily or under susciption of fraud',
|
|
113
|
+
104 => 'Transaction not permitted',
|
|
114
|
+
107 => 'Contact the card issuer',
|
|
115
|
+
109 => 'Invalid identification by merchant or POS terminal',
|
|
116
|
+
110 => 'Invalid amount',
|
|
117
|
+
114 => 'Card cannot be used to the requested transaction',
|
|
118
|
+
116 => 'Insufficient credit',
|
|
119
|
+
118 => 'Non-registered card',
|
|
120
|
+
125 => 'Card not effective',
|
|
121
|
+
129 => 'CVV2/CVC2 Error',
|
|
122
|
+
167 => 'Contact the card issuer: suspected fraud',
|
|
123
|
+
180 => 'Card out of service',
|
|
124
|
+
181 => 'Card with credit or debit restrictions',
|
|
125
|
+
182 => 'Card with credit or debit restrictions',
|
|
126
|
+
184 => 'Authentication error',
|
|
127
|
+
190 => 'Refusal with no specific reason',
|
|
128
|
+
191 => 'Expiry date incorrect',
|
|
129
|
+
|
|
130
|
+
201 => 'Card expired',
|
|
131
|
+
202 => 'Card blocked temporarily or under suspicion of fraud',
|
|
132
|
+
204 => 'Transaction not permitted',
|
|
133
|
+
207 => 'Contact the card issuer',
|
|
134
|
+
208 => 'Lost or stolen card',
|
|
135
|
+
209 => 'Lost or stolen card',
|
|
136
|
+
280 => 'CVV2/CVC2 Error',
|
|
137
|
+
290 => 'Declined with no specific reason',
|
|
138
|
+
|
|
139
|
+
480 => 'Original transaction not located, or time-out exceeded',
|
|
140
|
+
501 => 'Original transaction not located, or time-out exceeded',
|
|
141
|
+
502 => 'Original transaction not located, or time-out exceeded',
|
|
142
|
+
503 => 'Original transaction not located, or time-out exceeded',
|
|
143
|
+
|
|
144
|
+
904 => 'Merchant not registered at FUC',
|
|
145
|
+
909 => 'System error',
|
|
146
|
+
912 => 'Issuer not available',
|
|
147
|
+
913 => 'Duplicate transmission',
|
|
148
|
+
916 => 'Amount too low',
|
|
149
|
+
928 => 'Time-out exceeded',
|
|
150
|
+
940 => 'Transaction cancelled previously',
|
|
151
|
+
941 => 'Authorization operation already cancelled',
|
|
152
|
+
942 => 'Original authorization declined',
|
|
153
|
+
943 => 'Different details from origin transaction',
|
|
154
|
+
944 => 'Session error',
|
|
155
|
+
945 => 'Duplicate transmission',
|
|
156
|
+
946 => 'Cancellation of transaction while in progress',
|
|
157
|
+
947 => 'Duplicate tranmission while in progress',
|
|
158
|
+
949 => 'POS Inoperative',
|
|
159
|
+
950 => 'Refund not possible',
|
|
160
|
+
9064 => 'Card number incorrect',
|
|
161
|
+
9078 => 'No payment method available',
|
|
162
|
+
9093 => 'Non-existent card',
|
|
163
|
+
9218 => 'Recursive transaction in bad gateway',
|
|
164
|
+
9253 => 'Check-digit incorrect',
|
|
165
|
+
9256 => 'Preauth not allowed for merchant',
|
|
166
|
+
9257 => 'Preauth not allowed for card',
|
|
167
|
+
9261 => 'Operating limit exceeded',
|
|
168
|
+
9912 => 'Issuer not available',
|
|
169
|
+
9913 => 'Confirmation error',
|
|
170
|
+
9914 => 'KO Confirmation'
|
|
168
171
|
}
|
|
169
172
|
|
|
170
173
|
# Creates a new instance
|
|
@@ -178,32 +181,38 @@ module ActiveMerchant #:nodoc:
|
|
|
178
181
|
# * <tt>:secret_key</tt> -- The Redsys Secret Key. (REQUIRED)
|
|
179
182
|
# * <tt>:terminal</tt> -- The Redsys Terminal. Defaults to 1. (OPTIONAL)
|
|
180
183
|
# * <tt>:test</tt> -- +true+ or +false+. Defaults to +false+. (OPTIONAL)
|
|
184
|
+
# * <tt>:signature_algorithm</tt> -- +"sha256"+ Defaults to +"sha1"+. (OPTIONAL)
|
|
181
185
|
def initialize(options = {})
|
|
182
186
|
requires!(options, :login, :secret_key)
|
|
183
187
|
options[:terminal] ||= 1
|
|
188
|
+
options[:signature_algorithm] ||= 'sha1'
|
|
184
189
|
super
|
|
185
190
|
end
|
|
186
191
|
|
|
187
|
-
def purchase(money,
|
|
192
|
+
def purchase(money, payment, options = {})
|
|
188
193
|
requires!(options, :order_id)
|
|
189
194
|
|
|
190
195
|
data = {}
|
|
191
196
|
add_action(data, :purchase)
|
|
192
197
|
add_amount(data, money, options)
|
|
193
198
|
add_order(data, options[:order_id])
|
|
194
|
-
|
|
199
|
+
add_payment(data, payment)
|
|
200
|
+
data[:description] = options[:description]
|
|
201
|
+
data[:store_in_vault] = options[:store]
|
|
195
202
|
|
|
196
203
|
commit data
|
|
197
204
|
end
|
|
198
205
|
|
|
199
|
-
def authorize(money,
|
|
206
|
+
def authorize(money, payment, options = {})
|
|
200
207
|
requires!(options, :order_id)
|
|
201
208
|
|
|
202
209
|
data = {}
|
|
203
210
|
add_action(data, :authorize)
|
|
204
211
|
add_amount(data, money, options)
|
|
205
212
|
add_order(data, options[:order_id])
|
|
206
|
-
|
|
213
|
+
add_payment(data, payment)
|
|
214
|
+
data[:description] = options[:description]
|
|
215
|
+
data[:store_in_vault] = options[:store]
|
|
207
216
|
|
|
208
217
|
commit data
|
|
209
218
|
end
|
|
@@ -214,6 +223,7 @@ module ActiveMerchant #:nodoc:
|
|
|
214
223
|
add_amount(data, money, options)
|
|
215
224
|
order_id, _, _ = split_authorization(authorization)
|
|
216
225
|
add_order(data, order_id)
|
|
226
|
+
data[:description] = options[:description]
|
|
217
227
|
|
|
218
228
|
commit data
|
|
219
229
|
end
|
|
@@ -224,6 +234,7 @@ module ActiveMerchant #:nodoc:
|
|
|
224
234
|
order_id, amount, currency = split_authorization(authorization)
|
|
225
235
|
add_amount(data, amount, :currency => currency)
|
|
226
236
|
add_order(data, order_id)
|
|
237
|
+
data[:description] = options[:description]
|
|
227
238
|
|
|
228
239
|
commit data
|
|
229
240
|
end
|
|
@@ -234,10 +245,37 @@ module ActiveMerchant #:nodoc:
|
|
|
234
245
|
add_amount(data, money, options)
|
|
235
246
|
order_id, _, _ = split_authorization(authorization)
|
|
236
247
|
add_order(data, order_id)
|
|
248
|
+
data[:description] = options[:description]
|
|
237
249
|
|
|
238
250
|
commit data
|
|
239
251
|
end
|
|
240
252
|
|
|
253
|
+
def verify(creditcard, options = {})
|
|
254
|
+
MultiResponse.run(:use_first_response) do |r|
|
|
255
|
+
r.process { authorize(100, creditcard, options) }
|
|
256
|
+
r.process(:ignore_result) { void(r.authorization, options) }
|
|
257
|
+
end
|
|
258
|
+
end
|
|
259
|
+
|
|
260
|
+
def supports_scrubbing
|
|
261
|
+
true
|
|
262
|
+
end
|
|
263
|
+
|
|
264
|
+
def scrub(transcript)
|
|
265
|
+
transcript.
|
|
266
|
+
gsub(%r((Authorization: Basic )\w+), '\1[FILTERED]').
|
|
267
|
+
gsub(%r((%3CDS_MERCHANT_PAN%3E)\d+(%3C%2FDS_MERCHANT_PAN%3E))i, '\1[FILTERED]\2').
|
|
268
|
+
gsub(%r((%3CDS_MERCHANT_CVV2%3E)\d+(%3C%2FDS_MERCHANT_CVV2%3E))i, '\1[FILTERED]\2').
|
|
269
|
+
gsub(%r((<DS_MERCHANT_PAN>)\d+(</DS_MERCHANT_PAN>))i, '\1[FILTERED]\2').
|
|
270
|
+
gsub(%r((<DS_MERCHANT_CVV2>)\d+(</DS_MERCHANT_CVV2>))i, '\1[FILTERED]\2').
|
|
271
|
+
gsub(%r((DS_MERCHANT_CVV2)%2F%3E%0A%3C%2F)i, '\1[BLANK]').
|
|
272
|
+
gsub(%r((DS_MERCHANT_CVV2)%2F%3E%3C)i, '\1[BLANK]').
|
|
273
|
+
gsub(%r((DS_MERCHANT_CVV2%3E)(%3C%2FDS_MERCHANT_CVV2))i, '\1[BLANK]\2').
|
|
274
|
+
gsub(%r((<DS_MERCHANT_CVV2>)(</DS_MERCHANT_CVV2>))i, '\1[BLANK]\2').
|
|
275
|
+
gsub(%r((DS_MERCHANT_CVV2%3E)\++(%3C%2FDS_MERCHANT_CVV2))i, '\1[BLANK]\2').
|
|
276
|
+
gsub(%r((<DS_MERCHANT_CVV2>)\s+(</DS_MERCHANT_CVV2>))i, '\1[BLANK]\2')
|
|
277
|
+
end
|
|
278
|
+
|
|
241
279
|
private
|
|
242
280
|
|
|
243
281
|
def add_action(data, action)
|
|
@@ -250,39 +288,52 @@ module ActiveMerchant #:nodoc:
|
|
|
250
288
|
end
|
|
251
289
|
|
|
252
290
|
def add_order(data, order_id)
|
|
253
|
-
|
|
254
|
-
data[:order_id] = order_id
|
|
291
|
+
data[:order_id] = clean_order_id(order_id)
|
|
255
292
|
end
|
|
256
293
|
|
|
257
294
|
def url
|
|
258
295
|
test? ? test_url : live_url
|
|
259
296
|
end
|
|
260
297
|
|
|
261
|
-
def
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
:
|
|
269
|
-
|
|
270
|
-
|
|
298
|
+
def add_payment(data, card)
|
|
299
|
+
if card.is_a?(String)
|
|
300
|
+
data[:credit_card_token] = card
|
|
301
|
+
else
|
|
302
|
+
name = [card.first_name, card.last_name].join(' ').slice(0, 60)
|
|
303
|
+
year = sprintf('%.4i', card.year)
|
|
304
|
+
month = sprintf('%.2i', card.month)
|
|
305
|
+
data[:card] = {
|
|
306
|
+
:name => name,
|
|
307
|
+
:pan => card.number,
|
|
308
|
+
:date => "#{year[2..3]}#{month}",
|
|
309
|
+
:cvv => card.verification_value
|
|
310
|
+
}
|
|
311
|
+
end
|
|
271
312
|
end
|
|
272
313
|
|
|
273
314
|
def commit(data)
|
|
274
|
-
|
|
315
|
+
parse(ssl_post(url, "entrada=#{CGI.escape(xml_request_from(data))}", headers))
|
|
316
|
+
end
|
|
317
|
+
|
|
318
|
+
def headers
|
|
319
|
+
{
|
|
275
320
|
'Content-Type' => 'application/x-www-form-urlencoded'
|
|
276
321
|
}
|
|
277
|
-
|
|
278
|
-
|
|
322
|
+
end
|
|
323
|
+
|
|
324
|
+
def xml_request_from(data)
|
|
325
|
+
if sha256_authentication?
|
|
326
|
+
build_sha256_xml_request(data)
|
|
327
|
+
else
|
|
328
|
+
build_sha1_xml_request(data)
|
|
329
|
+
end
|
|
279
330
|
end
|
|
280
331
|
|
|
281
332
|
def build_signature(data)
|
|
282
333
|
str = data[:amount] +
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
334
|
+
data[:order_id].to_s +
|
|
335
|
+
@options[:login].to_s +
|
|
336
|
+
data[:currency]
|
|
286
337
|
|
|
287
338
|
if card = data[:card]
|
|
288
339
|
str << card[:pan]
|
|
@@ -290,23 +341,51 @@ module ActiveMerchant #:nodoc:
|
|
|
290
341
|
end
|
|
291
342
|
|
|
292
343
|
str << data[:action]
|
|
344
|
+
if data[:store_in_vault]
|
|
345
|
+
str << 'REQUIRED'
|
|
346
|
+
elsif data[:credit_card_token]
|
|
347
|
+
str << data[:credit_card_token]
|
|
348
|
+
end
|
|
293
349
|
str << @options[:secret_key]
|
|
294
350
|
|
|
295
351
|
Digest::SHA1.hexdigest(str)
|
|
296
352
|
end
|
|
297
353
|
|
|
298
|
-
def
|
|
354
|
+
def build_sha256_xml_request(data)
|
|
355
|
+
xml = Builder::XmlMarkup.new
|
|
356
|
+
xml.instruct!
|
|
357
|
+
xml.REQUEST do
|
|
358
|
+
build_merchant_data(xml, data)
|
|
359
|
+
xml.DS_SIGNATUREVERSION 'HMAC_SHA256_V1'
|
|
360
|
+
xml.DS_SIGNATURE sign_request(merchant_data_xml(data), data[:order_id])
|
|
361
|
+
end
|
|
362
|
+
xml.target!
|
|
363
|
+
end
|
|
364
|
+
|
|
365
|
+
def build_sha1_xml_request(data)
|
|
299
366
|
xml = Builder::XmlMarkup.new :indent => 2
|
|
367
|
+
build_merchant_data(xml, data)
|
|
368
|
+
xml.target!
|
|
369
|
+
end
|
|
370
|
+
|
|
371
|
+
def merchant_data_xml(data)
|
|
372
|
+
xml = Builder::XmlMarkup.new
|
|
373
|
+
build_merchant_data(xml, data)
|
|
374
|
+
xml.target!
|
|
375
|
+
end
|
|
376
|
+
|
|
377
|
+
def build_merchant_data(xml, data)
|
|
300
378
|
xml.DATOSENTRADA do
|
|
301
379
|
# Basic elements
|
|
302
380
|
xml.DS_Version 0.1
|
|
303
|
-
xml.DS_MERCHANT_CURRENCY
|
|
304
|
-
xml.DS_MERCHANT_AMOUNT
|
|
305
|
-
xml.DS_MERCHANT_ORDER
|
|
306
|
-
xml.DS_MERCHANT_TRANSACTIONTYPE
|
|
307
|
-
xml.
|
|
308
|
-
xml.
|
|
309
|
-
xml.
|
|
381
|
+
xml.DS_MERCHANT_CURRENCY data[:currency]
|
|
382
|
+
xml.DS_MERCHANT_AMOUNT data[:amount]
|
|
383
|
+
xml.DS_MERCHANT_ORDER data[:order_id]
|
|
384
|
+
xml.DS_MERCHANT_TRANSACTIONTYPE data[:action]
|
|
385
|
+
xml.DS_MERCHANT_PRODUCTDESCRIPTION data[:description]
|
|
386
|
+
xml.DS_MERCHANT_TERMINAL @options[:terminal]
|
|
387
|
+
xml.DS_MERCHANT_MERCHANTCODE @options[:login]
|
|
388
|
+
xml.DS_MERCHANT_MERCHANTSIGNATURE build_signature(data) unless sha256_authentication?
|
|
310
389
|
|
|
311
390
|
# Only when card is present
|
|
312
391
|
if data[:card]
|
|
@@ -314,20 +393,23 @@ module ActiveMerchant #:nodoc:
|
|
|
314
393
|
xml.DS_MERCHANT_PAN data[:card][:pan]
|
|
315
394
|
xml.DS_MERCHANT_EXPIRYDATE data[:card][:date]
|
|
316
395
|
xml.DS_MERCHANT_CVV2 data[:card][:cvv]
|
|
396
|
+
xml.DS_MERCHANT_IDENTIFIER 'REQUIRED' if data[:store_in_vault]
|
|
397
|
+
elsif data[:credit_card_token]
|
|
398
|
+
xml.DS_MERCHANT_IDENTIFIER data[:credit_card_token]
|
|
399
|
+
xml.DS_MERCHANT_DIRECTPAYMENT 'true'
|
|
317
400
|
end
|
|
318
401
|
end
|
|
319
|
-
xml.target!
|
|
320
402
|
end
|
|
321
403
|
|
|
322
404
|
def parse(data)
|
|
323
405
|
params = {}
|
|
324
406
|
success = false
|
|
325
|
-
message =
|
|
407
|
+
message = ''
|
|
326
408
|
options = @options.merge(:test => test?)
|
|
327
409
|
xml = Nokogiri::XML(data)
|
|
328
|
-
code = xml.xpath(
|
|
329
|
-
if code ==
|
|
330
|
-
op = xml.xpath(
|
|
410
|
+
code = xml.xpath('//RETORNOXML/CODIGO').text
|
|
411
|
+
if code == '0'
|
|
412
|
+
op = xml.xpath('//RETORNOXML/OPERACION')
|
|
331
413
|
op.children.each do |element|
|
|
332
414
|
params[element.name.downcase.to_sym] = element.text
|
|
333
415
|
end
|
|
@@ -337,7 +419,7 @@ module ActiveMerchant #:nodoc:
|
|
|
337
419
|
options[:authorization] = build_authorization(params)
|
|
338
420
|
success = is_success_response?(params[:ds_response])
|
|
339
421
|
else
|
|
340
|
-
message =
|
|
422
|
+
message = 'Response failed validation check'
|
|
341
423
|
end
|
|
342
424
|
else
|
|
343
425
|
# Some kind of programmer error with the request!
|
|
@@ -348,31 +430,37 @@ module ActiveMerchant #:nodoc:
|
|
|
348
430
|
end
|
|
349
431
|
|
|
350
432
|
def validate_signature(data)
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
433
|
+
if sha256_authentication?
|
|
434
|
+
sig = Base64.strict_encode64(mac256(get_key(data[:ds_order].to_s), xml_signed_fields(data)))
|
|
435
|
+
sig.casecmp(data[:ds_signature].to_s).zero?
|
|
436
|
+
else
|
|
437
|
+
str = data[:ds_amount] +
|
|
438
|
+
data[:ds_order].to_s +
|
|
439
|
+
data[:ds_merchantcode] +
|
|
440
|
+
data[:ds_currency] +
|
|
441
|
+
data[:ds_response] +
|
|
442
|
+
data[:ds_cardnumber].to_s +
|
|
443
|
+
data[:ds_transactiontype].to_s +
|
|
444
|
+
data[:ds_securepayment].to_s +
|
|
445
|
+
@options[:secret_key]
|
|
446
|
+
|
|
447
|
+
sig = Digest::SHA1.hexdigest(str)
|
|
448
|
+
data[:ds_signature].to_s.downcase == sig
|
|
449
|
+
end
|
|
363
450
|
end
|
|
364
451
|
|
|
365
452
|
def build_authorization(params)
|
|
366
|
-
[params[:ds_order], params[:ds_amount], params[:ds_currency]].join(
|
|
453
|
+
[params[:ds_order], params[:ds_amount], params[:ds_currency]].join('|')
|
|
367
454
|
end
|
|
368
455
|
|
|
369
456
|
def split_authorization(authorization)
|
|
370
|
-
order_id, amount, currency = authorization.split(
|
|
457
|
+
order_id, amount, currency = authorization.split('|')
|
|
371
458
|
[order_id, amount.to_i, currency]
|
|
372
459
|
end
|
|
373
460
|
|
|
374
461
|
def currency_code(currency)
|
|
375
462
|
return currency if currency =~ /^\d+$/
|
|
463
|
+
raise ArgumentError, "Unknown currency #{currency}" unless CURRENCY_CODES[currency]
|
|
376
464
|
CURRENCY_CODES[currency]
|
|
377
465
|
end
|
|
378
466
|
|
|
@@ -383,12 +471,64 @@ module ActiveMerchant #:nodoc:
|
|
|
383
471
|
def response_text(code)
|
|
384
472
|
code = code.to_i
|
|
385
473
|
code = 0 if code < 100
|
|
386
|
-
RESPONSE_TEXTS[code] ||
|
|
474
|
+
RESPONSE_TEXTS[code] || 'Unkown code, please check in manual'
|
|
387
475
|
end
|
|
388
476
|
|
|
389
477
|
def is_success_response?(code)
|
|
390
478
|
(code.to_i < 100) || [400, 481, 500, 900].include?(code.to_i)
|
|
391
479
|
end
|
|
480
|
+
|
|
481
|
+
def clean_order_id(order_id)
|
|
482
|
+
cleansed = order_id.gsub(/[^\da-zA-Z]/, '')
|
|
483
|
+
if cleansed =~ /^\d{4}/
|
|
484
|
+
cleansed[0..11]
|
|
485
|
+
else
|
|
486
|
+
'%04d%s' % [rand(0..9999), cleansed[0...8]]
|
|
487
|
+
end
|
|
488
|
+
end
|
|
489
|
+
|
|
490
|
+
def sha256_authentication?
|
|
491
|
+
@options[:signature_algorithm] == 'sha256'
|
|
492
|
+
end
|
|
493
|
+
|
|
494
|
+
def sign_request(xml_request_string, order_id)
|
|
495
|
+
key = encrypt(@options[:secret_key], order_id)
|
|
496
|
+
Base64.strict_encode64(mac256(key, xml_request_string))
|
|
497
|
+
end
|
|
498
|
+
|
|
499
|
+
def encrypt(key, order_id)
|
|
500
|
+
block_length = 8
|
|
501
|
+
cipher = OpenSSL::Cipher.new('DES3')
|
|
502
|
+
cipher.encrypt
|
|
503
|
+
|
|
504
|
+
cipher.key = Base64.strict_decode64(key)
|
|
505
|
+
# The OpenSSL default of an all-zeroes ("\\0") IV is used.
|
|
506
|
+
cipher.padding = 0
|
|
507
|
+
|
|
508
|
+
order_id += "\0" until order_id.bytesize % block_length == 0 # Pad with zeros
|
|
509
|
+
|
|
510
|
+
output = cipher.update(order_id) + cipher.final
|
|
511
|
+
output
|
|
512
|
+
end
|
|
513
|
+
|
|
514
|
+
def mac256(key, data)
|
|
515
|
+
OpenSSL::HMAC.digest(OpenSSL::Digest.new('sha256'), key, data)
|
|
516
|
+
end
|
|
517
|
+
|
|
518
|
+
def xml_signed_fields(data)
|
|
519
|
+
xml_signed_fields = data[:ds_amount] + data[:ds_order] + data[:ds_merchantcode] +
|
|
520
|
+
data[:ds_currency] + data[:ds_response]
|
|
521
|
+
|
|
522
|
+
if data[:ds_cardnumber]
|
|
523
|
+
xml_signed_fields += data[:ds_cardnumber]
|
|
524
|
+
end
|
|
525
|
+
|
|
526
|
+
xml_signed_fields + data[:ds_transactiontype] + data[:ds_securepayment]
|
|
527
|
+
end
|
|
528
|
+
|
|
529
|
+
def get_key(order_id)
|
|
530
|
+
encrypt(@options[:secret_key], order_id)
|
|
531
|
+
end
|
|
392
532
|
end
|
|
393
533
|
end
|
|
394
534
|
end
|