johnideal-activemerchant 1.4.4
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.
- data/.gitignore +2 -0
- data/CHANGELOG +448 -0
- data/CONTRIBUTERS +106 -0
- data/MIT-LICENSE +20 -0
- data/README +134 -0
- data/Rakefile +167 -0
- data/VERSION +1 -0
- data/activemerchant.gemspec +484 -0
- data/gem-public_cert.pem +20 -0
- data/generators/gateway/USAGE +5 -0
- data/generators/gateway/gateway_generator.rb +61 -0
- data/generators/gateway/templates/gateway.rb +77 -0
- data/generators/gateway/templates/gateway_test.rb +49 -0
- data/generators/gateway/templates/remote_gateway_test.rb +57 -0
- data/generators/integration/USAGE +5 -0
- data/generators/integration/integration_generator.rb +68 -0
- data/generators/integration/templates/helper.rb +34 -0
- data/generators/integration/templates/helper_test.rb +54 -0
- data/generators/integration/templates/integration.rb +18 -0
- data/generators/integration/templates/module_test.rb +9 -0
- data/generators/integration/templates/notification.rb +100 -0
- data/generators/integration/templates/notification_test.rb +41 -0
- data/init.rb +3 -0
- data/lib/active_merchant/billing/avs_result.rb +98 -0
- data/lib/active_merchant/billing/base.rb +57 -0
- data/lib/active_merchant/billing/check.rb +68 -0
- data/lib/active_merchant/billing/credit_card.rb +159 -0
- data/lib/active_merchant/billing/credit_card_formatting.rb +21 -0
- data/lib/active_merchant/billing/credit_card_methods.rb +125 -0
- data/lib/active_merchant/billing/cvv_result.rb +38 -0
- data/lib/active_merchant/billing/expiry_date.rb +34 -0
- data/lib/active_merchant/billing/gateway.rb +158 -0
- data/lib/active_merchant/billing/gateways/authorize_net.rb +657 -0
- data/lib/active_merchant/billing/gateways/authorize_net_cim.rb +703 -0
- data/lib/active_merchant/billing/gateways/beanstream/beanstream_core.rb +233 -0
- data/lib/active_merchant/billing/gateways/beanstream.rb +102 -0
- data/lib/active_merchant/billing/gateways/beanstream_interac.rb +54 -0
- data/lib/active_merchant/billing/gateways/bogus.rb +98 -0
- data/lib/active_merchant/billing/gateways/braintree.rb +17 -0
- data/lib/active_merchant/billing/gateways/card_stream.rb +230 -0
- data/lib/active_merchant/billing/gateways/cyber_source.rb +406 -0
- data/lib/active_merchant/billing/gateways/data_cash.rb +595 -0
- data/lib/active_merchant/billing/gateways/efsnet.rb +229 -0
- data/lib/active_merchant/billing/gateways/eway.rb +277 -0
- data/lib/active_merchant/billing/gateways/exact.rb +222 -0
- data/lib/active_merchant/billing/gateways/instapay.rb +164 -0
- data/lib/active_merchant/billing/gateways/linkpoint.rb +396 -0
- data/lib/active_merchant/billing/gateways/merchant_e_solutions.rb +154 -0
- data/lib/active_merchant/billing/gateways/merchant_ware.rb +283 -0
- data/lib/active_merchant/billing/gateways/modern_payments.rb +36 -0
- data/lib/active_merchant/billing/gateways/modern_payments_cim.rb +214 -0
- data/lib/active_merchant/billing/gateways/moneris.rb +205 -0
- data/lib/active_merchant/billing/gateways/net_registry.rb +189 -0
- data/lib/active_merchant/billing/gateways/netbilling.rb +168 -0
- data/lib/active_merchant/billing/gateways/pay_junction.rb +392 -0
- data/lib/active_merchant/billing/gateways/pay_secure.rb +120 -0
- data/lib/active_merchant/billing/gateways/payflow/payflow_common_api.rb +207 -0
- data/lib/active_merchant/billing/gateways/payflow/payflow_express_response.rb +39 -0
- data/lib/active_merchant/billing/gateways/payflow/payflow_response.rb +13 -0
- data/lib/active_merchant/billing/gateways/payflow.rb +236 -0
- data/lib/active_merchant/billing/gateways/payflow_express.rb +138 -0
- data/lib/active_merchant/billing/gateways/payflow_express_uk.rb +15 -0
- data/lib/active_merchant/billing/gateways/payflow_uk.rb +21 -0
- data/lib/active_merchant/billing/gateways/payment_express.rb +230 -0
- data/lib/active_merchant/billing/gateways/paymentech_orbital/paymentech_orbital_response.rb +72 -0
- data/lib/active_merchant/billing/gateways/paymentech_orbital.rb +170 -0
- data/lib/active_merchant/billing/gateways/paypal/paypal_common_api.rb +325 -0
- data/lib/active_merchant/billing/gateways/paypal/paypal_express_response.rb +38 -0
- data/lib/active_merchant/billing/gateways/paypal.rb +108 -0
- data/lib/active_merchant/billing/gateways/paypal_ca.rb +13 -0
- data/lib/active_merchant/billing/gateways/paypal_express.rb +130 -0
- data/lib/active_merchant/billing/gateways/paypal_express_common.rb +20 -0
- data/lib/active_merchant/billing/gateways/plugnpay.rb +292 -0
- data/lib/active_merchant/billing/gateways/protx.rb +307 -0
- data/lib/active_merchant/billing/gateways/psigate.rb +214 -0
- data/lib/active_merchant/billing/gateways/psl_card.rb +306 -0
- data/lib/active_merchant/billing/gateways/quickpay.rb +213 -0
- data/lib/active_merchant/billing/gateways/realex.rb +200 -0
- data/lib/active_merchant/billing/gateways/sage/sage_bankcard.rb +88 -0
- data/lib/active_merchant/billing/gateways/sage/sage_core.rb +110 -0
- data/lib/active_merchant/billing/gateways/sage/sage_virtual_check.rb +97 -0
- data/lib/active_merchant/billing/gateways/sage.rb +146 -0
- data/lib/active_merchant/billing/gateways/secure_pay.rb +31 -0
- data/lib/active_merchant/billing/gateways/secure_pay_au.rb +157 -0
- data/lib/active_merchant/billing/gateways/secure_pay_tech.rb +113 -0
- data/lib/active_merchant/billing/gateways/skip_jack.rb +442 -0
- data/lib/active_merchant/billing/gateways/smart_ps.rb +254 -0
- data/lib/active_merchant/billing/gateways/trans_first.rb +127 -0
- data/lib/active_merchant/billing/gateways/transax.rb +26 -0
- data/lib/active_merchant/billing/gateways/trust_commerce.rb +418 -0
- data/lib/active_merchant/billing/gateways/usa_epay.rb +194 -0
- data/lib/active_merchant/billing/gateways/verifi.rb +228 -0
- data/lib/active_merchant/billing/gateways/viaklix.rb +165 -0
- data/lib/active_merchant/billing/gateways/wirecard.rb +318 -0
- data/lib/active_merchant/billing/gateways.rb +3 -0
- data/lib/active_merchant/billing/integrations/action_view_helper.rb +79 -0
- data/lib/active_merchant/billing/integrations/bogus/helper.rb +17 -0
- data/lib/active_merchant/billing/integrations/bogus/notification.rb +11 -0
- data/lib/active_merchant/billing/integrations/bogus/return.rb +10 -0
- data/lib/active_merchant/billing/integrations/bogus.rb +22 -0
- data/lib/active_merchant/billing/integrations/chronopay/helper.rb +81 -0
- data/lib/active_merchant/billing/integrations/chronopay/notification.rb +156 -0
- data/lib/active_merchant/billing/integrations/chronopay/return.rb +10 -0
- data/lib/active_merchant/billing/integrations/chronopay.rb +22 -0
- data/lib/active_merchant/billing/integrations/gestpay/common.rb +42 -0
- data/lib/active_merchant/billing/integrations/gestpay/helper.rb +70 -0
- data/lib/active_merchant/billing/integrations/gestpay/notification.rb +83 -0
- data/lib/active_merchant/billing/integrations/gestpay/return.rb +10 -0
- data/lib/active_merchant/billing/integrations/gestpay.rb +26 -0
- data/lib/active_merchant/billing/integrations/helper.rb +93 -0
- data/lib/active_merchant/billing/integrations/hi_trust/helper.rb +58 -0
- data/lib/active_merchant/billing/integrations/hi_trust/notification.rb +59 -0
- data/lib/active_merchant/billing/integrations/hi_trust/return.rb +67 -0
- data/lib/active_merchant/billing/integrations/hi_trust.rb +26 -0
- data/lib/active_merchant/billing/integrations/nochex/helper.rb +68 -0
- data/lib/active_merchant/billing/integrations/nochex/notification.rb +94 -0
- data/lib/active_merchant/billing/integrations/nochex/return.rb +10 -0
- data/lib/active_merchant/billing/integrations/nochex.rb +87 -0
- data/lib/active_merchant/billing/integrations/notification.rb +62 -0
- data/lib/active_merchant/billing/integrations/paypal/helper.rb +118 -0
- data/lib/active_merchant/billing/integrations/paypal/notification.rb +154 -0
- data/lib/active_merchant/billing/integrations/paypal/return.rb +10 -0
- data/lib/active_merchant/billing/integrations/paypal.rb +40 -0
- data/lib/active_merchant/billing/integrations/quickpay/helper.rb +72 -0
- data/lib/active_merchant/billing/integrations/quickpay/notification.rb +74 -0
- data/lib/active_merchant/billing/integrations/quickpay.rb +18 -0
- data/lib/active_merchant/billing/integrations/return.rb +35 -0
- data/lib/active_merchant/billing/integrations/two_checkout/helper.rb +59 -0
- data/lib/active_merchant/billing/integrations/two_checkout/notification.rb +114 -0
- data/lib/active_merchant/billing/integrations/two_checkout/return.rb +17 -0
- data/lib/active_merchant/billing/integrations/two_checkout.rb +23 -0
- data/lib/active_merchant/billing/integrations.rb +22 -0
- data/lib/active_merchant/billing/response.rb +32 -0
- data/lib/active_merchant/lib/connection.rb +171 -0
- data/lib/active_merchant/lib/country.rb +319 -0
- data/lib/active_merchant/lib/error.rb +4 -0
- data/lib/active_merchant/lib/post_data.rb +22 -0
- data/lib/active_merchant/lib/posts_data.rb +47 -0
- data/lib/active_merchant/lib/requires_parameters.rb +16 -0
- data/lib/active_merchant/lib/utils.rb +18 -0
- data/lib/active_merchant/lib/validateable.rb +76 -0
- data/lib/active_merchant.rb +60 -0
- data/lib/certs/cacert.pem +7815 -0
- data/lib/support/gateway_support.rb +58 -0
- data/script/destroy +14 -0
- data/script/generate +14 -0
- data/test/fixtures.yml +335 -0
- data/test/remote/gateways/remote_authorize_net_cim_test.rb +459 -0
- data/test/remote/gateways/remote_authorize_net_test.rb +145 -0
- data/test/remote/gateways/remote_beanstream_interac_test.rb +53 -0
- data/test/remote/gateways/remote_beanstream_test.rb +150 -0
- data/test/remote/gateways/remote_braintree_test.rb +154 -0
- data/test/remote/gateways/remote_card_stream_test.rb +148 -0
- data/test/remote/gateways/remote_cyber_source_test.rb +144 -0
- data/test/remote/gateways/remote_data_cash_test.rb +357 -0
- data/test/remote/gateways/remote_efsnet_test.rb +81 -0
- data/test/remote/gateways/remote_eway_test.rb +74 -0
- data/test/remote/gateways/remote_exact_test.rb +60 -0
- data/test/remote/gateways/remote_instapay_test.rb +61 -0
- data/test/remote/gateways/remote_linkpoint_test.rb +112 -0
- data/test/remote/gateways/remote_merchant_e_solutions_test.rb +173 -0
- data/test/remote/gateways/remote_merchant_ware_test.rb +113 -0
- data/test/remote/gateways/remote_modern_payments_cim_test.rb +58 -0
- data/test/remote/gateways/remote_modern_payments_test.rb +43 -0
- data/test/remote/gateways/remote_moneris_test.rb +82 -0
- data/test/remote/gateways/remote_net_registry_test.rb +85 -0
- data/test/remote/gateways/remote_netbilling_test.rb +70 -0
- data/test/remote/gateways/remote_pay_junction_test.rb +143 -0
- data/test/remote/gateways/remote_pay_secure_test.rb +39 -0
- data/test/remote/gateways/remote_payflow_express_test.rb +50 -0
- data/test/remote/gateways/remote_payflow_test.rb +237 -0
- data/test/remote/gateways/remote_payflow_uk_test.rb +173 -0
- data/test/remote/gateways/remote_payment_express_test.rb +136 -0
- data/test/remote/gateways/remote_paymentech_orbital_test.rb +57 -0
- data/test/remote/gateways/remote_paypal_express_test.rb +49 -0
- data/test/remote/gateways/remote_paypal_test.rb +167 -0
- data/test/remote/gateways/remote_plugnpay_test.rb +72 -0
- data/test/remote/gateways/remote_protx_test.rb +219 -0
- data/test/remote/gateways/remote_psigate_test.rb +50 -0
- data/test/remote/gateways/remote_psl_card_test.rb +125 -0
- data/test/remote/gateways/remote_quickpay_test.rb +190 -0
- data/test/remote/gateways/remote_realex_test.rb +224 -0
- data/test/remote/gateways/remote_sage_bankcard_test.rb +109 -0
- data/test/remote/gateways/remote_sage_test.rb +87 -0
- data/test/remote/gateways/remote_sage_virtual_check_test.rb +62 -0
- data/test/remote/gateways/remote_secure_pay_au_test.rb +40 -0
- data/test/remote/gateways/remote_secure_pay_tech_test.rb +37 -0
- data/test/remote/gateways/remote_secure_pay_test.rb +28 -0
- data/test/remote/gateways/remote_skipjack_test.rb +105 -0
- data/test/remote/gateways/remote_trans_first_test.rb +34 -0
- data/test/remote/gateways/remote_transax_test.rb +112 -0
- data/test/remote/gateways/remote_trust_commerce_test.rb +152 -0
- data/test/remote/gateways/remote_usa_epay_test.rb +46 -0
- data/test/remote/gateways/remote_verifi_test.rb +107 -0
- data/test/remote/gateways/remote_viaklix_test.rb +43 -0
- data/test/remote/gateways/remote_wirecard_test.rb +111 -0
- data/test/remote/integrations/remote_gestpay_integration_test.rb +37 -0
- data/test/remote/integrations/remote_paypal_integration_test.rb +26 -0
- data/test/test_helper.rb +182 -0
- data/test/unit/avs_result_test.rb +59 -0
- data/test/unit/base_test.rb +55 -0
- data/test/unit/check_test.rb +88 -0
- data/test/unit/connection_test.rb +129 -0
- data/test/unit/country_code_test.rb +33 -0
- data/test/unit/country_test.rb +64 -0
- data/test/unit/credit_card_formatting_test.rb +19 -0
- data/test/unit/credit_card_methods_test.rb +170 -0
- data/test/unit/credit_card_test.rb +318 -0
- data/test/unit/cvv_result_test.rb +33 -0
- data/test/unit/expiry_date_test.rb +32 -0
- data/test/unit/gateways/authorize_net_cim_test.rb +638 -0
- data/test/unit/gateways/authorize_net_test.rb +290 -0
- data/test/unit/gateways/beanstream_interac_test.rb +51 -0
- data/test/unit/gateways/beanstream_test.rb +108 -0
- data/test/unit/gateways/bogus_test.rb +46 -0
- data/test/unit/gateways/braintree_test.rb +126 -0
- data/test/unit/gateways/card_stream_test.rb +90 -0
- data/test/unit/gateways/cyber_source_test.rb +188 -0
- data/test/unit/gateways/data_cash_test.rb +133 -0
- data/test/unit/gateways/efsnet_test.rb +123 -0
- data/test/unit/gateways/eway_test.rb +118 -0
- data/test/unit/gateways/exact_test.rb +156 -0
- data/test/unit/gateways/gateway_test.rb +48 -0
- data/test/unit/gateways/instapay_test.rb +102 -0
- data/test/unit/gateways/linkpoint_test.rb +167 -0
- data/test/unit/gateways/merchant_e_solutions_test.rb +169 -0
- data/test/unit/gateways/merchant_ware_test.rb +188 -0
- data/test/unit/gateways/modern_payments_cim_test.rb +171 -0
- data/test/unit/gateways/moneris_test.rb +158 -0
- data/test/unit/gateways/net_registry_test.rb +416 -0
- data/test/unit/gateways/netbilling_test.rb +54 -0
- data/test/unit/gateways/pay_junction_test.rb +123 -0
- data/test/unit/gateways/pay_secure_test.rb +71 -0
- data/test/unit/gateways/payflow_express_test.rb +173 -0
- data/test/unit/gateways/payflow_express_uk_test.rb +86 -0
- data/test/unit/gateways/payflow_test.rb +305 -0
- data/test/unit/gateways/payflow_uk_test.rb +30 -0
- data/test/unit/gateways/payment_express_test.rb +195 -0
- data/test/unit/gateways/paymentech_orbital_test.rb +117 -0
- data/test/unit/gateways/paypal_express_test.rb +382 -0
- data/test/unit/gateways/paypal_test.rb +520 -0
- data/test/unit/gateways/plugnpay_test.rb +86 -0
- data/test/unit/gateways/protx_test.rb +139 -0
- data/test/unit/gateways/psigate_test.rb +169 -0
- data/test/unit/gateways/psl_card_test.rb +64 -0
- data/test/unit/gateways/quickpay_test.rb +112 -0
- data/test/unit/gateways/realex_test.rb +151 -0
- data/test/unit/gateways/sage_bankcard_test.rb +162 -0
- data/test/unit/gateways/sage_virtual_check_test.rb +71 -0
- data/test/unit/gateways/secure_pay_au_test.rb +207 -0
- data/test/unit/gateways/secure_pay_tech_test.rb +44 -0
- data/test/unit/gateways/secure_pay_test.rb +87 -0
- data/test/unit/gateways/skip_jack_test.rb +133 -0
- data/test/unit/gateways/trans_first_test.rb +112 -0
- data/test/unit/gateways/trust_commerce_test.rb +90 -0
- data/test/unit/gateways/usa_epay_test.rb +128 -0
- data/test/unit/gateways/verifi_test.rb +96 -0
- data/test/unit/gateways/viaklix_test.rb +78 -0
- data/test/unit/gateways/wirecard_test.rb +250 -0
- data/test/unit/generators/test_gateway_generator.rb +46 -0
- data/test/unit/generators/test_generator_helper.rb +20 -0
- data/test/unit/generators/test_integration_generator.rb +53 -0
- data/test/unit/integrations/action_view_helper_test.rb +50 -0
- data/test/unit/integrations/bogus_module_test.rb +20 -0
- data/test/unit/integrations/chronopay_module_test.rb +13 -0
- data/test/unit/integrations/gestpay_module_test.rb +14 -0
- data/test/unit/integrations/helpers/bogus_helper_test.rb +28 -0
- data/test/unit/integrations/helpers/chronopay_helper_test.rb +67 -0
- data/test/unit/integrations/helpers/gestpay_helper_test.rb +100 -0
- data/test/unit/integrations/helpers/hi_trust_helper_test.rb +16 -0
- data/test/unit/integrations/helpers/nochex_helper_test.rb +53 -0
- data/test/unit/integrations/helpers/paypal_helper_test.rb +162 -0
- data/test/unit/integrations/helpers/quickpay_helper_test.rb +40 -0
- data/test/unit/integrations/helpers/two_checkout_helper_test.rb +92 -0
- data/test/unit/integrations/hi_trust_module_test.rb +13 -0
- data/test/unit/integrations/nochex_module_test.rb +13 -0
- data/test/unit/integrations/notifications/chronopay_notification_test.rb +66 -0
- data/test/unit/integrations/notifications/gestpay_notification_test.rb +60 -0
- data/test/unit/integrations/notifications/hi_trust_notification_test.rb +59 -0
- data/test/unit/integrations/notifications/nochex_notification_test.rb +51 -0
- data/test/unit/integrations/notifications/notification_test.rb +54 -0
- data/test/unit/integrations/notifications/paypal_notification_test.rb +85 -0
- data/test/unit/integrations/notifications/quickpay_notification_test.rb +69 -0
- data/test/unit/integrations/notifications/two_checkout_notification_test.rb +55 -0
- data/test/unit/integrations/paypal_module_test.rb +28 -0
- data/test/unit/integrations/quickpay_module_test.rb +9 -0
- data/test/unit/integrations/returns/chronopay_return_test.rb +11 -0
- data/test/unit/integrations/returns/gestpay_return_test.rb +10 -0
- data/test/unit/integrations/returns/hi_trust_return_test.rb +24 -0
- data/test/unit/integrations/returns/nochex_return_test.rb +10 -0
- data/test/unit/integrations/returns/paypal_return_test.rb +10 -0
- data/test/unit/integrations/returns/return_test.rb +11 -0
- data/test/unit/integrations/returns/two_checkout_return_test.rb +24 -0
- data/test/unit/integrations/two_checkout_module_test.rb +13 -0
- data/test/unit/post_data_test.rb +55 -0
- data/test/unit/posts_data_test.rb +48 -0
- data/test/unit/response_test.rb +28 -0
- data/test/unit/utils_test.rb +7 -0
- data/test/unit/validateable_test.rb +60 -0
- metadata +503 -0
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/sage_core'
|
|
2
|
+
|
|
3
|
+
module ActiveMerchant #:nodoc:
|
|
4
|
+
module Billing #:nodoc:
|
|
5
|
+
class SageVirtualCheckGateway < Gateway #:nodoc:
|
|
6
|
+
include SageCore
|
|
7
|
+
self.url = 'https://www.sagepayments.net/cgi-bin/eftVirtualCheck.dll?transaction'
|
|
8
|
+
self.source = 'virtual_check'
|
|
9
|
+
|
|
10
|
+
def purchase(money, credit_card, options = {})
|
|
11
|
+
post = {}
|
|
12
|
+
add_check(post, credit_card)
|
|
13
|
+
add_check_customer_data(post, options)
|
|
14
|
+
add_transaction_data(post, money, options)
|
|
15
|
+
commit(:purchase, post)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def void(reference, options = {})
|
|
19
|
+
post = {}
|
|
20
|
+
add_reference(post, reference)
|
|
21
|
+
commit(:void, post)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def credit(money, credit_card, options = {})
|
|
25
|
+
post = {}
|
|
26
|
+
add_check(post, credit_card)
|
|
27
|
+
add_check_customer_data(post, options)
|
|
28
|
+
add_transaction_data(post, money, options)
|
|
29
|
+
commit(:credit, post)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
private
|
|
33
|
+
def add_check(post, check)
|
|
34
|
+
post[:C_first_name] = check.first_name
|
|
35
|
+
post[:C_last_name] = check.last_name
|
|
36
|
+
post[:C_rte] = check.routing_number
|
|
37
|
+
post[:C_acct] = check.account_number
|
|
38
|
+
post[:C_check_number] = check.number
|
|
39
|
+
post[:C_acct_type] = account_type(check)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def add_check_customer_data(post, options)
|
|
43
|
+
# Required Customer Type – (NACHA Transaction Class)
|
|
44
|
+
# CCD for Commercial, Merchant Initiated
|
|
45
|
+
# PPD for Personal, Merchant Initiated
|
|
46
|
+
# WEB for Internet, Consumer Initiated
|
|
47
|
+
# RCK for Returned Checks
|
|
48
|
+
# ARC for Account Receivable Entry
|
|
49
|
+
# TEL for TelephoneInitiated
|
|
50
|
+
post[:C_customer_type] = "WEB"
|
|
51
|
+
|
|
52
|
+
# Optional 10 Digit Originator ID – Assigned By for each transaction class or business purpose. If not provided, the default Originator ID for the specific Customer Type will be applied.
|
|
53
|
+
post[:C_originator_id] = options[:originator_id]
|
|
54
|
+
|
|
55
|
+
# Optional Transaction Addenda
|
|
56
|
+
post[:T_addenda] = options[:addenda]
|
|
57
|
+
|
|
58
|
+
# Required Check Writer Social Security Number ( Numbers Only, No Dashes )
|
|
59
|
+
post[:C_ssn] = options[:ssn].to_s.gsub(/[^\d]/, '')
|
|
60
|
+
|
|
61
|
+
post[:C_dl_state_code] = options[:drivers_license_state]
|
|
62
|
+
post[:C_dl_number] = options[:drivers_license_number]
|
|
63
|
+
post[:C_dob] = format_birth_date(options[:date_of_birth])
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def format_birth_date(date)
|
|
67
|
+
date.respond_to?(:strftime) ? date.strftime("%m/%d/%Y") : date
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# DDA for Checking
|
|
71
|
+
# SAV for Savings
|
|
72
|
+
def account_type(check)
|
|
73
|
+
case check.account_type
|
|
74
|
+
when 'checking' then 'DDA'
|
|
75
|
+
when 'savings' then 'SAV'
|
|
76
|
+
else raise ArgumentError, "Unknown account type #{check.account_type}"
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def parse(data)
|
|
81
|
+
response = {}
|
|
82
|
+
response[:success] = data[1,1]
|
|
83
|
+
response[:code] = data[2,6].strip
|
|
84
|
+
response[:message] = data[8,32].strip
|
|
85
|
+
response[:risk] = data[40, 2]
|
|
86
|
+
response[:reference] = data[42, 10]
|
|
87
|
+
|
|
88
|
+
extra_data = data[53...-1].split("\034")
|
|
89
|
+
response[:order_number] = extra_data[0]
|
|
90
|
+
response[:authentication_indicator] = extra_data[1]
|
|
91
|
+
response[:authentication_disclosure] = extra_data[2]
|
|
92
|
+
response
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/sage/sage_bankcard'
|
|
2
|
+
require File.dirname(__FILE__) + '/sage/sage_virtual_check'
|
|
3
|
+
|
|
4
|
+
module ActiveMerchant #:nodoc:
|
|
5
|
+
module Billing #:nodoc:
|
|
6
|
+
class SageGateway < Gateway
|
|
7
|
+
self.supported_countries = SageBankcardGateway.supported_countries
|
|
8
|
+
self.supported_cardtypes = SageBankcardGateway.supported_cardtypes
|
|
9
|
+
|
|
10
|
+
# Creates a new SageGateway
|
|
11
|
+
#
|
|
12
|
+
# The gateway requires that a valid login and password be passed
|
|
13
|
+
# in the +options+ hash.
|
|
14
|
+
#
|
|
15
|
+
# ==== Options
|
|
16
|
+
#
|
|
17
|
+
# * <tt>:login</tt> - The Sage Payment Solutions Merchant ID Number.
|
|
18
|
+
# * <tt>:password</tt> - The Sage Payment Solutions Merchant Key Number.
|
|
19
|
+
def initialize(options = {})
|
|
20
|
+
requires!(options, :login, :password)
|
|
21
|
+
@options = options
|
|
22
|
+
super
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Performs an authorization transaction
|
|
26
|
+
#
|
|
27
|
+
# ==== Parameters
|
|
28
|
+
# * <tt>money</tt> - The amount to be authorized as an integer value in cents.
|
|
29
|
+
# * <tt>credit_card</tt> - The CreditCard object to be used as the funding source for the transaction.
|
|
30
|
+
# * <tt>options</tt> - A hash of optional parameters.
|
|
31
|
+
# * <tt>:order_id</tt> - A unique reference for this order. (maximum of 20 characters).
|
|
32
|
+
# * <tt>:email</tt> - The customer's email address
|
|
33
|
+
# * <tt>:customer</tt> - The Customer Number for Purchase Card Level II Transactions
|
|
34
|
+
# * <tt>:billing_address</tt> - The customer's billing address as a hash of address information.
|
|
35
|
+
# * <tt>:address1</tt> - The billing address street
|
|
36
|
+
# * <tt>:city</tt> - The billing address city
|
|
37
|
+
# * <tt>:state</tt> - The billing address state
|
|
38
|
+
# * <tt>:country</tt> - The 2 digit ISO billing address country code
|
|
39
|
+
# * <tt>:zip</tt> - The billing address zip code
|
|
40
|
+
# * <tt>:phone</tt> - The billing address phone number
|
|
41
|
+
# * <tt>:fax</tt> - The billing address fax number
|
|
42
|
+
# * <tt>:shipping_address</tt> - The customer's shipping address as a hash of address information.
|
|
43
|
+
# * <tt>:name</tt> - The name at the shipping address
|
|
44
|
+
# * <tt>:address1</tt> - The shipping address street
|
|
45
|
+
# * <tt>:city</tt> - The shipping address city
|
|
46
|
+
# * <tt>:state</tt> - The shipping address state code
|
|
47
|
+
# * <tt>:country</tt> - The 2 digit ISO shipping address country code
|
|
48
|
+
# * <tt>:zip</tt> - The shipping address zip code
|
|
49
|
+
# * <tt>:tax</tt> - The tax amount for the transaction as an Integer value in cents. Maps to Sage <tt>T_tax</tt>.
|
|
50
|
+
# * <tt>:shipping</tt> - The shipping amount for the transaction as an Integer value in cents. Maps to Sage <tt>T_shipping</tt>.
|
|
51
|
+
def authorize(money, credit_card, options = {})
|
|
52
|
+
bankcard.authorize(money, credit_card, options)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Performs a purchase, which is essentially an authorization and capture in a single operation.
|
|
56
|
+
#
|
|
57
|
+
# ==== Parameters
|
|
58
|
+
#
|
|
59
|
+
# * <tt>money</tt> - The amount to be authorized as an integer value in cents.
|
|
60
|
+
# * <tt>source</tt> - The CreditCard or Check object to be used as the funding source for the transaction.
|
|
61
|
+
# * <tt>options</tt> - A hash of optional parameters.
|
|
62
|
+
# * <tt>:order_id</tt> - A unique reference for this order. (maximum of 20 characters).
|
|
63
|
+
# * <tt>:email</tt> - The customer's email address
|
|
64
|
+
# * <tt>:customer</tt> - The Customer Number for Purchase Card Level II Transactions
|
|
65
|
+
# * <tt>:billing_address</tt> - The customer's billing address as a hash of address information.
|
|
66
|
+
# * <tt>:address1</tt> - The billing address street
|
|
67
|
+
# * <tt>:city</tt> - The billing address city
|
|
68
|
+
# * <tt>:state</tt> - The billing address state
|
|
69
|
+
# * <tt>:country</tt> - The 2 digit ISO billing address country code
|
|
70
|
+
# * <tt>:zip</tt> - The billing address zip code
|
|
71
|
+
# * <tt>:phone</tt> - The billing address phone number
|
|
72
|
+
# * <tt>:fax</tt> - The billing address fax number
|
|
73
|
+
# * <tt>:shipping_address</tt> - The customer's shipping address as a hash of address information.
|
|
74
|
+
# * <tt>:name</tt> - The name at the shipping address
|
|
75
|
+
# * <tt>:address1</tt> - The shipping address street
|
|
76
|
+
# * <tt>:city</tt> - The shipping address city
|
|
77
|
+
# * <tt>:state</tt> - The shipping address state code
|
|
78
|
+
# * <tt>:country</tt> - The 2 digit ISO shipping address country code
|
|
79
|
+
# * <tt>:zip</tt> - The shipping address zip code
|
|
80
|
+
# * <tt>:tax</tt> - The tax amount for the transaction as an integer value in cents. Maps to Sage <tt>T_tax</tt>.
|
|
81
|
+
# * <tt>:shipping</tt> - The shipping amount for the transaction as an integer value in cents. Maps to Sage <tt>T_shipping</tt>.
|
|
82
|
+
#
|
|
83
|
+
# ==== Additional options in the +options+ hash for when using a Check as the funding source
|
|
84
|
+
# * <tt>:originator_id</tt> - 10 digit originator. If not provided, Sage will use the default Originator ID for the specific customer type.
|
|
85
|
+
# * <tt>:addenda</tt> - Transaction addenda.
|
|
86
|
+
# * <tt>:ssn</tt> - The customer's Social Security Number.
|
|
87
|
+
# * <tt>:drivers_license_state</tt> - The customer's drivers license state code.
|
|
88
|
+
# * <tt>:drivers_license_number</tt> - The customer's drivers license number.
|
|
89
|
+
# * <tt>:date_of_birth</tt> - The customer's date of birth as a Time or Date object or a string in the format <tt>mm/dd/yyyy</tt>.
|
|
90
|
+
def purchase(money, source, options = {})
|
|
91
|
+
if source.type == "check"
|
|
92
|
+
virtual_check.purchase(money, source, options)
|
|
93
|
+
else
|
|
94
|
+
bankcard.purchase(money, source, options)
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# Captures authorized funds.
|
|
99
|
+
#
|
|
100
|
+
# ==== Parameters
|
|
101
|
+
#
|
|
102
|
+
# * <tt>money</tt> - The amount to be authorized as an integer value in cents. Sage doesn't support changing the capture amount, so the full amount of the initial transaction will be captured.
|
|
103
|
+
# * <tt>reference</tt> - The authorization reference string returned by the original transaction's Response#authorization.
|
|
104
|
+
def capture(money, reference, options = {})
|
|
105
|
+
bankcard.capture(money, reference, options)
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
# Voids a prior transaction. Works for both CreditCard and Check transactions.
|
|
109
|
+
#
|
|
110
|
+
# ==== Parameters
|
|
111
|
+
#
|
|
112
|
+
# * <tt>reference</tt> - The authorization reference string returned by the original transaction's Response#authorization.
|
|
113
|
+
def void(reference, options = {})
|
|
114
|
+
if reference.split(";").last == "virtual_check"
|
|
115
|
+
virtual_check.void(reference, options)
|
|
116
|
+
else
|
|
117
|
+
bankcard.void(reference, options)
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
# Performs a credit transaction. (Sage +Credit+ transaction).
|
|
122
|
+
#
|
|
123
|
+
# ==== Parameters
|
|
124
|
+
#
|
|
125
|
+
# * <tt>money</tt> - The amount to be authorized as an integer value in cents.
|
|
126
|
+
# * <tt>source</tt> - The CreditCard or Check object to be used as the target for the credit.
|
|
127
|
+
def credit(money, source, options = {})
|
|
128
|
+
if source.type == "check"
|
|
129
|
+
virtual_check.credit(money, source, options)
|
|
130
|
+
else
|
|
131
|
+
bankcard.credit(money, source, options)
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
private
|
|
136
|
+
def bankcard
|
|
137
|
+
@bankcard ||= SageBankcardGateway.new(@options)
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def virtual_check
|
|
141
|
+
@virtual_check ||= SageVirtualCheckGateway.new(@options)
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/authorize_net'
|
|
2
|
+
|
|
3
|
+
module ActiveMerchant #:nodoc:
|
|
4
|
+
module Billing #:nodoc:
|
|
5
|
+
class SecurePayGateway < AuthorizeNetGateway
|
|
6
|
+
self.live_url = self.test_url = 'https://www.securepay.com/AuthSpayAdapter/process.aspx'
|
|
7
|
+
|
|
8
|
+
self.homepage_url = 'http://www.securepay.com/'
|
|
9
|
+
self.display_name = 'SecurePay'
|
|
10
|
+
|
|
11
|
+
# Limit support to purchase() for the time being
|
|
12
|
+
# JRuby chokes here
|
|
13
|
+
# undef_method :authorize, :capture, :void, :credit
|
|
14
|
+
|
|
15
|
+
undef_method :authorize
|
|
16
|
+
undef_method :capture
|
|
17
|
+
undef_method :void
|
|
18
|
+
undef_method :credit
|
|
19
|
+
|
|
20
|
+
def test?
|
|
21
|
+
Base.gateway_mode == :test
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
private
|
|
25
|
+
def split(response)
|
|
26
|
+
response.split('%')
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
require 'rexml/document'
|
|
2
|
+
|
|
3
|
+
module ActiveMerchant #:nodoc:
|
|
4
|
+
module Billing #:nodoc:
|
|
5
|
+
class SecurePayAuGateway < Gateway
|
|
6
|
+
API_VERSION = 'xml-4.2'
|
|
7
|
+
|
|
8
|
+
TEST_URL = 'https://www.securepay.com.au/test/payment'
|
|
9
|
+
LIVE_URL = 'https://www.securepay.com.au/xmlapi/payment'
|
|
10
|
+
|
|
11
|
+
self.supported_countries = ['AU']
|
|
12
|
+
self.supported_cardtypes = [:visa, :master, :american_express, :diners_club, :jcb]
|
|
13
|
+
|
|
14
|
+
# The homepage URL of the gateway
|
|
15
|
+
self.homepage_url = 'http://securepay.com.au'
|
|
16
|
+
|
|
17
|
+
# The name of the gateway
|
|
18
|
+
self.display_name = 'SecurePay'
|
|
19
|
+
|
|
20
|
+
class_inheritable_accessor :request_timeout
|
|
21
|
+
self.request_timeout = 60
|
|
22
|
+
|
|
23
|
+
self.money_format = :cents
|
|
24
|
+
self.default_currency = 'AUD'
|
|
25
|
+
|
|
26
|
+
# 0 Standard Payment
|
|
27
|
+
# 4 Refund
|
|
28
|
+
# 6 Client Reversal (Void)
|
|
29
|
+
# 10 Preauthorise
|
|
30
|
+
# 11 Preauth Complete (Advice)
|
|
31
|
+
TRANSACTIONS = {
|
|
32
|
+
:purchase => 0,
|
|
33
|
+
:authorization => 10,
|
|
34
|
+
:capture => 11,
|
|
35
|
+
:void => 6,
|
|
36
|
+
:credit => 4
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
SUCCESS_CODES = [ '00', '08', '11', '16', '77' ]
|
|
40
|
+
|
|
41
|
+
def initialize(options = {})
|
|
42
|
+
requires!(options, :login, :password)
|
|
43
|
+
@options = options
|
|
44
|
+
super
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def test?
|
|
48
|
+
@options[:test] || super
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def purchase(money, credit_card, options = {})
|
|
52
|
+
commit :purchase, build_purchase_request(money, credit_card, options)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
private
|
|
56
|
+
|
|
57
|
+
def build_purchase_request(money, credit_card, options)
|
|
58
|
+
xml = Builder::XmlMarkup.new
|
|
59
|
+
|
|
60
|
+
xml.tag! 'amount', amount(money)
|
|
61
|
+
xml.tag! 'currency', options[:currency] || currency(money)
|
|
62
|
+
xml.tag! 'purchaseOrderNo', options[:order_id].to_s.gsub(/[ ']/, '')
|
|
63
|
+
|
|
64
|
+
xml.tag! 'CreditCardInfo' do
|
|
65
|
+
xml.tag! 'cardNumber', credit_card.number
|
|
66
|
+
xml.tag! 'expiryDate', expdate(credit_card)
|
|
67
|
+
xml.tag! 'cvv', credit_card.verification_value if credit_card.verification_value?
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
xml.target!
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def build_request(action, body)
|
|
74
|
+
xml = Builder::XmlMarkup.new
|
|
75
|
+
xml.instruct!
|
|
76
|
+
xml.tag! 'SecurePayMessage' do
|
|
77
|
+
xml.tag! 'MessageInfo' do
|
|
78
|
+
xml.tag! 'messageID', Utils.generate_unique_id.slice(0, 30)
|
|
79
|
+
xml.tag! 'messageTimestamp', generate_timestamp
|
|
80
|
+
xml.tag! 'timeoutValue', request_timeout
|
|
81
|
+
xml.tag! 'apiVersion', API_VERSION
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
xml.tag! 'MerchantInfo' do
|
|
85
|
+
xml.tag! 'merchantID', @options[:login]
|
|
86
|
+
xml.tag! 'password', @options[:password]
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
xml.tag! 'RequestType', 'Payment'
|
|
90
|
+
xml.tag! 'Payment' do
|
|
91
|
+
xml.tag! 'TxnList', "count" => 1 do
|
|
92
|
+
xml.tag! 'Txn', "ID" => 1 do
|
|
93
|
+
xml.tag! 'txnType', TRANSACTIONS[action]
|
|
94
|
+
xml.tag! 'txnSource', 23
|
|
95
|
+
xml << body
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
xml.target!
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def commit(action, request)
|
|
105
|
+
response = parse(ssl_post(test? ? TEST_URL : LIVE_URL, build_request(action, request)))
|
|
106
|
+
|
|
107
|
+
Response.new(success?(response), message_from(response), response,
|
|
108
|
+
:test => test?,
|
|
109
|
+
:authorization => authorization_from(response)
|
|
110
|
+
)
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def success?(response)
|
|
114
|
+
SUCCESS_CODES.include?(response[:response_code])
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def authorization_from(response)
|
|
118
|
+
response[:txn_id]
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def message_from(response)
|
|
122
|
+
response[:response_text] || response[:status_description]
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def expdate(credit_card)
|
|
126
|
+
"#{format(credit_card.month, :two_digits)}/#{format(credit_card.year, :two_digits)}"
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def parse(body)
|
|
130
|
+
xml = REXML::Document.new(body)
|
|
131
|
+
|
|
132
|
+
response = {}
|
|
133
|
+
|
|
134
|
+
xml.root.elements.to_a.each do |node|
|
|
135
|
+
parse_element(response, node)
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
response
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def parse_element(response, node)
|
|
142
|
+
if node.has_elements?
|
|
143
|
+
node.elements.each{|element| parse_element(response, element) }
|
|
144
|
+
else
|
|
145
|
+
response[node.name.underscore.to_sym] = node.text
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
# YYYYDDMMHHNNSSKKK000sOOO
|
|
150
|
+
def generate_timestamp
|
|
151
|
+
time = Time.now.utc
|
|
152
|
+
time.strftime("%Y%d%m%H%M%S#{time.usec}+000")
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
module ActiveMerchant #:nodoc:
|
|
2
|
+
module Billing #:nodoc:
|
|
3
|
+
class SecurePayTechGateway < Gateway
|
|
4
|
+
class SecurePayTechPostData < PostData
|
|
5
|
+
self.required_fields = [ :OrderReference, :CardNumber, :CardExpiry, :CardHolderName, :CardType, :MerchantID, :MerchantKey, :Amount, :Currency ]
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
URL = 'https://tx.securepaytech.com/web/HttpPostPurchase'
|
|
9
|
+
|
|
10
|
+
PAYMENT_GATEWAY_RESPONSES = {
|
|
11
|
+
1 => "Transaction OK",
|
|
12
|
+
2 => "Insufficient funds",
|
|
13
|
+
3 => "Card expired",
|
|
14
|
+
4 => "Card declined",
|
|
15
|
+
5 => "Server error",
|
|
16
|
+
6 => "Communications error",
|
|
17
|
+
7 => "Unsupported transaction type",
|
|
18
|
+
8 => "Bad or malformed request",
|
|
19
|
+
9 => "Invalid card number"
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
self.default_currency = 'NZD'
|
|
23
|
+
self.supported_countries = ['NZ']
|
|
24
|
+
self.supported_cardtypes = [:visa, :master, :american_express, :diners_club]
|
|
25
|
+
self.homepage_url = 'http://www.securepaytech.com/'
|
|
26
|
+
self.display_name = 'SecurePayTech'
|
|
27
|
+
|
|
28
|
+
def initialize(options = {})
|
|
29
|
+
requires!(options, :login, :password)
|
|
30
|
+
@options = options
|
|
31
|
+
super
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def purchase(money, creditcard, options = {})
|
|
35
|
+
post = SecurePayTechPostData.new
|
|
36
|
+
|
|
37
|
+
add_invoice(post, money, options)
|
|
38
|
+
add_creditcard(post, creditcard)
|
|
39
|
+
|
|
40
|
+
commit(:purchase, post)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
private
|
|
44
|
+
|
|
45
|
+
def add_invoice(post, money, options)
|
|
46
|
+
post[:Amount] = amount(money)
|
|
47
|
+
post[:Currency] = options[:currency] || currency(money)
|
|
48
|
+
|
|
49
|
+
post[:OrderReference] = options[:order_id]
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def add_creditcard(post, creditcard)
|
|
53
|
+
post[:CardNumber] = creditcard.number
|
|
54
|
+
post[:CardExpiry] = expdate(creditcard)
|
|
55
|
+
post[:CardHolderName] = creditcard.name
|
|
56
|
+
|
|
57
|
+
if creditcard.verification_value?
|
|
58
|
+
post[:EnableCSC] = 1
|
|
59
|
+
post[:CSC] = creditcard.verification_value
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# SPT will autodetect this
|
|
63
|
+
post[:CardType] = 0
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def parse(body)
|
|
67
|
+
response = CGI.unescape(body).split(',')
|
|
68
|
+
|
|
69
|
+
result = {}
|
|
70
|
+
result[:result_code] = response[0].to_i
|
|
71
|
+
|
|
72
|
+
if response.length == 2
|
|
73
|
+
result[:fail_reason] = response[1]
|
|
74
|
+
else
|
|
75
|
+
result[:merchant_transaction_reference] = response[1]
|
|
76
|
+
result[:receipt_number] = response[2]
|
|
77
|
+
result[:transaction_number] = response[3]
|
|
78
|
+
result[:authorisation_id] = response[4]
|
|
79
|
+
result[:batch_number] = response[5]
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
result
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def commit(action, post)
|
|
86
|
+
response = parse( ssl_post(URL, post_data(action, post) ) )
|
|
87
|
+
|
|
88
|
+
Response.new(response[:result_code] == 1, message_from(response), response,
|
|
89
|
+
:test => test?,
|
|
90
|
+
:authorization => response[:merchant_transaction_reference]
|
|
91
|
+
)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def message_from(result)
|
|
95
|
+
PAYMENT_GATEWAY_RESPONSES[result[:result_code]]
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def post_data(action, post)
|
|
99
|
+
post[:MerchantID] = @options[:login]
|
|
100
|
+
post[:MerchantKey] = @options[:password]
|
|
101
|
+
post.to_s
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def expdate(creditcard)
|
|
105
|
+
year = sprintf("%.4i", creditcard.year)
|
|
106
|
+
month = sprintf("%.2i", creditcard.month)
|
|
107
|
+
|
|
108
|
+
"#{month}#{year[-2..-1]}"
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
|