swiss-crm-activemerchant 1.0.12
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 +7 -0
- data/CHANGELOG +4033 -0
- data/CONTRIBUTORS +568 -0
- data/MIT-LICENSE +20 -0
- data/README.md +252 -0
- data/lib/active_merchant/billing/apple_pay_payment_token.rb +22 -0
- data/lib/active_merchant/billing/avs_result.rb +95 -0
- data/lib/active_merchant/billing/base.rb +48 -0
- data/lib/active_merchant/billing/check.rb +112 -0
- data/lib/active_merchant/billing/compatibility.rb +118 -0
- data/lib/active_merchant/billing/credit_card.rb +451 -0
- data/lib/active_merchant/billing/credit_card_formatting.rb +24 -0
- data/lib/active_merchant/billing/credit_card_methods.rb +512 -0
- data/lib/active_merchant/billing/cvv_result.rb +37 -0
- data/lib/active_merchant/billing/gateway.rb +332 -0
- data/lib/active_merchant/billing/gateways/adyen.rb +774 -0
- data/lib/active_merchant/billing/gateways/airwallex.rb +370 -0
- data/lib/active_merchant/billing/gateways/alelo.rb +256 -0
- data/lib/active_merchant/billing/gateways/allied_wallet.rb +205 -0
- data/lib/active_merchant/billing/gateways/authorize_net.rb +1125 -0
- data/lib/active_merchant/billing/gateways/authorize_net_arb.rb +424 -0
- data/lib/active_merchant/billing/gateways/authorize_net_cim.rb +977 -0
- data/lib/active_merchant/billing/gateways/axcessms.rb +242 -0
- data/lib/active_merchant/billing/gateways/balanced.rb +263 -0
- data/lib/active_merchant/billing/gateways/bambora_apac.rb +222 -0
- data/lib/active_merchant/billing/gateways/bank_frick.rb +225 -0
- data/lib/active_merchant/billing/gateways/banwire.rb +116 -0
- data/lib/active_merchant/billing/gateways/barclaycard_smartpay.rb +397 -0
- data/lib/active_merchant/billing/gateways/barclays_epdq_extra_plus.rb +15 -0
- data/lib/active_merchant/billing/gateways/be2bill.rb +131 -0
- data/lib/active_merchant/billing/gateways/beanstream/beanstream_core.rb +474 -0
- data/lib/active_merchant/billing/gateways/beanstream.rb +238 -0
- data/lib/active_merchant/billing/gateways/beanstream_interac.rb +57 -0
- data/lib/active_merchant/billing/gateways/blue_pay.rb +549 -0
- data/lib/active_merchant/billing/gateways/blue_snap.rb +644 -0
- data/lib/active_merchant/billing/gateways/bogus.rb +190 -0
- data/lib/active_merchant/billing/gateways/borgun.rb +272 -0
- data/lib/active_merchant/billing/gateways/bpoint.rb +277 -0
- data/lib/active_merchant/billing/gateways/braintree/braintree_common.rb +28 -0
- data/lib/active_merchant/billing/gateways/braintree/token_nonce.rb +113 -0
- data/lib/active_merchant/billing/gateways/braintree.rb +19 -0
- data/lib/active_merchant/billing/gateways/braintree_blue.rb +952 -0
- data/lib/active_merchant/billing/gateways/braintree_orange.rb +19 -0
- 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 +338 -0
- data/lib/active_merchant/billing/gateways/card_save.rb +21 -0
- data/lib/active_merchant/billing/gateways/card_stream.rb +394 -0
- data/lib/active_merchant/billing/gateways/cardknox.rb +327 -0
- data/lib/active_merchant/billing/gateways/cardprocess.rb +256 -0
- data/lib/active_merchant/billing/gateways/cashnet.rb +235 -0
- data/lib/active_merchant/billing/gateways/cc5.rb +198 -0
- data/lib/active_merchant/billing/gateways/cecabank.rb +249 -0
- data/lib/active_merchant/billing/gateways/cenpos.rb +328 -0
- data/lib/active_merchant/billing/gateways/checkout.rb +212 -0
- data/lib/active_merchant/billing/gateways/checkout_v2.rb +587 -0
- data/lib/active_merchant/billing/gateways/citrus_pay.rb +21 -0
- data/lib/active_merchant/billing/gateways/clearhaus.rb +219 -0
- data/lib/active_merchant/billing/gateways/commerce_hub.rb +366 -0
- data/lib/active_merchant/billing/gateways/commercegate.rb +142 -0
- data/lib/active_merchant/billing/gateways/conekta.rb +230 -0
- data/lib/active_merchant/billing/gateways/creditcall.rb +272 -0
- data/lib/active_merchant/billing/gateways/credorax.rb +526 -0
- data/lib/active_merchant/billing/gateways/ct_payment.rb +269 -0
- data/lib/active_merchant/billing/gateways/culqi.rb +279 -0
- data/lib/active_merchant/billing/gateways/cyber_source/cyber_source_common.rb +36 -0
- data/lib/active_merchant/billing/gateways/cyber_source.rb +1148 -0
- data/lib/active_merchant/billing/gateways/cyber_source_rest.rb +454 -0
- data/lib/active_merchant/billing/gateways/d_local.rb +343 -0
- data/lib/active_merchant/billing/gateways/data_cash.rb +302 -0
- data/lib/active_merchant/billing/gateways/decidir.rb +358 -0
- data/lib/active_merchant/billing/gateways/decidir_plus.rb +344 -0
- data/lib/active_merchant/billing/gateways/dibs.rb +199 -0
- data/lib/active_merchant/billing/gateways/digitzs.rb +295 -0
- data/lib/active_merchant/billing/gateways/ebanx.rb +346 -0
- data/lib/active_merchant/billing/gateways/efsnet.rb +215 -0
- data/lib/active_merchant/billing/gateways/elavon.rb +475 -0
- data/lib/active_merchant/billing/gateways/element.rb +406 -0
- data/lib/active_merchant/billing/gateways/epay.rb +296 -0
- data/lib/active_merchant/billing/gateways/evo_ca.rb +307 -0
- data/lib/active_merchant/billing/gateways/eway.rb +226 -0
- data/lib/active_merchant/billing/gateways/eway_managed.rb +289 -0
- data/lib/active_merchant/billing/gateways/eway_rapid.rb +578 -0
- data/lib/active_merchant/billing/gateways/exact.rb +219 -0
- data/lib/active_merchant/billing/gateways/ezic.rb +195 -0
- data/lib/active_merchant/billing/gateways/fat_zebra.rb +223 -0
- data/lib/active_merchant/billing/gateways/federated_canada.rb +158 -0
- data/lib/active_merchant/billing/gateways/finansbank.rb +22 -0
- data/lib/active_merchant/billing/gateways/first_giving.rb +143 -0
- data/lib/active_merchant/billing/gateways/first_pay.rb +182 -0
- data/lib/active_merchant/billing/gateways/firstdata_e4.rb +452 -0
- data/lib/active_merchant/billing/gateways/firstdata_e4_v27.rb +505 -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/fluidpay.rb +275 -0
- data/lib/active_merchant/billing/gateways/forte.rb +286 -0
- data/lib/active_merchant/billing/gateways/garanti.rb +256 -0
- data/lib/active_merchant/billing/gateways/global_collect.rb +580 -0
- data/lib/active_merchant/billing/gateways/global_transport.rb +193 -0
- data/lib/active_merchant/billing/gateways/hdfc.rb +205 -0
- data/lib/active_merchant/billing/gateways/hps.rb +472 -0
- data/lib/active_merchant/billing/gateways/iats_payments.rb +312 -0
- data/lib/active_merchant/billing/gateways/in_context_paypal_express.rb +15 -0
- data/lib/active_merchant/billing/gateways/inspire.rb +213 -0
- data/lib/active_merchant/billing/gateways/instapay.rb +159 -0
- data/lib/active_merchant/billing/gateways/ipg.rb +420 -0
- data/lib/active_merchant/billing/gateways/ipp.rb +176 -0
- data/lib/active_merchant/billing/gateways/iridium.rb +467 -0
- data/lib/active_merchant/billing/gateways/itransact.rb +448 -0
- data/lib/active_merchant/billing/gateways/iveri.rb +290 -0
- data/lib/active_merchant/billing/gateways/ixopay.rb +320 -0
- data/lib/active_merchant/billing/gateways/jetpay.rb +395 -0
- data/lib/active_merchant/billing/gateways/jetpay_v2.rb +432 -0
- data/lib/active_merchant/billing/gateways/klarna.rb +317 -0
- data/lib/active_merchant/billing/gateways/komoju.rb +115 -0
- data/lib/active_merchant/billing/gateways/kushki.rb +297 -0
- data/lib/active_merchant/billing/gateways/latitude19.rb +412 -0
- data/lib/active_merchant/billing/gateways/linkpoint.rb +448 -0
- data/lib/active_merchant/billing/gateways/litle.rb +643 -0
- data/lib/active_merchant/billing/gateways/mastercard.rb +286 -0
- data/lib/active_merchant/billing/gateways/maxipago.rb +220 -0
- data/lib/active_merchant/billing/gateways/mercado_pago.rb +348 -0
- data/lib/active_merchant/billing/gateways/merchant_e_solutions.rb +228 -0
- data/lib/active_merchant/billing/gateways/merchant_one.rb +110 -0
- data/lib/active_merchant/billing/gateways/merchant_partners.rb +245 -0
- data/lib/active_merchant/billing/gateways/merchant_ware.rb +313 -0
- data/lib/active_merchant/billing/gateways/merchant_ware_version_four.rb +284 -0
- data/lib/active_merchant/billing/gateways/merchant_warrior.rb +248 -0
- data/lib/active_merchant/billing/gateways/mercury.rb +352 -0
- data/lib/active_merchant/billing/gateways/metrics_global.rb +293 -0
- data/lib/active_merchant/billing/gateways/micropayment.rb +182 -0
- data/lib/active_merchant/billing/gateways/migs/migs_codes.rb +100 -0
- data/lib/active_merchant/billing/gateways/migs.rb +329 -0
- data/lib/active_merchant/billing/gateways/mit.rb +260 -0
- data/lib/active_merchant/billing/gateways/modern_payments.rb +37 -0
- data/lib/active_merchant/billing/gateways/modern_payments_cim.rb +215 -0
- data/lib/active_merchant/billing/gateways/moka.rb +290 -0
- data/lib/active_merchant/billing/gateways/monei.rb +424 -0
- data/lib/active_merchant/billing/gateways/moneris.rb +488 -0
- data/lib/active_merchant/billing/gateways/money_movers.rb +150 -0
- data/lib/active_merchant/billing/gateways/mundipagg.rb +366 -0
- data/lib/active_merchant/billing/gateways/nab_transact.rb +299 -0
- data/lib/active_merchant/billing/gateways/ncr_secure_pay.rb +163 -0
- data/lib/active_merchant/billing/gateways/net_registry.rb +198 -0
- data/lib/active_merchant/billing/gateways/netaxept.rb +180 -0
- data/lib/active_merchant/billing/gateways/netbanx.rb +376 -0
- data/lib/active_merchant/billing/gateways/netbilling.rb +229 -0
- data/lib/active_merchant/billing/gateways/netpay.rb +223 -0
- data/lib/active_merchant/billing/gateways/network_merchants.rb +238 -0
- data/lib/active_merchant/billing/gateways/nmi.rb +396 -0
- data/lib/active_merchant/billing/gateways/ogone.rb +509 -0
- data/lib/active_merchant/billing/gateways/omise.rb +323 -0
- data/lib/active_merchant/billing/gateways/openpay.rb +246 -0
- data/lib/active_merchant/billing/gateways/opp.rb +394 -0
- data/lib/active_merchant/billing/gateways/optimal_payment.rb +331 -0
- data/lib/active_merchant/billing/gateways/orbital/orbital_soft_descriptors.rb +45 -0
- data/lib/active_merchant/billing/gateways/orbital.rb +1267 -0
- data/lib/active_merchant/billing/gateways/pac_net_raven.rb +206 -0
- data/lib/active_merchant/billing/gateways/pagarme.rb +239 -0
- data/lib/active_merchant/billing/gateways/pago_facil.rb +120 -0
- data/lib/active_merchant/billing/gateways/pay_arc.rb +392 -0
- data/lib/active_merchant/billing/gateways/pay_conex.rb +245 -0
- data/lib/active_merchant/billing/gateways/pay_gate_xml.rb +277 -0
- data/lib/active_merchant/billing/gateways/pay_hub.rb +213 -0
- data/lib/active_merchant/billing/gateways/pay_junction.rb +390 -0
- data/lib/active_merchant/billing/gateways/pay_junction_v2.rb +206 -0
- data/lib/active_merchant/billing/gateways/pay_secure.rb +110 -0
- data/lib/active_merchant/billing/gateways/pay_trace.rb +450 -0
- data/lib/active_merchant/billing/gateways/paybox_direct.rb +224 -0
- data/lib/active_merchant/billing/gateways/payeezy.rb +513 -0
- data/lib/active_merchant/billing/gateways/payex.rb +409 -0
- data/lib/active_merchant/billing/gateways/payflow/payflow_common_api.rb +235 -0
- data/lib/active_merchant/billing/gateways/payflow/payflow_express_response.rb +42 -0
- data/lib/active_merchant/billing/gateways/payflow/payflow_response.rb +13 -0
- data/lib/active_merchant/billing/gateways/payflow.rb +473 -0
- data/lib/active_merchant/billing/gateways/payflow_express.rb +220 -0
- data/lib/active_merchant/billing/gateways/payflow_express_uk.rb +14 -0
- data/lib/active_merchant/billing/gateways/payflow_uk.rb +20 -0
- data/lib/active_merchant/billing/gateways/payment_express.rb +373 -0
- data/lib/active_merchant/billing/gateways/paymentez.rb +365 -0
- data/lib/active_merchant/billing/gateways/paymill.rb +369 -0
- data/lib/active_merchant/billing/gateways/paynetworx.rb +228 -0
- data/lib/active_merchant/billing/gateways/paypal/paypal_common_api.rb +718 -0
- data/lib/active_merchant/billing/gateways/paypal/paypal_express_response.rb +69 -0
- data/lib/active_merchant/billing/gateways/paypal/paypal_recurring_api.rb +262 -0
- data/lib/active_merchant/billing/gateways/paypal.rb +136 -0
- data/lib/active_merchant/billing/gateways/paypal_ca.rb +13 -0
- data/lib/active_merchant/billing/gateways/paypal_digital_goods.rb +44 -0
- data/lib/active_merchant/billing/gateways/paypal_express.rb +272 -0
- data/lib/active_merchant/billing/gateways/paypal_express_common.rb +30 -0
- data/lib/active_merchant/billing/gateways/paypal_standard.rb +281 -0
- data/lib/active_merchant/billing/gateways/paysafe.rb +420 -0
- data/lib/active_merchant/billing/gateways/payscout.rb +159 -0
- data/lib/active_merchant/billing/gateways/paystation.rb +204 -0
- data/lib/active_merchant/billing/gateways/payu_in.rb +249 -0
- data/lib/active_merchant/billing/gateways/payu_latam.rb +482 -0
- data/lib/active_merchant/billing/gateways/payway.rb +207 -0
- data/lib/active_merchant/billing/gateways/payway_dot_com.rb +253 -0
- data/lib/active_merchant/billing/gateways/pin.rb +273 -0
- data/lib/active_merchant/billing/gateways/pixxels.rb +263 -0
- data/lib/active_merchant/billing/gateways/plexo.rb +308 -0
- data/lib/active_merchant/billing/gateways/plugnpay.rb +283 -0
- data/lib/active_merchant/billing/gateways/priority.rb +392 -0
- data/lib/active_merchant/billing/gateways/pro_pay.rb +325 -0
- data/lib/active_merchant/billing/gateways/psigate.rb +227 -0
- data/lib/active_merchant/billing/gateways/psl_card.rb +295 -0
- data/lib/active_merchant/billing/gateways/qbms.rb +302 -0
- data/lib/active_merchant/billing/gateways/quantum.rb +274 -0
- data/lib/active_merchant/billing/gateways/quickbooks.rb +377 -0
- data/lib/active_merchant/billing/gateways/quickpay/quickpay_common.rb +184 -0
- data/lib/active_merchant/billing/gateways/quickpay/quickpay_v10.rb +297 -0
- data/lib/active_merchant/billing/gateways/quickpay/quickpay_v4to7.rb +226 -0
- data/lib/active_merchant/billing/gateways/quickpay.rb +24 -0
- data/lib/active_merchant/billing/gateways/qvalent.rb +305 -0
- data/lib/active_merchant/billing/gateways/rapyd.rb +319 -0
- data/lib/active_merchant/billing/gateways/reach.rb +277 -0
- data/lib/active_merchant/billing/gateways/realex.rb +400 -0
- data/lib/active_merchant/billing/gateways/redsys.rb +723 -0
- data/lib/active_merchant/billing/gateways/s5.rb +247 -0
- data/lib/active_merchant/billing/gateways/safe_charge.rb +298 -0
- data/lib/active_merchant/billing/gateways/sage.rb +446 -0
- data/lib/active_merchant/billing/gateways/sage_pay.rb +434 -0
- data/lib/active_merchant/billing/gateways/sallie_mae.rb +141 -0
- data/lib/active_merchant/billing/gateways/secure_net.rb +260 -0
- data/lib/active_merchant/billing/gateways/secure_pay.rb +191 -0
- data/lib/active_merchant/billing/gateways/secure_pay_au.rb +290 -0
- data/lib/active_merchant/billing/gateways/secure_pay_tech.rb +103 -0
- data/lib/active_merchant/billing/gateways/securion_pay.rb +305 -0
- data/lib/active_merchant/billing/gateways/shift4.rb +345 -0
- data/lib/active_merchant/billing/gateways/simetrik.rb +368 -0
- data/lib/active_merchant/billing/gateways/skip_jack.rb +450 -0
- data/lib/active_merchant/billing/gateways/smart_ps.rb +274 -0
- data/lib/active_merchant/billing/gateways/so_easy_pay.rb +194 -0
- data/lib/active_merchant/billing/gateways/spreedly_core.rb +354 -0
- data/lib/active_merchant/billing/gateways/stripe.rb +866 -0
- data/lib/active_merchant/billing/gateways/stripe_payment_intents.rb +602 -0
- data/lib/active_merchant/billing/gateways/swipe_checkout.rb +151 -0
- data/lib/active_merchant/billing/gateways/telr.rb +273 -0
- data/lib/active_merchant/billing/gateways/tns.rb +23 -0
- data/lib/active_merchant/billing/gateways/trans_first.rb +240 -0
- data/lib/active_merchant/billing/gateways/trans_first_transaction_express.rb +612 -0
- data/lib/active_merchant/billing/gateways/transact_pro.rb +222 -0
- data/lib/active_merchant/billing/gateways/transax.rb +21 -0
- data/lib/active_merchant/billing/gateways/transnational.rb +9 -0
- data/lib/active_merchant/billing/gateways/trexle.rb +221 -0
- data/lib/active_merchant/billing/gateways/trust_commerce.rb +500 -0
- data/lib/active_merchant/billing/gateways/usa_epay.rb +24 -0
- data/lib/active_merchant/billing/gateways/usa_epay_advanced.rb +1612 -0
- data/lib/active_merchant/billing/gateways/usa_epay_transaction.rb +367 -0
- data/lib/active_merchant/billing/gateways/vanco.rb +303 -0
- data/lib/active_merchant/billing/gateways/verifi.rb +224 -0
- data/lib/active_merchant/billing/gateways/viaklix.rb +171 -0
- data/lib/active_merchant/billing/gateways/visanet_peru.rb +250 -0
- data/lib/active_merchant/billing/gateways/vpos.rb +223 -0
- data/lib/active_merchant/billing/gateways/webpay.rb +97 -0
- data/lib/active_merchant/billing/gateways/wepay.rb +235 -0
- data/lib/active_merchant/billing/gateways/wirecard.rb +430 -0
- data/lib/active_merchant/billing/gateways/wompi.rb +197 -0
- data/lib/active_merchant/billing/gateways/world_net.rb +345 -0
- data/lib/active_merchant/billing/gateways/worldpay.rb +1050 -0
- data/lib/active_merchant/billing/gateways/worldpay_online_payments.rb +208 -0
- data/lib/active_merchant/billing/gateways/worldpay_us.rb +221 -0
- data/lib/active_merchant/billing/gateways.rb +14 -0
- 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 +121 -0
- data/lib/active_merchant/billing/three_d_secure_eci_mapper.rb +27 -0
- data/lib/active_merchant/billing.rb +16 -0
- data/lib/active_merchant/connection.rb +194 -0
- data/lib/active_merchant/country.rb +338 -0
- data/lib/active_merchant/empty.rb +20 -0
- data/lib/active_merchant/errors.rb +38 -0
- data/lib/active_merchant/net_http_ssl_connection.rb +11 -0
- data/lib/active_merchant/network_connection_retries.rb +78 -0
- data/lib/active_merchant/post_data.rb +26 -0
- data/lib/active_merchant/posts_data.rb +92 -0
- data/lib/active_merchant/version.rb +3 -0
- data/lib/active_merchant.rb +63 -0
- data/lib/activemerchant.rb +1 -0
- data/lib/certs/cacert.pem +3214 -0
- data/lib/support/gateway_support.rb +69 -0
- data/lib/support/outbound_hosts.rb +28 -0
- data/lib/support/ssl_verify.rb +88 -0
- data/lib/support/ssl_version.rb +86 -0
- metadata +506 -0
@@ -0,0 +1,424 @@
|
|
1
|
+
require 'nokogiri'
|
2
|
+
|
3
|
+
module ActiveMerchant #:nodoc:
|
4
|
+
module Billing #:nodoc:
|
5
|
+
#
|
6
|
+
# == Monei gateway
|
7
|
+
# This class implements Monei gateway for Active Merchant. For more information about Monei
|
8
|
+
# gateway please go to http://www.monei.com
|
9
|
+
#
|
10
|
+
# === Setup
|
11
|
+
# In order to set-up the gateway you need only one paramater: the api_key
|
12
|
+
# Request that data to Monei.
|
13
|
+
class MoneiGateway < Gateway
|
14
|
+
self.live_url = self.test_url = 'https://api.monei.com/v1/payments'
|
15
|
+
|
16
|
+
self.supported_countries = %w[AD AT BE BG CA CH CY CZ DE DK EE ES FI FO FR GB GI GR HU IE IL IS IT LI LT LU LV MT NL NO PL PT RO SE SI SK TR US VA]
|
17
|
+
self.default_currency = 'EUR'
|
18
|
+
self.money_format = :cents
|
19
|
+
self.supported_cardtypes = %i[visa master maestro jcb american_express]
|
20
|
+
|
21
|
+
self.homepage_url = 'https://monei.com/'
|
22
|
+
self.display_name = 'MONEI'
|
23
|
+
|
24
|
+
# Constructor
|
25
|
+
#
|
26
|
+
# options - Hash containing the gateway credentials, ALL MANDATORY
|
27
|
+
# :api_key Account's API KEY
|
28
|
+
#
|
29
|
+
def initialize(options = {})
|
30
|
+
requires!(options, :api_key)
|
31
|
+
super
|
32
|
+
end
|
33
|
+
|
34
|
+
# Public: Performs purchase operation
|
35
|
+
#
|
36
|
+
# money - Amount of purchase
|
37
|
+
# payment_method - Credit card
|
38
|
+
# options - Hash containing purchase options
|
39
|
+
# :order_id Merchant created id for the purchase
|
40
|
+
# :billing_address Hash with billing address information
|
41
|
+
# :description Merchant created purchase description (optional)
|
42
|
+
# :currency Sale currency to override money object or default (optional)
|
43
|
+
#
|
44
|
+
# Returns Active Merchant response object
|
45
|
+
def purchase(money, payment_method, options = {})
|
46
|
+
execute_new_order(:purchase, money, payment_method, options)
|
47
|
+
end
|
48
|
+
|
49
|
+
# Public: Performs authorization operation
|
50
|
+
#
|
51
|
+
# money - Amount to authorize
|
52
|
+
# payment_method - Credit card
|
53
|
+
# options - Hash containing authorization options
|
54
|
+
# :order_id Merchant created id for the authorization
|
55
|
+
# :billing_address Hash with billing address information
|
56
|
+
# :description Merchant created authorization description (optional)
|
57
|
+
# :currency Sale currency to override money object or default (optional)
|
58
|
+
#
|
59
|
+
# Returns Active Merchant response object
|
60
|
+
def authorize(money, payment_method, options = {})
|
61
|
+
execute_new_order(:authorize, money, payment_method, options)
|
62
|
+
end
|
63
|
+
|
64
|
+
# Public: Performs capture operation on previous authorization
|
65
|
+
#
|
66
|
+
# money - Amount to capture
|
67
|
+
# authorization - Reference to previous authorization, obtained from response object returned by authorize
|
68
|
+
# options - Hash containing capture options
|
69
|
+
# :order_id Merchant created id for the authorization (optional)
|
70
|
+
# :description Merchant created authorization description (optional)
|
71
|
+
# :currency Sale currency to override money object or default (optional)
|
72
|
+
#
|
73
|
+
# Note: you should pass either order_id or description
|
74
|
+
#
|
75
|
+
# Returns Active Merchant response object
|
76
|
+
def capture(money, authorization, options = {})
|
77
|
+
execute_dependant(:capture, money, authorization, options)
|
78
|
+
end
|
79
|
+
|
80
|
+
# Public: Refunds from previous purchase
|
81
|
+
#
|
82
|
+
# money - Amount to refund
|
83
|
+
# authorization - Reference to previous purchase, obtained from response object returned by purchase
|
84
|
+
# options - Hash containing refund options
|
85
|
+
# :order_id Merchant created id for the authorization (optional)
|
86
|
+
# :description Merchant created authorization description (optional)
|
87
|
+
# :currency Sale currency to override money object or default (optional)
|
88
|
+
#
|
89
|
+
# Note: you should pass either order_id or description
|
90
|
+
#
|
91
|
+
# Returns Active Merchant response object
|
92
|
+
def refund(money, authorization, options = {})
|
93
|
+
execute_dependant(:refund, money, authorization, options)
|
94
|
+
end
|
95
|
+
|
96
|
+
# Public: Voids previous authorization
|
97
|
+
#
|
98
|
+
# authorization - Reference to previous authorization, obtained from response object returned by authorize
|
99
|
+
# options - Hash containing capture options
|
100
|
+
# :order_id Merchant created id for the authorization (optional)
|
101
|
+
#
|
102
|
+
# Returns Active Merchant response object
|
103
|
+
def void(authorization, options = {})
|
104
|
+
execute_dependant(:void, nil, authorization, options)
|
105
|
+
end
|
106
|
+
|
107
|
+
# Public: Verifies credit card. Does this by doing a authorization of 1.00 Euro and then voiding it.
|
108
|
+
#
|
109
|
+
# payment_method - Credit card
|
110
|
+
# options - Hash containing authorization options
|
111
|
+
# :order_id Merchant created id for the authorization
|
112
|
+
# :billing_address Hash with billing address information
|
113
|
+
# :description Merchant created authorization description (optional)
|
114
|
+
# :currency Sale currency to override money object or default (optional)
|
115
|
+
#
|
116
|
+
# Returns Active Merchant response object of Authorization operation
|
117
|
+
def verify(payment_method, options = {})
|
118
|
+
MultiResponse.run(:use_first_response) do |r|
|
119
|
+
r.process { authorize(100, payment_method, options) }
|
120
|
+
r.process(:ignore_result) { void(r.authorization, options) }
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
def store(payment_method, options = {})
|
125
|
+
execute_new_order(:store, 0, payment_method, options)
|
126
|
+
end
|
127
|
+
|
128
|
+
def supports_scrubbing?
|
129
|
+
true
|
130
|
+
end
|
131
|
+
|
132
|
+
def scrub(transcript)
|
133
|
+
transcript.
|
134
|
+
gsub(%r((Authorization: )\w+), '\1[FILTERED]').
|
135
|
+
gsub(%r(("number\\?":\\?")[^"]*)i, '\1[FILTERED]').
|
136
|
+
gsub(%r(("cvc\\?":\\?")[^"]*)i, '\1[FILTERED]').
|
137
|
+
gsub(%r(("cavv\\?":\\?")[^"]*)i, '\1[FILTERED]')
|
138
|
+
end
|
139
|
+
|
140
|
+
private
|
141
|
+
|
142
|
+
# Private: Execute purchase or authorize operation
|
143
|
+
def execute_new_order(action, money, payment_method, options)
|
144
|
+
request = build_request
|
145
|
+
add_identification_new_order(request, options)
|
146
|
+
add_transaction(request, action, money, options)
|
147
|
+
add_payment(request, payment_method)
|
148
|
+
add_customer(request, payment_method, options)
|
149
|
+
add_3ds_authenticated_data(request, options)
|
150
|
+
add_browser_info(request, options)
|
151
|
+
commit(request, action, options)
|
152
|
+
end
|
153
|
+
|
154
|
+
# Private: Execute operation that depends on authorization code from previous purchase or authorize operation
|
155
|
+
def execute_dependant(action, money, authorization, options)
|
156
|
+
request = build_request
|
157
|
+
|
158
|
+
add_identification_authorization(request, authorization, options)
|
159
|
+
add_transaction(request, action, money, options)
|
160
|
+
|
161
|
+
commit(request, action, options)
|
162
|
+
end
|
163
|
+
|
164
|
+
# Private: Build request object
|
165
|
+
def build_request
|
166
|
+
request = {}
|
167
|
+
request[:livemode] = test? ? 'false' : 'true'
|
168
|
+
request
|
169
|
+
end
|
170
|
+
|
171
|
+
# Private: Add identification part to request for new orders
|
172
|
+
def add_identification_new_order(request, options)
|
173
|
+
requires!(options, :order_id)
|
174
|
+
request[:orderId] = options[:order_id]
|
175
|
+
end
|
176
|
+
|
177
|
+
# Private: Add identification part to request for orders that depend on authorization from previous operation
|
178
|
+
def add_identification_authorization(request, authorization, options)
|
179
|
+
options[:paymentId] = authorization
|
180
|
+
request[:orderId] = options[:order_id] if options[:order_id]
|
181
|
+
end
|
182
|
+
|
183
|
+
# Private: Add payment part to request
|
184
|
+
def add_transaction(request, action, money, options)
|
185
|
+
request[:transactionType] = translate_payment_code(action)
|
186
|
+
request[:description] = options[:description] || options[:order_id]
|
187
|
+
unless money.nil?
|
188
|
+
request[:amount] = amount(money).to_i
|
189
|
+
request[:currency] = options[:currency] || currency(money)
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
# Private: Add payment method to request
|
194
|
+
def add_payment(request, payment_method)
|
195
|
+
if payment_method.is_a? String
|
196
|
+
request[:paymentToken] = payment_method
|
197
|
+
else
|
198
|
+
request[:paymentMethod] = {}
|
199
|
+
request[:paymentMethod][:card] = {}
|
200
|
+
request[:paymentMethod][:card][:number] = payment_method.number
|
201
|
+
request[:paymentMethod][:card][:expMonth] = format(payment_method.month, :two_digits)
|
202
|
+
request[:paymentMethod][:card][:expYear] = format(payment_method.year, :two_digits)
|
203
|
+
request[:paymentMethod][:card][:cvc] = payment_method.verification_value.to_s
|
204
|
+
request[:paymentMethod][:card][:cardholderName] = payment_method.name
|
205
|
+
end
|
206
|
+
end
|
207
|
+
|
208
|
+
# Private: Add customer part to request
|
209
|
+
def add_customer(request, payment_method, options)
|
210
|
+
address = options[:billing_address] || options[:address]
|
211
|
+
|
212
|
+
request[:customer] = {}
|
213
|
+
request[:customer][:email] = options[:email] || 'support@monei.net'
|
214
|
+
|
215
|
+
if address
|
216
|
+
request[:customer][:name] = address[:name].to_s if address[:name]
|
217
|
+
|
218
|
+
request[:billingDetails] = {}
|
219
|
+
request[:billingDetails][:email] = options[:email] if options[:email]
|
220
|
+
request[:billingDetails][:name] = address[:name] if address[:name]
|
221
|
+
request[:billingDetails][:company] = address[:company] if address[:company]
|
222
|
+
request[:billingDetails][:phone] = address[:phone] if address[:phone]
|
223
|
+
request[:billingDetails][:address] = {}
|
224
|
+
request[:billingDetails][:address][:line1] = address[:address1] if address[:address1]
|
225
|
+
request[:billingDetails][:address][:line2] = address[:address2] if address[:address2]
|
226
|
+
request[:billingDetails][:address][:city] = address[:city] if address[:city]
|
227
|
+
request[:billingDetails][:address][:state] = address[:state] if address[:state].present?
|
228
|
+
request[:billingDetails][:address][:zip] = address[:zip].to_s if address[:zip]
|
229
|
+
request[:billingDetails][:address][:country] = address[:country] if address[:country]
|
230
|
+
end
|
231
|
+
|
232
|
+
request[:sessionDetails] = {}
|
233
|
+
request[:sessionDetails][:ip] = options[:ip] if options[:ip]
|
234
|
+
end
|
235
|
+
|
236
|
+
# Private : Convert ECI to ResultIndicator
|
237
|
+
# Possible ECI values:
|
238
|
+
# 02 or 05 - Fully Authenticated Transaction
|
239
|
+
# 00 or 07 - Non 3D Secure Transaction
|
240
|
+
# Possible ResultIndicator values:
|
241
|
+
# 01 = MASTER_3D_ATTEMPT
|
242
|
+
# 02 = MASTER_3D_SUCCESS
|
243
|
+
# 05 = VISA_3D_SUCCESS
|
244
|
+
# 06 = VISA_3D_ATTEMPT
|
245
|
+
# 07 = DEFAULT_E_COMMERCE
|
246
|
+
def eci_to_result_indicator(eci)
|
247
|
+
case eci
|
248
|
+
when '02', '05'
|
249
|
+
return eci
|
250
|
+
else
|
251
|
+
return '07'
|
252
|
+
end
|
253
|
+
end
|
254
|
+
|
255
|
+
# Private: add the already validated 3DSecure info to request
|
256
|
+
def add_3ds_authenticated_data(request, options)
|
257
|
+
if options[:three_d_secure] && options[:three_d_secure][:eci] && options[:three_d_secure][:xid]
|
258
|
+
add_3ds1_authenticated_data(request, options)
|
259
|
+
elsif options[:three_d_secure]
|
260
|
+
add_3ds2_authenticated_data(request, options)
|
261
|
+
end
|
262
|
+
end
|
263
|
+
|
264
|
+
def add_3ds1_authenticated_data(request, options)
|
265
|
+
three_d_secure_options = options[:three_d_secure]
|
266
|
+
request[:paymentMethod][:card][:auth] = {
|
267
|
+
cavv: three_d_secure_options[:cavv],
|
268
|
+
cavvAlgorithm: three_d_secure_options[:cavv_algorithm],
|
269
|
+
eci: three_d_secure_options[:eci],
|
270
|
+
xid: three_d_secure_options[:xid],
|
271
|
+
directoryResponse: three_d_secure_options[:enrolled],
|
272
|
+
authenticationResponse: three_d_secure_options[:authentication_response_status]
|
273
|
+
}
|
274
|
+
end
|
275
|
+
|
276
|
+
def add_3ds2_authenticated_data(request, options)
|
277
|
+
three_d_secure_options = options[:three_d_secure]
|
278
|
+
# If the transaction was authenticated in a frictionless flow, send the transStatus from the ARes.
|
279
|
+
if three_d_secure_options[:authentication_response_status].nil?
|
280
|
+
authentication_response = three_d_secure_options[:directory_response_status]
|
281
|
+
else
|
282
|
+
authentication_response = three_d_secure_options[:authentication_response_status]
|
283
|
+
end
|
284
|
+
request[:paymentMethod][:card][:auth] = {
|
285
|
+
threeDSVersion: three_d_secure_options[:version],
|
286
|
+
eci: three_d_secure_options[:eci],
|
287
|
+
cavv: three_d_secure_options[:cavv],
|
288
|
+
dsTransID: three_d_secure_options[:ds_transaction_id],
|
289
|
+
directoryResponse: three_d_secure_options[:directory_response_status],
|
290
|
+
authenticationResponse: authentication_response
|
291
|
+
}
|
292
|
+
end
|
293
|
+
|
294
|
+
def add_browser_info(request, options)
|
295
|
+
request[:sessionDetails][:ip] = options[:ip] if options[:ip]
|
296
|
+
request[:sessionDetails][:userAgent] = options[:user_agent] if options[:user_agent]
|
297
|
+
request[:sessionDetails][:lang] = options[:lang] if options[:lang]
|
298
|
+
end
|
299
|
+
|
300
|
+
# Private: Parse JSON response from Monei servers
|
301
|
+
def parse(body)
|
302
|
+
JSON.parse(body)
|
303
|
+
end
|
304
|
+
|
305
|
+
def json_error(raw_response)
|
306
|
+
msg = 'Invalid response received from the MONEI API. Please contact support@monei.net if you continue to receive this message.'
|
307
|
+
msg += " (The raw response returned by the API was #{raw_response.inspect})"
|
308
|
+
{
|
309
|
+
'status' => 'error',
|
310
|
+
'message' => msg
|
311
|
+
}
|
312
|
+
end
|
313
|
+
|
314
|
+
def response_error(raw_response)
|
315
|
+
parse(raw_response)
|
316
|
+
rescue JSON::ParserError
|
317
|
+
json_error(raw_response)
|
318
|
+
end
|
319
|
+
|
320
|
+
def api_request(url, parameters, options = {})
|
321
|
+
raw_response = response = nil
|
322
|
+
begin
|
323
|
+
raw_response = ssl_post(url, post_data(parameters), options)
|
324
|
+
response = parse(raw_response)
|
325
|
+
rescue ResponseError => e
|
326
|
+
raw_response = e.response.body
|
327
|
+
response = response_error(raw_response)
|
328
|
+
rescue JSON::ParserError
|
329
|
+
response = json_error(raw_response)
|
330
|
+
end
|
331
|
+
response
|
332
|
+
end
|
333
|
+
|
334
|
+
# Private: Send transaction to Monei servers and create AM response
|
335
|
+
def commit(request, action, options)
|
336
|
+
url = (test? ? test_url : live_url)
|
337
|
+
endpoint = translate_action_endpoint(action, options)
|
338
|
+
headers = {
|
339
|
+
'Content-Type': 'application/json;charset=UTF-8',
|
340
|
+
'Authorization': @options[:api_key],
|
341
|
+
'User-Agent': 'MONEI/Shopify/0.1.0'
|
342
|
+
}
|
343
|
+
|
344
|
+
response = api_request(url + endpoint, params(request, action), headers)
|
345
|
+
success = success_from(response)
|
346
|
+
|
347
|
+
Response.new(
|
348
|
+
success,
|
349
|
+
message_from(response, success),
|
350
|
+
response,
|
351
|
+
authorization: authorization_from(response, action),
|
352
|
+
test: test?,
|
353
|
+
error_code: error_code_from(response, success)
|
354
|
+
)
|
355
|
+
end
|
356
|
+
|
357
|
+
# Private: Decide success from servers response
|
358
|
+
def success_from(response)
|
359
|
+
%w[
|
360
|
+
SUCCEEDED
|
361
|
+
AUTHORIZED
|
362
|
+
REFUNDED
|
363
|
+
PARTIALLY_REFUNDED
|
364
|
+
CANCELED
|
365
|
+
].include? response['status']
|
366
|
+
end
|
367
|
+
|
368
|
+
# Private: Get message from servers response
|
369
|
+
def message_from(response, success)
|
370
|
+
success ? 'Transaction approved' : response.fetch('statusMessage', response.fetch('message', 'No error details'))
|
371
|
+
end
|
372
|
+
|
373
|
+
# Private: Get error code from servers response
|
374
|
+
def error_code_from(response, success)
|
375
|
+
success ? nil : STANDARD_ERROR_CODE[:card_declined]
|
376
|
+
end
|
377
|
+
|
378
|
+
# Private: Get authorization code from servers response
|
379
|
+
def authorization_from(response, action)
|
380
|
+
case action
|
381
|
+
when :store
|
382
|
+
return response['paymentToken']
|
383
|
+
else
|
384
|
+
return response['id']
|
385
|
+
end
|
386
|
+
end
|
387
|
+
|
388
|
+
# Private: Encode POST parameters
|
389
|
+
def post_data(params)
|
390
|
+
params.clone.to_json
|
391
|
+
end
|
392
|
+
|
393
|
+
# Private: generate request params depending on action
|
394
|
+
def params(request, action)
|
395
|
+
request[:generatePaymentToken] = true if action == :store
|
396
|
+
request
|
397
|
+
end
|
398
|
+
|
399
|
+
# Private: Translate AM operations to Monei operations codes
|
400
|
+
def translate_payment_code(action)
|
401
|
+
{
|
402
|
+
purchase: 'SALE',
|
403
|
+
store: 'SALE',
|
404
|
+
authorize: 'AUTH',
|
405
|
+
capture: 'CAPTURE',
|
406
|
+
refund: 'REFUND',
|
407
|
+
void: 'CANCEL'
|
408
|
+
}[action]
|
409
|
+
end
|
410
|
+
|
411
|
+
# Private: Translate AM operations to Monei endpoints
|
412
|
+
def translate_action_endpoint(action, options)
|
413
|
+
{
|
414
|
+
purchase: '',
|
415
|
+
store: '',
|
416
|
+
authorize: '',
|
417
|
+
capture: "/#{options[:paymentId]}/capture",
|
418
|
+
refund: "/#{options[:paymentId]}/refund",
|
419
|
+
void: "/#{options[:paymentId]}/cancel"
|
420
|
+
}[action]
|
421
|
+
end
|
422
|
+
end
|
423
|
+
end
|
424
|
+
end
|