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,394 @@
|
|
1
|
+
module ActiveMerchant #:nodoc:
|
2
|
+
module Billing #:nodoc:
|
3
|
+
class OppGateway < Gateway
|
4
|
+
# = Open Payment Platform
|
5
|
+
#
|
6
|
+
# The Open Payment Platform includes a powerful omni-channel transaction processing API,
|
7
|
+
# enabling you to quickly and flexibly build new applications and services on the platform.
|
8
|
+
#
|
9
|
+
# This plugin enables connectivity to the Open Payment Platform for activemerchant.
|
10
|
+
#
|
11
|
+
# For any questions or comments please contact support@payon.com
|
12
|
+
#
|
13
|
+
# == Usage
|
14
|
+
#
|
15
|
+
# gateway = ActiveMerchant::Billing::OppGateway.new(
|
16
|
+
# access_token: 'access_token',
|
17
|
+
# entity_id: 'entity id',
|
18
|
+
# )
|
19
|
+
#
|
20
|
+
# # set up credit card object as in main ActiveMerchant example
|
21
|
+
# creditcard = ActiveMerchant::Billing::CreditCard.new(
|
22
|
+
# :type => 'visa',
|
23
|
+
# :number => '4242424242424242',
|
24
|
+
# :month => 8,
|
25
|
+
# :year => 2009,
|
26
|
+
# :first_name => 'Bob',
|
27
|
+
# :last_name => 'Bobsen'
|
28
|
+
# :verification_value: '123')
|
29
|
+
#
|
30
|
+
# # Request: complete example, including address, billing address, shipping address
|
31
|
+
# complete_request_options = {
|
32
|
+
# order_id: "your merchant/shop order id", # alternative is to set merchantInvoiceId
|
33
|
+
# merchant_transaction_id: "your merchant/shop transaction id",
|
34
|
+
# address: address,
|
35
|
+
# description: 'Store Purchase - Books',
|
36
|
+
# risk_workflow: false,
|
37
|
+
# test_mode: 'EXTERNAL' # or 'INTERNAL', valid only for test system
|
38
|
+
# create_registration: false, # payment details will be stored on the server an latter can be referenced
|
39
|
+
#
|
40
|
+
# billing_address: {
|
41
|
+
# address1: '123 Test Street',
|
42
|
+
# city: 'Test',
|
43
|
+
# state: 'TE',
|
44
|
+
# zip: 'AB12CD',
|
45
|
+
# country: 'GB',
|
46
|
+
# },
|
47
|
+
# shipping_address: {
|
48
|
+
# name: 'Muton DeMicelis',
|
49
|
+
# address1: 'My Street On Upiter, Apt 3.14/2.78',
|
50
|
+
# city: 'Munich',
|
51
|
+
# state: 'Bov',
|
52
|
+
# zip: '81675',
|
53
|
+
# country: 'DE',
|
54
|
+
# },
|
55
|
+
# customer: {
|
56
|
+
# merchant_customer_id: "your merchant/customer id",
|
57
|
+
# givenname: 'Jane',
|
58
|
+
# surname: 'Jones',
|
59
|
+
# birth_date: '1965-05-01',
|
60
|
+
# phone: '(?!?)555-5555',
|
61
|
+
# mobile: '(?!?)234-23423',
|
62
|
+
# email: 'jane@jones.com',
|
63
|
+
# company_name: 'JJ Ltd.',
|
64
|
+
# identification_doctype: 'PASSPORT',
|
65
|
+
# identification_docid: 'FakeID2342431234123',
|
66
|
+
# ip: 101.102.103.104,
|
67
|
+
# },
|
68
|
+
# }
|
69
|
+
#
|
70
|
+
# # Request: minimal example
|
71
|
+
# minimal_request_options = {
|
72
|
+
# order_id: "your merchant/shop order id", # alternative is to set merchantInvoiceId
|
73
|
+
# description: 'Store Purchase - Books',
|
74
|
+
# }
|
75
|
+
#
|
76
|
+
# options =
|
77
|
+
# # run request
|
78
|
+
# response = gateway.purchase(754, creditcard, options) # charge 7,54 EUR
|
79
|
+
#
|
80
|
+
# response.success? # Check whether the transaction was successful
|
81
|
+
# response.error_code # Retrieve the error message - it's mapped to Gateway::STANDARD_ERROR_CODE
|
82
|
+
# response.message # Retrieve the message returned by opp
|
83
|
+
# response.authorization # Retrieve the unique transaction ID returned by opp
|
84
|
+
# response.params['result']['code'] # Retrieve original return code returned by opp server
|
85
|
+
#
|
86
|
+
# == Errors
|
87
|
+
# If transaction is not successful, response.error_code contains mapped to Gateway::STANDARD_ERROR_CODE error message.
|
88
|
+
# Complete list of opp error codes can be viewed on https://docs.oppwa.com/
|
89
|
+
# Because this list is much bigger than Gateway::STANDARD_ERROR_CODE, only fraction is mapped to Gateway::STANDARD_ERROR_CODE.
|
90
|
+
# All other codes are mapped as Gateway::STANDARD_ERROR_CODE[:processing_error], so if this is the case,
|
91
|
+
# you may check the original result code from OPP that can be found in response.params['result']['code']
|
92
|
+
#
|
93
|
+
# == Special features
|
94
|
+
# For purchase method risk check can be forced when options[:risk_workflow] = true
|
95
|
+
# This will split (on OPP server side) the transaction into two separate transactions: authorize and capture,
|
96
|
+
# but capture will be executed only if risk checks are successful.
|
97
|
+
#
|
98
|
+
# For testing you may use the test account details listed fixtures.yml under opp. It is important to note that there are two test modes available:
|
99
|
+
# options[:test_mode]='EXTERNAL' causes test transactions to be forwarded to the processor's test system for 'end-to-end' testing
|
100
|
+
# options[:test_mode]='INTERNAL' causes transactions to be sent to opp simulators, which is useful when switching to the live endpoint for connectivity testing.
|
101
|
+
# If no test_mode parameter is sent, test_mode=INTERNAL is the default behaviour.
|
102
|
+
#
|
103
|
+
# Billing Address, Shipping Address, Custom Parameters are supported as described under https://docs.oppwa.com/parameters
|
104
|
+
# See complete example above for details.
|
105
|
+
#
|
106
|
+
# == Tokenization
|
107
|
+
# When create_registration is set to true, the payment details will be stored and a token will be returned in registrationId response field,
|
108
|
+
# which can subsequently be used to reference the stored payment.
|
109
|
+
|
110
|
+
self.test_url = 'https://test.oppwa.com/v1/payments'
|
111
|
+
self.live_url = 'https://oppwa.com/v1/payments'
|
112
|
+
|
113
|
+
self.supported_countries = %w(AD AI AG AR AU AT BS BB BE BZ BM BR BN BG CA HR CY CZ DK DM EE FI FR DE GR GD GY HK HU IS IN IL IT JP LV LI LT LU MY MT MX MC MS NL PA PL PT KN LC MF VC SM SG SK SI ZA ES SR SE CH TR GB US UY)
|
114
|
+
self.default_currency = 'EUR'
|
115
|
+
self.supported_cardtypes = %i[visa master american_express diners_club discover jcb maestro dankort]
|
116
|
+
|
117
|
+
self.homepage_url = 'https://docs.oppwa.com'
|
118
|
+
self.display_name = 'Open Payment Platform'
|
119
|
+
|
120
|
+
def initialize(options = {})
|
121
|
+
requires!(options, :access_token, :entity_id)
|
122
|
+
super
|
123
|
+
end
|
124
|
+
|
125
|
+
def purchase(money, payment, options = {})
|
126
|
+
# debit
|
127
|
+
options[:registrationId] = payment if payment.is_a?(String)
|
128
|
+
execute_dbpa(options[:risk_workflow] ? 'PA.CP' : 'DB',
|
129
|
+
money, payment, options)
|
130
|
+
end
|
131
|
+
|
132
|
+
def authorize(money, payment, options = {})
|
133
|
+
# preauthorization PA
|
134
|
+
execute_dbpa('PA', money, payment, options)
|
135
|
+
end
|
136
|
+
|
137
|
+
def capture(money, authorization, options = {})
|
138
|
+
# capture CP
|
139
|
+
execute_referencing('CP', money, authorization, options)
|
140
|
+
end
|
141
|
+
|
142
|
+
def refund(money, authorization, options = {})
|
143
|
+
# refund RF
|
144
|
+
execute_referencing('RF', money, authorization, options)
|
145
|
+
end
|
146
|
+
|
147
|
+
def void(authorization, options = {})
|
148
|
+
# reversal RV
|
149
|
+
execute_referencing('RV', nil, authorization, options)
|
150
|
+
end
|
151
|
+
|
152
|
+
def verify(credit_card, options = {})
|
153
|
+
MultiResponse.run(:use_first_response) do |r|
|
154
|
+
r.process { authorize(100, credit_card, options) }
|
155
|
+
r.process(:ignore_result) { void(r.authorization, options) }
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
def store(credit_card, options = {})
|
160
|
+
execute_store(credit_card, options.merge(store: true))
|
161
|
+
end
|
162
|
+
|
163
|
+
def supports_scrubbing?
|
164
|
+
true
|
165
|
+
end
|
166
|
+
|
167
|
+
def scrub(transcript)
|
168
|
+
transcript.
|
169
|
+
gsub(%r((Authorization: Bearer )\w+)i, '\1[FILTERED]').
|
170
|
+
gsub(%r((card\.number=)\d+), '\1[FILTERED]').
|
171
|
+
gsub(%r((card\.cvv=)\d+), '\1[FILTERED]')
|
172
|
+
end
|
173
|
+
|
174
|
+
private
|
175
|
+
|
176
|
+
def execute_store(payment, options)
|
177
|
+
post = {}
|
178
|
+
add_payment_method(post, payment, options)
|
179
|
+
add_address(post, options)
|
180
|
+
add_options(post, options)
|
181
|
+
add_3d_secure(post, options)
|
182
|
+
commit(post, nil, options)
|
183
|
+
end
|
184
|
+
|
185
|
+
def execute_dbpa(txtype, money, payment, options)
|
186
|
+
post = {}
|
187
|
+
post[:paymentType] = txtype
|
188
|
+
add_invoice(post, money, options)
|
189
|
+
add_payment_method(post, payment, options)
|
190
|
+
add_address(post, options)
|
191
|
+
add_customer_data(post, payment, options)
|
192
|
+
add_options(post, options)
|
193
|
+
add_3d_secure(post, options)
|
194
|
+
commit(post, nil, options)
|
195
|
+
end
|
196
|
+
|
197
|
+
def execute_referencing(txtype, money, authorization, options)
|
198
|
+
post = {}
|
199
|
+
post[:paymentType] = txtype
|
200
|
+
add_invoice(post, money, options)
|
201
|
+
commit(post, authorization, options)
|
202
|
+
end
|
203
|
+
|
204
|
+
def add_authentication(post)
|
205
|
+
post[:authentication] = { entityId: @options[:entity_id] }
|
206
|
+
end
|
207
|
+
|
208
|
+
def add_customer_data(post, payment, options)
|
209
|
+
if options[:customer]
|
210
|
+
post[:customer] = {
|
211
|
+
merchantCustomerId: options[:customer][:merchant_customer_id],
|
212
|
+
givenName: options[:customer][:givenname] || payment.first_name,
|
213
|
+
surname: options[:customer][:surname] || payment.last_name,
|
214
|
+
birthDate: options[:customer][:birth_date],
|
215
|
+
phone: options[:customer][:phone],
|
216
|
+
mobile: options[:customer][:mobile],
|
217
|
+
email: options[:customer][:email] || options[:email],
|
218
|
+
companyName: options[:customer][:company_name],
|
219
|
+
identificationDocType: options[:customer][:identification_doctype],
|
220
|
+
identificationDocId: options[:customer][:identification_docid],
|
221
|
+
ip: options[:customer][:ip] || options[:ip]
|
222
|
+
}
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
226
|
+
def add_address(post, options)
|
227
|
+
if billing_address = options[:billing_address] || options[:address]
|
228
|
+
address(post, billing_address, 'billing')
|
229
|
+
end
|
230
|
+
if shipping_address = options[:shipping_address]
|
231
|
+
address(post, shipping_address, 'shipping')
|
232
|
+
if shipping_address[:name]
|
233
|
+
firstname, lastname = shipping_address[:name].split(' ')
|
234
|
+
post[:shipping] = { givenName: firstname, surname: lastname }
|
235
|
+
end
|
236
|
+
end
|
237
|
+
end
|
238
|
+
|
239
|
+
def address(post, address, prefix)
|
240
|
+
post[prefix] = {
|
241
|
+
street1: address[:address1],
|
242
|
+
street2: address[:address2],
|
243
|
+
city: address[:city],
|
244
|
+
state: address[:state],
|
245
|
+
postcode: address[:zip],
|
246
|
+
country: address[:country]
|
247
|
+
}
|
248
|
+
end
|
249
|
+
|
250
|
+
def add_invoice(post, money, options)
|
251
|
+
post[:amount] = amount(money)
|
252
|
+
post[:currency] = options[:currency] || currency(money) unless post[:paymentType] == 'RV'
|
253
|
+
post[:descriptor] = options[:description] || options[:descriptor]
|
254
|
+
post[:merchantInvoiceId] = options[:merchantInvoiceId] || options[:order_id]
|
255
|
+
post[:merchantTransactionId] = options[:merchant_transaction_id] || generate_unique_id
|
256
|
+
end
|
257
|
+
|
258
|
+
def add_payment_method(post, payment, options)
|
259
|
+
return if payment.is_a?(String)
|
260
|
+
|
261
|
+
if options[:registrationId]
|
262
|
+
post[:card] = {
|
263
|
+
cvv: payment.verification_value
|
264
|
+
}
|
265
|
+
else
|
266
|
+
post[:paymentBrand] = payment.brand.upcase
|
267
|
+
post[:card] = {
|
268
|
+
holder: payment.name,
|
269
|
+
number: payment.number,
|
270
|
+
expiryMonth: '%02d' % payment.month,
|
271
|
+
expiryYear: payment.year,
|
272
|
+
cvv: payment.verification_value
|
273
|
+
}
|
274
|
+
end
|
275
|
+
end
|
276
|
+
|
277
|
+
def add_3d_secure(post, options)
|
278
|
+
return unless options[:eci] && options[:cavv] && options[:xid]
|
279
|
+
|
280
|
+
post[:threeDSecure] = {
|
281
|
+
eci: options[:eci],
|
282
|
+
verificationId: options[:cavv],
|
283
|
+
xid: options[:xid]
|
284
|
+
}
|
285
|
+
end
|
286
|
+
|
287
|
+
def add_options(post, options)
|
288
|
+
post[:createRegistration] = options[:create_registration] if options[:create_registration] && !options[:registrationId]
|
289
|
+
post[:testMode] = options[:test_mode] if test? && options[:test_mode]
|
290
|
+
options.each { |key, value| post[key] = value if key.to_s =~ /'customParameters\[[a-zA-Z0-9\._]{3,64}\]'/ }
|
291
|
+
post['customParameters[SHOPPER_pluginId]'] = 'activemerchant'
|
292
|
+
post['customParameters[custom_disable3DSecure]'] = options[:disable_3d_secure] if options[:disable_3d_secure]
|
293
|
+
end
|
294
|
+
|
295
|
+
def build_url(url, authorization, options)
|
296
|
+
if options[:store]
|
297
|
+
url.gsub(/payments/, 'registrations')
|
298
|
+
elsif options[:registrationId]
|
299
|
+
"#{url.gsub(/payments/, 'registrations')}/#{options[:registrationId]}/payments"
|
300
|
+
elsif authorization
|
301
|
+
"#{url}/#{authorization}"
|
302
|
+
else
|
303
|
+
url
|
304
|
+
end
|
305
|
+
end
|
306
|
+
|
307
|
+
def commit(post, authorization, options)
|
308
|
+
url = build_url(test? ? test_url : live_url, authorization, options)
|
309
|
+
add_authentication(post)
|
310
|
+
post = flatten_hash(post)
|
311
|
+
|
312
|
+
response =
|
313
|
+
begin
|
314
|
+
parse(
|
315
|
+
ssl_post(
|
316
|
+
url,
|
317
|
+
post.collect { |key, value| "#{key}=#{CGI.escape(value.to_s)}" }.join('&'),
|
318
|
+
headers
|
319
|
+
)
|
320
|
+
)
|
321
|
+
rescue ResponseError => e
|
322
|
+
parse(e.response.body)
|
323
|
+
end
|
324
|
+
|
325
|
+
success = success_from(response)
|
326
|
+
|
327
|
+
Response.new(
|
328
|
+
success,
|
329
|
+
message_from(response),
|
330
|
+
response,
|
331
|
+
authorization: authorization_from(response),
|
332
|
+
test: test?,
|
333
|
+
error_code: success ? nil : error_code_from(response)
|
334
|
+
)
|
335
|
+
end
|
336
|
+
|
337
|
+
def headers
|
338
|
+
{
|
339
|
+
'Content-Type' => 'application/x-www-form-urlencoded;charset=UTF-8',
|
340
|
+
'Authorization' => "Bearer #{@options[:access_token]}"
|
341
|
+
}
|
342
|
+
end
|
343
|
+
|
344
|
+
def parse(body)
|
345
|
+
JSON.parse(body)
|
346
|
+
rescue JSON::ParserError
|
347
|
+
json_error(body)
|
348
|
+
end
|
349
|
+
|
350
|
+
def json_error(body)
|
351
|
+
message = "Invalid response received #{body.inspect}"
|
352
|
+
{ 'result' => { 'description' => message, 'code' => 'unknown' } }
|
353
|
+
end
|
354
|
+
|
355
|
+
def success_from(response)
|
356
|
+
return false unless response['result']
|
357
|
+
|
358
|
+
success_regex = /^(000\.000\.|000\.100\.1|000\.[36])/
|
359
|
+
|
360
|
+
if success_regex.match?(response['result']['code'])
|
361
|
+
true
|
362
|
+
else
|
363
|
+
false
|
364
|
+
end
|
365
|
+
end
|
366
|
+
|
367
|
+
def message_from(response)
|
368
|
+
return 'Failed' unless response['result']
|
369
|
+
|
370
|
+
response['result']['description']
|
371
|
+
end
|
372
|
+
|
373
|
+
def authorization_from(response)
|
374
|
+
response['id']
|
375
|
+
end
|
376
|
+
|
377
|
+
def error_code_from(response)
|
378
|
+
response['result']['code']
|
379
|
+
end
|
380
|
+
|
381
|
+
def flatten_hash(hash)
|
382
|
+
hash.each_with_object({}) do |(k, v), h|
|
383
|
+
if v.is_a? Hash
|
384
|
+
flatten_hash(v).map do |h_k, h_v|
|
385
|
+
h["#{k}.#{h_k}".to_sym] = h_v
|
386
|
+
end
|
387
|
+
else
|
388
|
+
h[k] = v
|
389
|
+
end
|
390
|
+
end
|
391
|
+
end
|
392
|
+
end
|
393
|
+
end
|
394
|
+
end
|