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,290 @@
|
|
|
1
|
+
module ActiveMerchant #:nodoc:
|
|
2
|
+
module Billing #:nodoc:
|
|
3
|
+
class QuickbooksGateway < Gateway
|
|
4
|
+
self.test_url = 'https://sandbox.api.intuit.com'
|
|
5
|
+
self.live_url = 'https://api.intuit.com'
|
|
6
|
+
|
|
7
|
+
self.supported_countries = ['US']
|
|
8
|
+
self.default_currency = 'USD'
|
|
9
|
+
self.supported_cardtypes = [:visa, :master, :american_express, :discover, :diners]
|
|
10
|
+
|
|
11
|
+
self.homepage_url = 'http://payments.intuit.com'
|
|
12
|
+
self.display_name = 'QuickBooks Payments'
|
|
13
|
+
ENDPOINT = '/quickbooks/v4/payments/charges'
|
|
14
|
+
OAUTH_ENDPOINTS = {
|
|
15
|
+
site: 'https://oauth.intuit.com',
|
|
16
|
+
request_token_path: '/oauth/v1/get_request_token',
|
|
17
|
+
authorize_url: 'https://appcenter.intuit.com/Connect/Begin',
|
|
18
|
+
access_token_path: '/oauth/v1/get_access_token'
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
# https://developer.intuit.com/docs/0150_payments/0300_developer_guides/error_handling
|
|
22
|
+
|
|
23
|
+
STANDARD_ERROR_CODE_MAPPING = {
|
|
24
|
+
# Fraud Warnings
|
|
25
|
+
'PMT-1000' => STANDARD_ERROR_CODE[:processing_error], # payment was accepted, but refund was unsuccessful
|
|
26
|
+
'PMT-1001' => STANDARD_ERROR_CODE[:invalid_cvc], # payment processed, but cvc was invalid
|
|
27
|
+
'PMT-1002' => STANDARD_ERROR_CODE[:incorrect_address], # payment processed, incorrect address info
|
|
28
|
+
'PMT-1003' => STANDARD_ERROR_CODE[:processing_error], # payment processed, address info couldn't be validated
|
|
29
|
+
|
|
30
|
+
# Fraud Errors
|
|
31
|
+
'PMT-2000' => STANDARD_ERROR_CODE[:incorrect_cvc], # Incorrect CVC
|
|
32
|
+
'PMT-2001' => STANDARD_ERROR_CODE[:invalid_cvc], # CVC check unavaliable
|
|
33
|
+
'PMT-2002' => STANDARD_ERROR_CODE[:incorrect_address], # Incorrect address
|
|
34
|
+
'PMT-2003' => STANDARD_ERROR_CODE[:incorrect_address], # Address info unavailable
|
|
35
|
+
|
|
36
|
+
'PMT-3000' => STANDARD_ERROR_CODE[:processing_error], # Merchant account could not be validated
|
|
37
|
+
|
|
38
|
+
# Invalid Request
|
|
39
|
+
'PMT-4000' => STANDARD_ERROR_CODE[:processing_error], # Object is invalid
|
|
40
|
+
'PMT-4001' => STANDARD_ERROR_CODE[:processing_error], # Object not found
|
|
41
|
+
'PMT-4002' => STANDARD_ERROR_CODE[:processing_error], # Object is required
|
|
42
|
+
|
|
43
|
+
# Transaction Declined
|
|
44
|
+
'PMT-5000' => STANDARD_ERROR_CODE[:card_declined], # Request was declined
|
|
45
|
+
'PMT-5001' => STANDARD_ERROR_CODE[:card_declined], # Merchant does not support given payment method
|
|
46
|
+
|
|
47
|
+
# System Error
|
|
48
|
+
'PMT-6000' => STANDARD_ERROR_CODE[:processing_error], # A temporary Issue prevented this request from being processed.
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
FRAUD_WARNING_CODES = ['PMT-1000', 'PMT-1001', 'PMT-1002', 'PMT-1003']
|
|
52
|
+
|
|
53
|
+
def initialize(options = {})
|
|
54
|
+
requires!(options, :consumer_key, :consumer_secret, :access_token, :token_secret, :realm)
|
|
55
|
+
@options = options
|
|
56
|
+
super
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def purchase(money, payment, options = {})
|
|
60
|
+
post = {}
|
|
61
|
+
add_amount(post, money, options)
|
|
62
|
+
add_charge_data(post, payment, options)
|
|
63
|
+
post[:capture] = 'true'
|
|
64
|
+
|
|
65
|
+
commit(ENDPOINT, post)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def authorize(money, payment, options = {})
|
|
69
|
+
post = {}
|
|
70
|
+
add_amount(post, money, options)
|
|
71
|
+
add_charge_data(post, payment, options)
|
|
72
|
+
post[:capture] = 'false'
|
|
73
|
+
|
|
74
|
+
commit(ENDPOINT, post)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def capture(money, authorization, options = {})
|
|
78
|
+
post = {}
|
|
79
|
+
capture_uri = "#{ENDPOINT}/#{CGI.escape(authorization)}/capture"
|
|
80
|
+
post[:amount] = localized_amount(money, currency(money))
|
|
81
|
+
add_context(post, options)
|
|
82
|
+
|
|
83
|
+
commit(capture_uri, post)
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def refund(money, authorization, options = {})
|
|
87
|
+
post = {}
|
|
88
|
+
post[:amount] = localized_amount(money, currency(money))
|
|
89
|
+
add_context(post, options)
|
|
90
|
+
|
|
91
|
+
commit(refund_uri(authorization), post)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def verify(credit_card, options = {})
|
|
95
|
+
authorize(1.00, credit_card, options)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def supports_scrubbing?
|
|
99
|
+
true
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def scrub(transcript)
|
|
103
|
+
transcript.
|
|
104
|
+
gsub(%r((realm=\")\w+), '\1[FILTERED]').
|
|
105
|
+
gsub(%r((oauth_consumer_key=\")\w+), '\1[FILTERED]').
|
|
106
|
+
gsub(%r((oauth_nonce=\")\w+), '\1[FILTERED]').
|
|
107
|
+
gsub(%r((oauth_signature=\")[a-zA-Z%0-9]+), '\1[FILTERED]').
|
|
108
|
+
gsub(%r((oauth_token=\")\w+), '\1[FILTERED]').
|
|
109
|
+
gsub(%r((number\D+)\d{16}), '\1[FILTERED]').
|
|
110
|
+
gsub(%r((cvc\D+)\d{3}), '\1[FILTERED]')
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
private
|
|
114
|
+
|
|
115
|
+
def add_charge_data(post, payment, options = {})
|
|
116
|
+
add_payment(post, payment, options)
|
|
117
|
+
add_address(post, options)
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def add_address(post, options)
|
|
121
|
+
return unless post[:card]&.kind_of?(Hash)
|
|
122
|
+
|
|
123
|
+
card_address = {}
|
|
124
|
+
if address = options[:billing_address] || options[:address]
|
|
125
|
+
card_address[:streetAddress] = address[:address1]
|
|
126
|
+
card_address[:city] = address[:city]
|
|
127
|
+
card_address[:region] = address[:state] || address[:region]
|
|
128
|
+
card_address[:country] = address[:country]
|
|
129
|
+
card_address[:postalCode] = address[:zip] if address[:zip]
|
|
130
|
+
end
|
|
131
|
+
post[:card][:address] = card_address
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def add_amount(post, money, options = {})
|
|
135
|
+
currency = options[:currency] || currency(money)
|
|
136
|
+
post[:amount] = localized_amount(money, currency)
|
|
137
|
+
post[:currency] = currency.upcase
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def add_payment(post, payment, options = {})
|
|
141
|
+
add_creditcard(post, payment, options)
|
|
142
|
+
add_context(post, options)
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
def add_creditcard(post, creditcard, options = {})
|
|
146
|
+
card = {}
|
|
147
|
+
card[:number] = creditcard.number
|
|
148
|
+
card[:expMonth] = '%02d' % creditcard.month
|
|
149
|
+
card[:expYear] = creditcard.year
|
|
150
|
+
card[:cvc] = creditcard.verification_value if creditcard.verification_value?
|
|
151
|
+
card[:name] = creditcard.name if creditcard.name
|
|
152
|
+
card[:commercialCardCode] = options[:card_code] if options[:card_code]
|
|
153
|
+
|
|
154
|
+
post[:card] = card
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
def add_context(post, options = {})
|
|
158
|
+
post[:context] = {
|
|
159
|
+
mobile: options.fetch(:mobile, false),
|
|
160
|
+
isEcommerce: options.fetch(:ecommerce, true)
|
|
161
|
+
}
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
def parse(body)
|
|
165
|
+
JSON.parse(body)
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
def commit(uri, body = {}, method = :post)
|
|
169
|
+
endpoint = gateway_url + uri
|
|
170
|
+
# The QuickBooks API returns HTTP 4xx on failed transactions, which causes a
|
|
171
|
+
# ResponseError raise, so we have to inspect the response and discern between
|
|
172
|
+
# a legitimate HTTP error and an actual gateway transactional error.
|
|
173
|
+
response = begin
|
|
174
|
+
case method
|
|
175
|
+
when :post
|
|
176
|
+
ssl_post(endpoint, post_data(body), headers(:post, endpoint))
|
|
177
|
+
when :get
|
|
178
|
+
ssl_request(:get, endpoint, nil, headers(:get, endpoint))
|
|
179
|
+
else
|
|
180
|
+
raise ArgumentError, "Invalid HTTP method: #{method}. Valid methods are :post and :get"
|
|
181
|
+
end
|
|
182
|
+
rescue ResponseError => e
|
|
183
|
+
extract_response_body_or_raise(e)
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
response_object(response)
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
def response_object(raw_response)
|
|
190
|
+
parsed_response = parse(raw_response)
|
|
191
|
+
|
|
192
|
+
Response.new(
|
|
193
|
+
success?(parsed_response),
|
|
194
|
+
message_from(parsed_response),
|
|
195
|
+
parsed_response,
|
|
196
|
+
authorization: authorization_from(parsed_response),
|
|
197
|
+
test: test?,
|
|
198
|
+
cvv_result: cvv_code_from(parsed_response),
|
|
199
|
+
error_code: errors_from(parsed_response),
|
|
200
|
+
fraud_review: fraud_review_status_from(parsed_response)
|
|
201
|
+
)
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
def gateway_url
|
|
205
|
+
test? ? test_url : live_url
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
def post_data(data = {})
|
|
209
|
+
data.to_json
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
def headers(method, uri)
|
|
213
|
+
raise ArgumentError, "Invalid HTTP method: #{method}. Valid methods are :post and :get" unless [:post, :get].include?(method)
|
|
214
|
+
request_uri = URI.parse(uri)
|
|
215
|
+
|
|
216
|
+
# Following the guidelines from http://nouncer.com/oauth/authentication.html
|
|
217
|
+
oauth_parameters = {
|
|
218
|
+
oauth_nonce: generate_unique_id,
|
|
219
|
+
oauth_timestamp: Time.now.to_i.to_s,
|
|
220
|
+
oauth_signature_method: 'HMAC-SHA1',
|
|
221
|
+
oauth_version: '1.0',
|
|
222
|
+
oauth_consumer_key: @options[:consumer_key],
|
|
223
|
+
oauth_token: @options[:access_token]
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
# prepare components for signature
|
|
227
|
+
oauth_signature_base_string = [method.to_s.upcase, request_uri.to_s, oauth_parameters.to_param].map { |v| CGI.escape(v) }.join('&')
|
|
228
|
+
oauth_signing_key = [@options[:consumer_secret], @options[:token_secret]].map { |v| CGI.escape(v) }.join('&')
|
|
229
|
+
hmac_signature = OpenSSL::HMAC.digest(OpenSSL::Digest.new('sha1'), oauth_signing_key, oauth_signature_base_string)
|
|
230
|
+
|
|
231
|
+
# append signature to required OAuth parameters
|
|
232
|
+
oauth_parameters[:oauth_signature] = CGI.escape(Base64.encode64(hmac_signature).chomp.gsub(/\n/, ''))
|
|
233
|
+
|
|
234
|
+
# prepare Authorization header string
|
|
235
|
+
oauth_parameters = Hash[oauth_parameters.sort_by { |k, _| k }]
|
|
236
|
+
oauth_headers = ["OAuth realm=\"#{@options[:realm]}\""]
|
|
237
|
+
oauth_headers += oauth_parameters.map { |k, v| "#{k}=\"#{v}\"" }
|
|
238
|
+
|
|
239
|
+
{
|
|
240
|
+
'Content-type' => 'application/json',
|
|
241
|
+
'Request-Id' => generate_unique_id,
|
|
242
|
+
'Authorization' => oauth_headers.join(', ')
|
|
243
|
+
}
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
def cvv_code_from(response)
|
|
247
|
+
if response['errors'].present?
|
|
248
|
+
FRAUD_WARNING_CODES.include?(response['errors'].first['code']) ? 'I' : ''
|
|
249
|
+
else
|
|
250
|
+
success?(response) ? 'M' : ''
|
|
251
|
+
end
|
|
252
|
+
end
|
|
253
|
+
|
|
254
|
+
def success?(response)
|
|
255
|
+
return FRAUD_WARNING_CODES.concat(['0']).include?(response['errors'].first['code']) if response['errors']
|
|
256
|
+
|
|
257
|
+
!['DECLINED', 'CANCELLED'].include?(response['status'])
|
|
258
|
+
end
|
|
259
|
+
|
|
260
|
+
def message_from(response)
|
|
261
|
+
response['errors'].present? ? response['errors'].map { |error_hash| error_hash['message'] }.join(' ') : response['status']
|
|
262
|
+
end
|
|
263
|
+
|
|
264
|
+
def errors_from(response)
|
|
265
|
+
response['errors'].present? ? STANDARD_ERROR_CODE_MAPPING[response['errors'].first['code']] : ''
|
|
266
|
+
end
|
|
267
|
+
|
|
268
|
+
def authorization_from(response)
|
|
269
|
+
response['id']
|
|
270
|
+
end
|
|
271
|
+
|
|
272
|
+
def fraud_review_status_from(response)
|
|
273
|
+
response['errors'] && FRAUD_WARNING_CODES.include?(response['errors'].first['code'])
|
|
274
|
+
end
|
|
275
|
+
|
|
276
|
+
def extract_response_body_or_raise(response_error)
|
|
277
|
+
begin
|
|
278
|
+
parse(response_error.response.body)
|
|
279
|
+
rescue JSON::ParserError
|
|
280
|
+
raise response_error
|
|
281
|
+
end
|
|
282
|
+
response_error.response.body
|
|
283
|
+
end
|
|
284
|
+
|
|
285
|
+
def refund_uri(authorization)
|
|
286
|
+
"#{ENDPOINT}/#{CGI.escape(authorization)}/refunds"
|
|
287
|
+
end
|
|
288
|
+
end
|
|
289
|
+
end
|
|
290
|
+
end
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
module QuickpayCommon
|
|
2
|
+
MD5_CHECK_FIELDS = {
|
|
3
|
+
3 => {
|
|
4
|
+
:authorize => %w(protocol msgtype merchant ordernumber amount
|
|
5
|
+
currency autocapture cardnumber expirationdate
|
|
6
|
+
cvd cardtypelock testmode),
|
|
7
|
+
|
|
8
|
+
:capture => %w(protocol msgtype merchant amount finalize transaction),
|
|
9
|
+
|
|
10
|
+
:cancel => %w(protocol msgtype merchant transaction),
|
|
11
|
+
|
|
12
|
+
:refund => %w(protocol msgtype merchant amount transaction),
|
|
13
|
+
|
|
14
|
+
:subscribe => %w(protocol msgtype merchant ordernumber cardnumber
|
|
15
|
+
expirationdate cvd cardtypelock description testmode),
|
|
16
|
+
|
|
17
|
+
:recurring => %w(protocol msgtype merchant ordernumber amount
|
|
18
|
+
currency autocapture transaction),
|
|
19
|
+
|
|
20
|
+
:status => %w(protocol msgtype merchant transaction),
|
|
21
|
+
|
|
22
|
+
:chstatus => %w(protocol msgtype merchant)
|
|
23
|
+
},
|
|
24
|
+
|
|
25
|
+
4 => {
|
|
26
|
+
:authorize => %w(protocol msgtype merchant ordernumber amount
|
|
27
|
+
currency autocapture cardnumber expirationdate cvd
|
|
28
|
+
cardtypelock testmode fraud_remote_addr
|
|
29
|
+
fraud_http_accept fraud_http_accept_language
|
|
30
|
+
fraud_http_accept_encoding fraud_http_accept_charset
|
|
31
|
+
fraud_http_referer fraud_http_user_agent apikey),
|
|
32
|
+
|
|
33
|
+
:capture => %w(protocol msgtype merchant amount finalize transaction apikey),
|
|
34
|
+
|
|
35
|
+
:cancel => %w(protocol msgtype merchant transaction apikey),
|
|
36
|
+
|
|
37
|
+
:refund => %w(protocol msgtype merchant amount transaction apikey),
|
|
38
|
+
|
|
39
|
+
:subscribe => %w(protocol msgtype merchant ordernumber cardnumber
|
|
40
|
+
expirationdate cvd cardtypelock description testmode
|
|
41
|
+
fraud_remote_addr fraud_http_accept fraud_http_accept_language
|
|
42
|
+
fraud_http_accept_encoding fraud_http_accept_charset
|
|
43
|
+
fraud_http_referer fraud_http_user_agent apikey),
|
|
44
|
+
|
|
45
|
+
:recurring => %w(protocol msgtype merchant ordernumber amount currency
|
|
46
|
+
autocapture transaction apikey),
|
|
47
|
+
|
|
48
|
+
:status => %w(protocol msgtype merchant transaction apikey),
|
|
49
|
+
|
|
50
|
+
:chstatus => %w(protocol msgtype merchant apikey)
|
|
51
|
+
},
|
|
52
|
+
|
|
53
|
+
5 => {
|
|
54
|
+
:authorize => %w(protocol msgtype merchant ordernumber amount
|
|
55
|
+
currency autocapture cardnumber expirationdate cvd
|
|
56
|
+
cardtypelock testmode fraud_remote_addr
|
|
57
|
+
fraud_http_accept fraud_http_accept_language
|
|
58
|
+
fraud_http_accept_encoding fraud_http_accept_charset
|
|
59
|
+
fraud_http_referer fraud_http_user_agent apikey),
|
|
60
|
+
|
|
61
|
+
:capture => %w(protocol msgtype merchant amount finalize transaction apikey),
|
|
62
|
+
|
|
63
|
+
:cancel => %w(protocol msgtype merchant transaction apikey),
|
|
64
|
+
|
|
65
|
+
:refund => %w(protocol msgtype merchant amount transaction apikey),
|
|
66
|
+
|
|
67
|
+
:subscribe => %w(protocol msgtype merchant ordernumber cardnumber
|
|
68
|
+
expirationdate cvd cardtypelock description testmode
|
|
69
|
+
fraud_remote_addr fraud_http_accept fraud_http_accept_language
|
|
70
|
+
fraud_http_accept_encoding fraud_http_accept_charset
|
|
71
|
+
fraud_http_referer fraud_http_user_agent apikey),
|
|
72
|
+
|
|
73
|
+
:recurring => %w(protocol msgtype merchant ordernumber amount currency
|
|
74
|
+
autocapture transaction apikey),
|
|
75
|
+
|
|
76
|
+
:status => %w(protocol msgtype merchant transaction apikey),
|
|
77
|
+
|
|
78
|
+
:chstatus => %w(protocol msgtype merchant apikey)
|
|
79
|
+
},
|
|
80
|
+
|
|
81
|
+
6 => {
|
|
82
|
+
:authorize => %w(protocol msgtype merchant ordernumber amount
|
|
83
|
+
currency autocapture cardnumber expirationdate cvd
|
|
84
|
+
cardtypelock testmode fraud_remote_addr
|
|
85
|
+
fraud_http_accept fraud_http_accept_language
|
|
86
|
+
fraud_http_accept_encoding fraud_http_accept_charset
|
|
87
|
+
fraud_http_referer fraud_http_user_agent apikey),
|
|
88
|
+
|
|
89
|
+
:capture => %w(protocol msgtype merchant amount finalize transaction
|
|
90
|
+
apikey),
|
|
91
|
+
|
|
92
|
+
:cancel => %w(protocol msgtype merchant transaction apikey),
|
|
93
|
+
|
|
94
|
+
:refund => %w(protocol msgtype merchant amount transaction apikey),
|
|
95
|
+
|
|
96
|
+
:subscribe => %w(protocol msgtype merchant ordernumber cardnumber
|
|
97
|
+
expirationdate cvd cardtypelock description testmode
|
|
98
|
+
fraud_remote_addr fraud_http_accept fraud_http_accept_language
|
|
99
|
+
fraud_http_accept_encoding fraud_http_accept_charset
|
|
100
|
+
fraud_http_referer fraud_http_user_agent apikey),
|
|
101
|
+
|
|
102
|
+
:recurring => %w(protocol msgtype merchant ordernumber amount currency
|
|
103
|
+
autocapture transaction apikey),
|
|
104
|
+
|
|
105
|
+
:status => %w(protocol msgtype merchant transaction apikey),
|
|
106
|
+
|
|
107
|
+
:chstatus => %w(protocol msgtype merchant apikey)
|
|
108
|
+
},
|
|
109
|
+
|
|
110
|
+
7 => {
|
|
111
|
+
:authorize => %w(protocol msgtype merchant ordernumber amount
|
|
112
|
+
currency autocapture cardnumber expirationdate cvd
|
|
113
|
+
acquirers cardtypelock testmode fraud_remote_addr
|
|
114
|
+
fraud_http_accept fraud_http_accept_language
|
|
115
|
+
fraud_http_accept_encoding fraud_http_accept_charset
|
|
116
|
+
fraud_http_referer fraud_http_user_agent apikey),
|
|
117
|
+
|
|
118
|
+
:capture => %w(protocol msgtype merchant amount finalize transaction
|
|
119
|
+
apikey),
|
|
120
|
+
|
|
121
|
+
:cancel => %w(protocol msgtype merchant transaction apikey),
|
|
122
|
+
|
|
123
|
+
:refund => %w(protocol msgtype merchant amount transaction apikey),
|
|
124
|
+
|
|
125
|
+
:subscribe => %w(protocol msgtype merchant ordernumber amount currency
|
|
126
|
+
cardnumber expirationdate cvd acquirers cardtypelock
|
|
127
|
+
description testmode fraud_remote_addr fraud_http_accept
|
|
128
|
+
fraud_http_accept_language fraud_http_accept_encoding
|
|
129
|
+
fraud_http_accept_charset fraud_http_referer
|
|
130
|
+
fraud_http_user_agent apikey),
|
|
131
|
+
|
|
132
|
+
:recurring => %w(protocol msgtype merchant ordernumber amount currency
|
|
133
|
+
autocapture transaction apikey),
|
|
134
|
+
|
|
135
|
+
:status => %w(protocol msgtype merchant transaction apikey),
|
|
136
|
+
|
|
137
|
+
:chstatus => %w(protocol msgtype merchant apikey)
|
|
138
|
+
},
|
|
139
|
+
|
|
140
|
+
10 => {
|
|
141
|
+
:authorize => %w(mobile_number acquirer autofee customer_id extras
|
|
142
|
+
zero_auth customer_ip),
|
|
143
|
+
:capture => %w( extras ),
|
|
144
|
+
:cancel => %w( extras ),
|
|
145
|
+
:refund => %w( extras ),
|
|
146
|
+
:subscribe => %w( variables branding_id),
|
|
147
|
+
:authorize_subscription => %w( mobile_number acquirer customer_ip),
|
|
148
|
+
:recurring => %w(auto_capture autofee zero_auth)
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
RESPONSE_CODES = {
|
|
153
|
+
200 => 'OK',
|
|
154
|
+
201 => 'Created',
|
|
155
|
+
202 => 'Accepted',
|
|
156
|
+
400 => 'Bad Request',
|
|
157
|
+
401 => 'UnAuthorized',
|
|
158
|
+
402 => 'Payment Required',
|
|
159
|
+
403 => 'Forbidden',
|
|
160
|
+
404 => 'Not Found',
|
|
161
|
+
405 => 'Method Not Allowed',
|
|
162
|
+
406 => 'Not Acceptable',
|
|
163
|
+
409 => 'Conflict',
|
|
164
|
+
500 => 'Internal Server Error'
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
def self.included(base)
|
|
168
|
+
base.default_currency = 'DKK'
|
|
169
|
+
base.money_format = :cents
|
|
170
|
+
|
|
171
|
+
base.supported_cardtypes = [:dankort, :forbrugsforeningen, :visa, :master,
|
|
172
|
+
:american_express, :diners_club, :jcb, :maestro]
|
|
173
|
+
base.supported_countries = ['DE', 'DK', 'ES', 'FI', 'FR', 'FO', 'GB', 'IS', 'NO', 'SE']
|
|
174
|
+
base.homepage_url = 'http://quickpay.net/'
|
|
175
|
+
base.display_name = 'QuickPay'
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
def expdate(credit_card)
|
|
179
|
+
year = format(credit_card.year, :two_digits)
|
|
180
|
+
month = format(credit_card.month, :two_digits)
|
|
181
|
+
|
|
182
|
+
"#{year}#{month}"
|
|
183
|
+
end
|
|
184
|
+
end
|