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,277 @@
|
|
1
|
+
require 'digest/md5'
|
2
|
+
|
3
|
+
module ActiveMerchant #:nodoc:
|
4
|
+
module Billing #:nodoc:
|
5
|
+
# This gateway accepts the following arguments:
|
6
|
+
# :login => your PayJunction username
|
7
|
+
# :password => your PayJunction pass
|
8
|
+
# Example use:
|
9
|
+
#
|
10
|
+
# gateway = ActiveMerchant::Billing::Base.gateway(:pay_gate_xml).new(
|
11
|
+
# :login => "my_account",
|
12
|
+
# :password => "my_pass"
|
13
|
+
# )
|
14
|
+
#
|
15
|
+
# # set up credit card obj as in main ActiveMerchant example
|
16
|
+
# creditcard = ActiveMerchant::Billing::CreditCard.new(
|
17
|
+
# :type => 'visa',
|
18
|
+
# :number => '4242424242424242',
|
19
|
+
# :month => 8,
|
20
|
+
# :year => 2009,
|
21
|
+
# :first_name => 'Bob',
|
22
|
+
# :last_name => 'Bobsen'
|
23
|
+
# )
|
24
|
+
#
|
25
|
+
# # run request
|
26
|
+
# response = gateway.purchase(1000, creditcard) # charge 10 dollars
|
27
|
+
#
|
28
|
+
# 1) Check whether the transaction was successful
|
29
|
+
#
|
30
|
+
# response.success?
|
31
|
+
#
|
32
|
+
# 2) Retrieve the message returned by PayJunction
|
33
|
+
#
|
34
|
+
# response.message
|
35
|
+
#
|
36
|
+
# 3) Retrieve the unique transaction ID returned by PayGateXML
|
37
|
+
#
|
38
|
+
# response.authorization
|
39
|
+
#
|
40
|
+
# This gateway has many other features which are not implemented here yet
|
41
|
+
# The basic setup here only supports auth/capture transactions.
|
42
|
+
#
|
43
|
+
# Test Transactions
|
44
|
+
#
|
45
|
+
# PayGateXML has a global test user/pass, but you can also sign up for your own.
|
46
|
+
# The class and the test come equipped with the global test creds
|
47
|
+
#
|
48
|
+
# Usage Details
|
49
|
+
#
|
50
|
+
# Below is a map of only SOME of the values accepted by PayGateXML and how you should submit
|
51
|
+
# each to ActiveMerchant
|
52
|
+
#
|
53
|
+
# PayGateXML Field ActiveMerchant Use
|
54
|
+
#
|
55
|
+
# pgid use :login value to gateway instantiation
|
56
|
+
# pwd use :password value to gateway instantiation
|
57
|
+
#
|
58
|
+
# cname credit_card.name
|
59
|
+
# cc credit_card.number
|
60
|
+
# exp credit_card values formatted to YYYYMMDD
|
61
|
+
# budp South Africa only - set to 0 if purchase is not on budget
|
62
|
+
# amt include as argument to method for your transaction type
|
63
|
+
# ver do nothing, always set to current API version
|
64
|
+
#
|
65
|
+
# cref provide as :invoice in options, varchar(80)
|
66
|
+
# cur 3 char field, currently only ZAR
|
67
|
+
# cvv credit_card.verification
|
68
|
+
# bno batch processing number, i.e. you supply this
|
69
|
+
#
|
70
|
+
# others -- not used in this implementation
|
71
|
+
# nurl, rurl - must remain blank or absent or they will use an alternative authentication mechanism
|
72
|
+
# email, ip - must remain blank or absent or they will use a PayGate extra service call PayProtector
|
73
|
+
# threed - must remain blank unless you are using your own 3D Secure server
|
74
|
+
#
|
75
|
+
class PayGateXmlGateway < Gateway
|
76
|
+
self.live_url = 'https://www.paygate.co.za/payxml/process.trans'
|
77
|
+
|
78
|
+
# The countries the gateway supports merchants from as 2 digit ISO country codes
|
79
|
+
self.supported_countries = %w[US ZA]
|
80
|
+
|
81
|
+
# The card types supported by the payment gateway
|
82
|
+
self.supported_cardtypes = %i[visa master american_express diners_club]
|
83
|
+
|
84
|
+
# The homepage URL of the gateway
|
85
|
+
self.homepage_url = 'http://paygate.co.za/'
|
86
|
+
|
87
|
+
# The name of the gateway
|
88
|
+
self.display_name = 'PayGate PayXML'
|
89
|
+
|
90
|
+
# PayGate only supports Rands
|
91
|
+
self.default_currency = 'ZAR'
|
92
|
+
|
93
|
+
# PayGate accepts only lowest denomination
|
94
|
+
self.money_format = :cents
|
95
|
+
|
96
|
+
# PayGateXML public test account - you can get a private one too
|
97
|
+
TEST_ID_3DSECURE = '10011013800'
|
98
|
+
TEST_ID = '10011021600'
|
99
|
+
TEST_PWD = 'test'
|
100
|
+
|
101
|
+
API_VERSION = '4.0'
|
102
|
+
|
103
|
+
DECLINE_CODES = {
|
104
|
+
# Credit Card Errors - These RESULT_CODEs are returned if the transaction cannot be authorized due to a problem with the card. The TRANSACTION_STATUS will be 2
|
105
|
+
900001 => 'Call for Approval',
|
106
|
+
900002 => 'Card Expired',
|
107
|
+
900003 => 'Insufficient Funds',
|
108
|
+
900004 => 'Invalid Card Number',
|
109
|
+
900005 => 'Bank Interface Timeout', # indicates a communications failure between the banks systems
|
110
|
+
900006 => 'Invalid Card',
|
111
|
+
900007 => 'Declined',
|
112
|
+
900009 => 'Lost Card',
|
113
|
+
900010 => 'Invalid Card Length',
|
114
|
+
900011 => 'Suspected Fraud',
|
115
|
+
900012 => 'Card Reported As Stolen',
|
116
|
+
900013 => 'Restricted Card',
|
117
|
+
900014 => 'Excessive Card Usage',
|
118
|
+
900015 => 'Card Blacklisted',
|
119
|
+
|
120
|
+
900207 => 'Declined; authentication failed', # indicates the cardholder did not enter their MasterCard SecureCode / Verified by Visa password correctly
|
121
|
+
|
122
|
+
990020 => 'Auth Declined',
|
123
|
+
|
124
|
+
991001 => 'Invalid expiry date',
|
125
|
+
991002 => 'Invalid amount',
|
126
|
+
|
127
|
+
# Communication Errors - These RESULT_CODEs are returned if the transaction cannot be completed due to an unexpected error. TRANSACTION_STATUS will be 0.
|
128
|
+
900205 => 'Unexpected authentication result (phase 1)',
|
129
|
+
900206 => 'Unexpected authentication result (phase 1)',
|
130
|
+
|
131
|
+
990001 => 'Could not insert into Database',
|
132
|
+
|
133
|
+
990022 => 'Bank not available',
|
134
|
+
|
135
|
+
990053 => 'Error processing transaction',
|
136
|
+
|
137
|
+
# Miscellaneous - Unless otherwise noted, the TRANSACTION_STATUS will be 0.
|
138
|
+
900209 => 'Transaction verification failed (phase 2)', # Indicates the verification data returned from MasterCard SecureCode / Verified by Visa has been altered
|
139
|
+
900210 => 'Authentication complete; transaction must be restarted', # Indicates that the MasterCard SecuerCode / Verified by Visa transaction has already been completed. Most likely caused by the customer clicking the refresh button
|
140
|
+
|
141
|
+
990024 => 'Duplicate Transaction Detected. Please check before submitting',
|
142
|
+
|
143
|
+
990028 => 'Transaction cancelled' # Customer clicks the 'Cancel' button on the payment page
|
144
|
+
}
|
145
|
+
|
146
|
+
SUCCESS_CODES = %w(990004 990005 990017 990012 990018 990031)
|
147
|
+
|
148
|
+
TRANSACTION_CODES = {
|
149
|
+
0 => 'Not Done',
|
150
|
+
1 => 'Approved',
|
151
|
+
2 => 'Declined',
|
152
|
+
3 => 'Paid',
|
153
|
+
4 => 'Refunded',
|
154
|
+
5 => 'Received by PayGate',
|
155
|
+
6 => 'Replied to Client'
|
156
|
+
}
|
157
|
+
|
158
|
+
def initialize(options = {})
|
159
|
+
requires!(options, :login, :password)
|
160
|
+
super
|
161
|
+
end
|
162
|
+
|
163
|
+
def purchase(money, creditcard, options = {})
|
164
|
+
MultiResponse.run do |r|
|
165
|
+
r.process { authorize(money, creditcard, options) }
|
166
|
+
r.process { capture(money, r.authorization, options) }
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
def authorize(money, creditcard, options = {})
|
171
|
+
action = 'authtx'
|
172
|
+
|
173
|
+
options[:money] = money
|
174
|
+
options[:creditcard] = creditcard
|
175
|
+
commit(action, build_request(action, options))
|
176
|
+
end
|
177
|
+
|
178
|
+
def capture(money, authorization, options = {})
|
179
|
+
action = 'settletx'
|
180
|
+
|
181
|
+
options[:money] = money
|
182
|
+
options[:authorization] = authorization
|
183
|
+
commit(action, build_request(action, options), authorization)
|
184
|
+
end
|
185
|
+
|
186
|
+
def refund(money, authorization, options = {})
|
187
|
+
action = 'refundtx'
|
188
|
+
|
189
|
+
options[:money] = money
|
190
|
+
options[:authorization] = authorization
|
191
|
+
commit(action, build_request(action, options))
|
192
|
+
end
|
193
|
+
|
194
|
+
private
|
195
|
+
|
196
|
+
def successful?(response)
|
197
|
+
SUCCESS_CODES.include?(response[:res])
|
198
|
+
end
|
199
|
+
|
200
|
+
def build_request(action, options = {})
|
201
|
+
xml = Builder::XmlMarkup.new
|
202
|
+
xml.instruct!
|
203
|
+
|
204
|
+
xml.tag! 'protocol', ver: API_VERSION, pgid: (test? ? TEST_ID : @options[:login]), pwd: @options[:password] do |protocol|
|
205
|
+
money = options.delete(:money)
|
206
|
+
authorization = options.delete(:authorization)
|
207
|
+
creditcard = options.delete(:creditcard)
|
208
|
+
case action
|
209
|
+
when 'authtx'
|
210
|
+
build_authorization(protocol, money, creditcard, options)
|
211
|
+
when 'settletx'
|
212
|
+
build_capture(protocol, money, authorization, options)
|
213
|
+
when 'refundtx'
|
214
|
+
build_refund(protocol, money, authorization, options)
|
215
|
+
else
|
216
|
+
raise 'no action specified for build_request'
|
217
|
+
end
|
218
|
+
end
|
219
|
+
|
220
|
+
xml.target!
|
221
|
+
end
|
222
|
+
|
223
|
+
def build_authorization(xml, money, creditcard, options = {})
|
224
|
+
xml.tag! 'authtx', {
|
225
|
+
cref: options[:order_id],
|
226
|
+
cname: creditcard.name,
|
227
|
+
cc: creditcard.number,
|
228
|
+
exp: "#{format(creditcard.month, :two_digits)}#{format(creditcard.year, :four_digits)}",
|
229
|
+
budp: 0,
|
230
|
+
amt: amount(money),
|
231
|
+
cur: (options[:currency] || currency(money)),
|
232
|
+
cvv: creditcard.verification_value,
|
233
|
+
email: options[:email],
|
234
|
+
ip: options[:ip]
|
235
|
+
}
|
236
|
+
end
|
237
|
+
|
238
|
+
def build_capture(xml, money, authorization, options = {})
|
239
|
+
xml.tag! 'settletx', {
|
240
|
+
tid: authorization
|
241
|
+
}
|
242
|
+
end
|
243
|
+
|
244
|
+
def build_refund(xml, money, authorization, options = {})
|
245
|
+
xml.tag! 'refundtx', {
|
246
|
+
tid: authorization,
|
247
|
+
amt: amount(money)
|
248
|
+
}
|
249
|
+
end
|
250
|
+
|
251
|
+
def parse(action, body)
|
252
|
+
hash = {}
|
253
|
+
xml = REXML::Document.new(body)
|
254
|
+
|
255
|
+
response_action = action.gsub(/tx/, 'rx')
|
256
|
+
root = REXML::XPath.first(xml.root, response_action)
|
257
|
+
# we might have gotten an error
|
258
|
+
root = REXML::XPath.first(xml.root, 'errorrx') if root.nil?
|
259
|
+
root.attributes.each do |name, value|
|
260
|
+
hash[name.to_sym] = value
|
261
|
+
end
|
262
|
+
hash
|
263
|
+
end
|
264
|
+
|
265
|
+
def commit(action, request, authorization = nil)
|
266
|
+
response = parse(action, ssl_post(self.live_url, request))
|
267
|
+
Response.new(successful?(response), message_from(response), response,
|
268
|
+
test: test?,
|
269
|
+
authorization: authorization || response[:tid])
|
270
|
+
end
|
271
|
+
|
272
|
+
def message_from(response)
|
273
|
+
(response[:rdesc] || response[:edesc])
|
274
|
+
end
|
275
|
+
end
|
276
|
+
end
|
277
|
+
end
|
@@ -0,0 +1,213 @@
|
|
1
|
+
module ActiveMerchant #:nodoc:
|
2
|
+
module Billing #:nodoc:
|
3
|
+
class PayHubGateway < Gateway
|
4
|
+
self.live_url = 'https://checkout.payhub.com/transaction/api'
|
5
|
+
|
6
|
+
self.supported_countries = ['US']
|
7
|
+
self.default_currency = 'USD'
|
8
|
+
self.supported_cardtypes = %i[visa master american_express discover]
|
9
|
+
|
10
|
+
self.homepage_url = 'http://www.payhub.com/'
|
11
|
+
self.display_name = 'PayHub'
|
12
|
+
|
13
|
+
CVV_CODE_TRANSLATOR = {
|
14
|
+
'M' => 'CVV matches',
|
15
|
+
'N' => 'CVV does not match',
|
16
|
+
'P' => 'CVV not processed',
|
17
|
+
'S' => 'CVV should have been present',
|
18
|
+
'U' => 'CVV request unable to be processed by issuer'
|
19
|
+
}
|
20
|
+
|
21
|
+
AVS_CODE_TRANSLATOR = {
|
22
|
+
'0' => 'Approved, Address verification was not requested.',
|
23
|
+
'A' => 'Approved, Address matches only.',
|
24
|
+
'B' => 'Address Match. Street Address math for international transaction Postal Code not verified because of incompatible formats (Acquirer sent both street address and Postal Code)',
|
25
|
+
'C' => 'Serv Unavailable. Street address and Postal Code not verified for international transaction because of incompatible formats (Acquirer sent both street and Postal Code).',
|
26
|
+
'D' => 'Exact Match, Street Address and Postal Code match for international transaction.',
|
27
|
+
'F' => 'Exact Match, Street Address and Postal Code match. Applies to UK only.',
|
28
|
+
'G' => 'Ver Unavailable, Non-U.S. Issuer does not participate.',
|
29
|
+
'I' => 'Ver Unavailable, Address information not verified for international transaction',
|
30
|
+
'M' => 'Exact Match, Street Address and Postal Code match for international transaction',
|
31
|
+
'N' => 'No - Address and ZIP Code does not match',
|
32
|
+
'P' => 'Zip Match, Postal Codes match for international transaction Street address not verified because of incompatible formats (Acquirer sent both street address and Postal Code).',
|
33
|
+
'R' => 'Retry - Issuer system unavailable',
|
34
|
+
'S' => 'Serv Unavailable, Service not supported',
|
35
|
+
'U' => 'Ver Unavailable, Address unavailable.',
|
36
|
+
'W' => 'ZIP match - Nine character numeric ZIP match only.',
|
37
|
+
'X' => 'Exact match, Address and nine-character ZIP match.',
|
38
|
+
'Y' => 'Exact Match, Address and five character ZIP match.',
|
39
|
+
'Z' => 'Zip Match, Five character numeric ZIP match only.',
|
40
|
+
'1' => 'Cardholder name and ZIP match AMEX only.',
|
41
|
+
'2' => 'Cardholder name, address, and ZIP match AMEX only.',
|
42
|
+
'3' => 'Cardholder name and address match AMEX only.',
|
43
|
+
'4' => 'Cardholder name match AMEX only.',
|
44
|
+
'5' => 'Cardholder name incorrect, ZIP match AMEX only.',
|
45
|
+
'6' => 'Cardholder name incorrect, address and ZIP match AMEX only.',
|
46
|
+
'7' => 'Cardholder name incorrect, address match AMEX only.',
|
47
|
+
'8' => 'Cardholder, all do not match AMEX only.'
|
48
|
+
}
|
49
|
+
|
50
|
+
STANDARD_ERROR_CODE_MAPPING = {
|
51
|
+
'14' => STANDARD_ERROR_CODE[:invalid_number],
|
52
|
+
'80' => STANDARD_ERROR_CODE[:invalid_expiry_date],
|
53
|
+
'82' => STANDARD_ERROR_CODE[:invalid_cvc],
|
54
|
+
'54' => STANDARD_ERROR_CODE[:expired_card],
|
55
|
+
'51' => STANDARD_ERROR_CODE[:card_declined],
|
56
|
+
'05' => STANDARD_ERROR_CODE[:card_declined],
|
57
|
+
'61' => STANDARD_ERROR_CODE[:card_declined],
|
58
|
+
'62' => STANDARD_ERROR_CODE[:card_declined],
|
59
|
+
'65' => STANDARD_ERROR_CODE[:card_declined],
|
60
|
+
'93' => STANDARD_ERROR_CODE[:card_declined],
|
61
|
+
'01' => STANDARD_ERROR_CODE[:call_issuer],
|
62
|
+
'02' => STANDARD_ERROR_CODE[:call_issuer],
|
63
|
+
'04' => STANDARD_ERROR_CODE[:pickup_card],
|
64
|
+
'07' => STANDARD_ERROR_CODE[:pickup_card],
|
65
|
+
'41' => STANDARD_ERROR_CODE[:pickup_card],
|
66
|
+
'43' => STANDARD_ERROR_CODE[:pickup_card]
|
67
|
+
}
|
68
|
+
|
69
|
+
def initialize(options = {})
|
70
|
+
requires!(options, :orgid, :username, :password, :tid)
|
71
|
+
|
72
|
+
super
|
73
|
+
end
|
74
|
+
|
75
|
+
def authorize(amount, creditcard, options = {})
|
76
|
+
post = setup_post('auth')
|
77
|
+
add_creditcard(post, creditcard)
|
78
|
+
add_amount(post, amount)
|
79
|
+
add_address(post, (options[:address] || options[:billing_address]))
|
80
|
+
add_customer_data(post, options)
|
81
|
+
|
82
|
+
commit(post)
|
83
|
+
end
|
84
|
+
|
85
|
+
def purchase(amount, creditcard, options = {})
|
86
|
+
post = setup_post('sale')
|
87
|
+
add_creditcard(post, creditcard)
|
88
|
+
add_amount(post, amount)
|
89
|
+
add_address(post, (options[:address] || options[:billing_address]))
|
90
|
+
add_customer_data(post, options)
|
91
|
+
|
92
|
+
commit(post)
|
93
|
+
end
|
94
|
+
|
95
|
+
def refund(amount, trans_id, options = {})
|
96
|
+
# Attempt a void in case the transaction is unsettled
|
97
|
+
post = setup_post('void')
|
98
|
+
add_reference(post, trans_id)
|
99
|
+
response = commit(post)
|
100
|
+
return response if response.success?
|
101
|
+
|
102
|
+
post = setup_post('refund')
|
103
|
+
add_reference(post, trans_id)
|
104
|
+
commit(post)
|
105
|
+
end
|
106
|
+
|
107
|
+
def capture(amount, trans_id, options = {})
|
108
|
+
post = setup_post('capture')
|
109
|
+
|
110
|
+
add_reference(post, trans_id)
|
111
|
+
add_amount(post, amount)
|
112
|
+
|
113
|
+
commit(post)
|
114
|
+
end
|
115
|
+
|
116
|
+
# No void, as PayHub's void does not work on authorizations
|
117
|
+
|
118
|
+
def verify(creditcard, options = {})
|
119
|
+
authorize(100, creditcard, options)
|
120
|
+
end
|
121
|
+
|
122
|
+
private
|
123
|
+
|
124
|
+
def setup_post(action)
|
125
|
+
post = {}
|
126
|
+
post[:orgid] = @options[:orgid]
|
127
|
+
post[:tid] = @options[:tid]
|
128
|
+
post[:username] = @options[:username]
|
129
|
+
post[:password] = @options[:password]
|
130
|
+
post[:mode] = (test? ? 'demo' : 'live')
|
131
|
+
post[:trans_type] = action
|
132
|
+
post
|
133
|
+
end
|
134
|
+
|
135
|
+
def add_reference(post, trans_id)
|
136
|
+
post[:trans_id] = trans_id
|
137
|
+
end
|
138
|
+
|
139
|
+
def add_customer_data(post, options = {})
|
140
|
+
post[:first_name] = options[:first_name]
|
141
|
+
post[:last_name] = options[:last_name]
|
142
|
+
post[:phone] = options[:phone]
|
143
|
+
post[:email] = options[:email]
|
144
|
+
end
|
145
|
+
|
146
|
+
def add_address(post, address)
|
147
|
+
return unless address
|
148
|
+
|
149
|
+
post[:address1] = address[:address1]
|
150
|
+
post[:address2] = address[:address2]
|
151
|
+
post[:zip] = address[:zip]
|
152
|
+
post[:state] = address[:state]
|
153
|
+
post[:city] = address[:city]
|
154
|
+
end
|
155
|
+
|
156
|
+
def add_amount(post, amount)
|
157
|
+
post[:amount] = amount(amount)
|
158
|
+
end
|
159
|
+
|
160
|
+
def add_creditcard(post, creditcard)
|
161
|
+
post[:cc] = creditcard.number
|
162
|
+
post[:month] = creditcard.month.to_s
|
163
|
+
post[:year] = creditcard.year.to_s
|
164
|
+
post[:cvv] = creditcard.verification_value
|
165
|
+
end
|
166
|
+
|
167
|
+
def parse(body)
|
168
|
+
JSON.parse(body)
|
169
|
+
end
|
170
|
+
|
171
|
+
def commit(post)
|
172
|
+
success = false
|
173
|
+
|
174
|
+
begin
|
175
|
+
raw_response = ssl_post(live_url, post.to_json, { 'Content-Type' => 'application/json' })
|
176
|
+
response = parse(raw_response)
|
177
|
+
success = (response['RESPONSE_CODE'] == '00')
|
178
|
+
rescue ResponseError => e
|
179
|
+
raw_response = e.response.body
|
180
|
+
response = response_error(raw_response)
|
181
|
+
rescue JSON::ParserError
|
182
|
+
response = json_error(raw_response)
|
183
|
+
end
|
184
|
+
|
185
|
+
Response.new(success,
|
186
|
+
response_message(response),
|
187
|
+
response,
|
188
|
+
test: test?,
|
189
|
+
avs_result: { code: response['AVS_RESULT_CODE'] },
|
190
|
+
cvv_result: response['VERIFICATION_RESULT_CODE'],
|
191
|
+
error_code: (success ? nil : STANDARD_ERROR_CODE_MAPPING[response['RESPONSE_CODE']]),
|
192
|
+
authorization: response['TRANSACTION_ID'])
|
193
|
+
end
|
194
|
+
|
195
|
+
def response_error(raw_response)
|
196
|
+
parse(raw_response)
|
197
|
+
rescue JSON::ParserError
|
198
|
+
json_error(raw_response)
|
199
|
+
end
|
200
|
+
|
201
|
+
def json_error(raw_response)
|
202
|
+
{
|
203
|
+
error_message: 'Invalid response received from the Payhub API. Please contact wecare@payhub.com if you continue to receive this message.' \
|
204
|
+
" (The raw response returned by the API was #{raw_response.inspect})"
|
205
|
+
}
|
206
|
+
end
|
207
|
+
|
208
|
+
def response_message(response)
|
209
|
+
(response['RESPONSE_TEXT'] || response['RESPONSE_CODE'] || response[:error_message])
|
210
|
+
end
|
211
|
+
end
|
212
|
+
end
|
213
|
+
end
|