fishman-activemerchant 1.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +733 -0
- data/CONTRIBUTORS +257 -0
- data/MIT-LICENSE +20 -0
- data/gem-public_cert.pem +20 -0
- data/lib/active_merchant.rb +47 -0
- data/lib/active_merchant/billing.rb +9 -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 +260 -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 +170 -0
- data/lib/active_merchant/billing/gateways.rb +18 -0
- data/lib/active_merchant/billing/gateways/authorize_net.rb +693 -0
- data/lib/active_merchant/billing/gateways/authorize_net_cim.rb +858 -0
- data/lib/active_merchant/billing/gateways/barclays_epdq.rb +308 -0
- data/lib/active_merchant/billing/gateways/beanstream.rb +139 -0
- data/lib/active_merchant/billing/gateways/beanstream/beanstream_core.rb +282 -0
- data/lib/active_merchant/billing/gateways/beanstream_interac.rb +54 -0
- data/lib/active_merchant/billing/gateways/blue_pay.rb +11 -0
- data/lib/active_merchant/billing/gateways/bogus.rb +142 -0
- data/lib/active_merchant/billing/gateways/braintree.rb +17 -0
- data/lib/active_merchant/billing/gateways/braintree/braintree_common.rb +9 -0
- data/lib/active_merchant/billing/gateways/braintree_blue.rb +303 -0
- data/lib/active_merchant/billing/gateways/braintree_orange.rb +17 -0
- data/lib/active_merchant/billing/gateways/card_save.rb +23 -0
- data/lib/active_merchant/billing/gateways/card_stream.rb +230 -0
- data/lib/active_merchant/billing/gateways/cyber_source.rb +430 -0
- data/lib/active_merchant/billing/gateways/data_cash.rb +597 -0
- data/lib/active_merchant/billing/gateways/efsnet.rb +235 -0
- data/lib/active_merchant/billing/gateways/elavon.rb +134 -0
- data/lib/active_merchant/billing/gateways/epay.rb +274 -0
- data/lib/active_merchant/billing/gateways/eway.rb +277 -0
- data/lib/active_merchant/billing/gateways/eway_managed.rb +264 -0
- data/lib/active_merchant/billing/gateways/exact.rb +222 -0
- data/lib/active_merchant/billing/gateways/federated_canada.rb +168 -0
- data/lib/active_merchant/billing/gateways/first_pay.rb +177 -0
- data/lib/active_merchant/billing/gateways/garanti.rb +262 -0
- data/lib/active_merchant/billing/gateways/ideal/ideal_base.rb +250 -0
- data/lib/active_merchant/billing/gateways/ideal/ideal_rabobank.pem +13 -0
- data/lib/active_merchant/billing/gateways/ideal/ideal_response.rb +29 -0
- data/lib/active_merchant/billing/gateways/ideal_rabobank.rb +55 -0
- data/lib/active_merchant/billing/gateways/inspire.rb +221 -0
- data/lib/active_merchant/billing/gateways/instapay.rb +164 -0
- data/lib/active_merchant/billing/gateways/iridium.rb +258 -0
- data/lib/active_merchant/billing/gateways/jetpay.rb +276 -0
- data/lib/active_merchant/billing/gateways/linkpoint.rb +454 -0
- data/lib/active_merchant/billing/gateways/merchant_e_solutions.rb +156 -0
- data/lib/active_merchant/billing/gateways/merchant_ware.rb +289 -0
- data/lib/active_merchant/billing/gateways/modern_payments.rb +36 -0
- data/lib/active_merchant/billing/gateways/modern_payments_cim.rb +220 -0
- data/lib/active_merchant/billing/gateways/moneris.rb +209 -0
- data/lib/active_merchant/billing/gateways/net_registry.rb +189 -0
- data/lib/active_merchant/billing/gateways/netaxept.rb +239 -0
- data/lib/active_merchant/billing/gateways/netbilling.rb +168 -0
- data/lib/active_merchant/billing/gateways/nmi.rb +13 -0
- data/lib/active_merchant/billing/gateways/ogone.rb +292 -0
- data/lib/active_merchant/billing/gateways/optimal_payment.rb +274 -0
- data/lib/active_merchant/billing/gateways/orbital.rb +321 -0
- data/lib/active_merchant/billing/gateways/orbital/orbital_soft_descriptors.rb +46 -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/paybox_direct.rb +207 -0
- data/lib/active_merchant/billing/gateways/payflow.rb +253 -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_express.rb +222 -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 +235 -0
- data/lib/active_merchant/billing/gateways/paypal.rb +121 -0
- data/lib/active_merchant/billing/gateways/paypal/paypal_common_api.rb +354 -0
- data/lib/active_merchant/billing/gateways/paypal/paypal_express_response.rb +49 -0
- data/lib/active_merchant/billing/gateways/paypal_ca.rb +13 -0
- data/lib/active_merchant/billing/gateways/paypal_express.rb +184 -0
- data/lib/active_merchant/billing/gateways/paypal_express_common.rb +25 -0
- data/lib/active_merchant/billing/gateways/paypal_express_de.rb +14 -0
- data/lib/active_merchant/billing/gateways/paystation.rb +201 -0
- data/lib/active_merchant/billing/gateways/plugnpay.rb +298 -0
- data/lib/active_merchant/billing/gateways/psigate.rb +219 -0
- data/lib/active_merchant/billing/gateways/psl_card.rb +304 -0
- data/lib/active_merchant/billing/gateways/qbms.rb +297 -0
- data/lib/active_merchant/billing/gateways/quantum.rb +282 -0
- data/lib/active_merchant/billing/gateways/quickpay.rb +297 -0
- data/lib/active_merchant/billing/gateways/realex.rb +311 -0
- data/lib/active_merchant/billing/gateways/sage.rb +146 -0
- data/lib/active_merchant/billing/gateways/sage/sage_bankcard.rb +88 -0
- data/lib/active_merchant/billing/gateways/sage/sage_core.rb +116 -0
- data/lib/active_merchant/billing/gateways/sage/sage_virtual_check.rb +97 -0
- data/lib/active_merchant/billing/gateways/sage_pay.rb +320 -0
- data/lib/active_merchant/billing/gateways/sallie_mae.rb +144 -0
- data/lib/active_merchant/billing/gateways/secure_net.rb +330 -0
- data/lib/active_merchant/billing/gateways/secure_pay.rb +31 -0
- data/lib/active_merchant/billing/gateways/secure_pay_au.rb +193 -0
- data/lib/active_merchant/billing/gateways/secure_pay_tech.rb +113 -0
- data/lib/active_merchant/billing/gateways/skip_jack.rb +453 -0
- data/lib/active_merchant/billing/gateways/smart_ps.rb +271 -0
- data/lib/active_merchant/billing/gateways/stripe.rb +212 -0
- data/lib/active_merchant/billing/gateways/trans_first.rb +127 -0
- data/lib/active_merchant/billing/gateways/transax.rb +25 -0
- data/lib/active_merchant/billing/gateways/trust_commerce.rb +423 -0
- data/lib/active_merchant/billing/gateways/usa_epay.rb +194 -0
- data/lib/active_merchant/billing/gateways/verifi.rb +233 -0
- data/lib/active_merchant/billing/gateways/viaklix.rb +189 -0
- data/lib/active_merchant/billing/gateways/wirecard.rb +318 -0
- data/lib/active_merchant/billing/gateways/worldpay.rb +280 -0
- data/lib/active_merchant/billing/integrations.rb +17 -0
- data/lib/active_merchant/billing/integrations/action_view_helper.rb +68 -0
- data/lib/active_merchant/billing/integrations/bogus.rb +23 -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/chronopay.rb +23 -0
- data/lib/active_merchant/billing/integrations/chronopay/helper.rb +120 -0
- data/lib/active_merchant/billing/integrations/chronopay/notification.rb +158 -0
- data/lib/active_merchant/billing/integrations/chronopay/return.rb +10 -0
- data/lib/active_merchant/billing/integrations/direc_pay.rb +41 -0
- data/lib/active_merchant/billing/integrations/direc_pay/helper.rb +200 -0
- data/lib/active_merchant/billing/integrations/direc_pay/notification.rb +76 -0
- data/lib/active_merchant/billing/integrations/direc_pay/return.rb +32 -0
- data/lib/active_merchant/billing/integrations/direc_pay/status.rb +37 -0
- data/lib/active_merchant/billing/integrations/directebanking.rb +47 -0
- data/lib/active_merchant/billing/integrations/directebanking/helper.rb +90 -0
- data/lib/active_merchant/billing/integrations/directebanking/notification.rb +120 -0
- data/lib/active_merchant/billing/integrations/directebanking/return.rb +11 -0
- data/lib/active_merchant/billing/integrations/dwolla.rb +30 -0
- data/lib/active_merchant/billing/integrations/dwolla/helper.rb +28 -0
- data/lib/active_merchant/billing/integrations/dwolla/notification.rb +50 -0
- data/lib/active_merchant/billing/integrations/dwolla/return.rb +38 -0
- data/lib/active_merchant/billing/integrations/e_payment_plans.rb +48 -0
- data/lib/active_merchant/billing/integrations/e_payment_plans/helper.rb +34 -0
- data/lib/active_merchant/billing/integrations/e_payment_plans/notification.rb +84 -0
- data/lib/active_merchant/billing/integrations/gestpay.rb +25 -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 +85 -0
- data/lib/active_merchant/billing/integrations/gestpay/return.rb +10 -0
- data/lib/active_merchant/billing/integrations/helper.rb +96 -0
- data/lib/active_merchant/billing/integrations/hi_trust.rb +27 -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/moneybookers.rb +26 -0
- data/lib/active_merchant/billing/integrations/moneybookers/helper.rb +59 -0
- data/lib/active_merchant/billing/integrations/moneybookers/notification.rb +129 -0
- data/lib/active_merchant/billing/integrations/nochex.rb +88 -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/notification.rb +62 -0
- data/lib/active_merchant/billing/integrations/payflow_link.rb +21 -0
- data/lib/active_merchant/billing/integrations/payflow_link/helper.rb +58 -0
- data/lib/active_merchant/billing/integrations/payflow_link/notification.rb +78 -0
- data/lib/active_merchant/billing/integrations/paypal.rb +39 -0
- data/lib/active_merchant/billing/integrations/paypal/helper.rb +119 -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/quickpay.rb +21 -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/return.rb +42 -0
- data/lib/active_merchant/billing/integrations/sage_pay_form.rb +37 -0
- data/lib/active_merchant/billing/integrations/sage_pay_form/encryption.rb +33 -0
- data/lib/active_merchant/billing/integrations/sage_pay_form/helper.rb +111 -0
- data/lib/active_merchant/billing/integrations/sage_pay_form/notification.rb +210 -0
- data/lib/active_merchant/billing/integrations/sage_pay_form/return.rb +31 -0
- data/lib/active_merchant/billing/integrations/two_checkout.rb +23 -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/valitor.rb +33 -0
- data/lib/active_merchant/billing/integrations/valitor/helper.rb +86 -0
- data/lib/active_merchant/billing/integrations/valitor/notification.rb +13 -0
- data/lib/active_merchant/billing/integrations/valitor/response_fields.rb +97 -0
- data/lib/active_merchant/billing/integrations/valitor/return.rb +13 -0
- data/lib/active_merchant/billing/integrations/world_pay.rb +27 -0
- data/lib/active_merchant/billing/integrations/world_pay/helper.rb +100 -0
- data/lib/active_merchant/billing/integrations/world_pay/notification.rb +160 -0
- data/lib/active_merchant/billing/response.rb +32 -0
- data/lib/active_merchant/version.rb +3 -0
- data/lib/activemerchant.rb +1 -0
- data/lib/support/gateway_support.rb +58 -0
- data/lib/support/outbound_hosts.rb +25 -0
- metadata +335 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module ActiveMerchant #:nodoc:
|
|
2
|
+
module Billing #:nodoc:
|
|
3
|
+
module Integrations #:nodoc:
|
|
4
|
+
module TwoCheckout
|
|
5
|
+
class Return < ActiveMerchant::Billing::Integrations::Return
|
|
6
|
+
def success?
|
|
7
|
+
params['credit_card_processed'] == 'Y'
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def message
|
|
11
|
+
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
module ActiveMerchant #:nodoc:
|
|
2
|
+
module Billing #:nodoc:
|
|
3
|
+
module Integrations #:nodoc:
|
|
4
|
+
module Valitor
|
|
5
|
+
autoload :Return, 'active_merchant/billing/integrations/valitor/return.rb'
|
|
6
|
+
autoload :Helper, 'active_merchant/billing/integrations/valitor/helper.rb'
|
|
7
|
+
autoload :Notification, 'active_merchant/billing/integrations/valitor/notification.rb'
|
|
8
|
+
|
|
9
|
+
mattr_accessor :test_url
|
|
10
|
+
self.test_url = 'https://testvefverslun.valitor.is/1_1/'
|
|
11
|
+
|
|
12
|
+
mattr_accessor :production_url
|
|
13
|
+
self.production_url = 'https://vefverslun.valitor.is/1_1/'
|
|
14
|
+
|
|
15
|
+
def self.test?
|
|
16
|
+
(ActiveMerchant::Billing::Base.integration_mode == :test)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def self.service_url
|
|
20
|
+
(test? ? test_url : production_url)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def self.notification(params, options={})
|
|
24
|
+
Notification.new(params, options.merge(:test => test?))
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def self.return(query_string, options={})
|
|
28
|
+
Return.new(query_string, options.merge(:test => test?))
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
require 'digest/md5'
|
|
2
|
+
|
|
3
|
+
module ActiveMerchant #:nodoc:
|
|
4
|
+
module Billing #:nodoc:
|
|
5
|
+
module Integrations #:nodoc:
|
|
6
|
+
module Valitor
|
|
7
|
+
class Helper < ActiveMerchant::Billing::Integrations::Helper
|
|
8
|
+
include RequiresParameters
|
|
9
|
+
|
|
10
|
+
DEFAULT_SUCCESS_TEXT = "The transaction has been completed."
|
|
11
|
+
|
|
12
|
+
def initialize(order, account, options={})
|
|
13
|
+
options[:currency] ||= 'ISK'
|
|
14
|
+
super
|
|
15
|
+
add_field 'Adeinsheimild', '0'
|
|
16
|
+
add_field 'KaupandaUpplysingar', '0'
|
|
17
|
+
add_field 'SlokkvaHaus', '0'
|
|
18
|
+
@security_number = options[:credential2]
|
|
19
|
+
@amount = options[:amount]
|
|
20
|
+
@order = order
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
mapping :account, 'VefverslunID'
|
|
24
|
+
mapping :currency, 'Gjaldmidill'
|
|
25
|
+
|
|
26
|
+
mapping :order, 'Tilvisunarnumer'
|
|
27
|
+
|
|
28
|
+
mapping :notify_url, 'SlodTokstAdGjaldfaeraServerSide'
|
|
29
|
+
mapping :return_url, 'SlodTokstAdGjaldfaera'
|
|
30
|
+
mapping :cancel_return_url, 'SlodNotandiHaettirVid'
|
|
31
|
+
|
|
32
|
+
mapping :success_text, 'SlodTokstAdGjaldfaeraTexti'
|
|
33
|
+
|
|
34
|
+
mapping :language, 'Lang'
|
|
35
|
+
|
|
36
|
+
def authorize_only
|
|
37
|
+
add_field 'Adeinsheimild', '1'
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def collect_customer_info
|
|
41
|
+
add_field 'KaupandaUpplysingar', '1'
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def hide_header
|
|
45
|
+
add_field 'SlokkvaHaus', '1'
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def product(id, options={})
|
|
49
|
+
raise ArgumentError, "Product id #{id} is not an integer between 1 and 500" unless id.to_i > 0 && id.to_i <= 500
|
|
50
|
+
requires!(options, :amount, :description)
|
|
51
|
+
options.assert_valid_keys([:description, :quantity, :amount, :discount])
|
|
52
|
+
|
|
53
|
+
add_field("Vara_#{id}_Verd", format_amount(options[:amount]))
|
|
54
|
+
add_field("Vara_#{id}_Fjoldi", options[:quantity] || "1")
|
|
55
|
+
|
|
56
|
+
add_field("Vara_#{id}_Lysing", options[:description]) if options[:description]
|
|
57
|
+
add_field("Vara_#{id}_Afslattur", options[:discount] || '0')
|
|
58
|
+
|
|
59
|
+
@products ||= []
|
|
60
|
+
@products << id.to_i
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def signature
|
|
64
|
+
raise ArgumentError, "Security number not set" unless @security_number
|
|
65
|
+
parts = [@security_number, @fields['Adeinsheimild']]
|
|
66
|
+
@products.sort.uniq.each do |id|
|
|
67
|
+
parts.concat(["Vara_#{id}_Fjoldi", "Vara_#{id}_Verd", "Vara_#{id}_Afslattur"].collect{|e| @fields[e]})
|
|
68
|
+
end if @products
|
|
69
|
+
parts.concat(%w(VefverslunID Tilvisunarnumer SlodTokstAdGjaldfaera SlodTokstAdGjaldfaeraServerSide Gjaldmidill).collect{|e| @fields[e]})
|
|
70
|
+
Digest::MD5.hexdigest(parts.compact.join(''))
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def form_fields
|
|
74
|
+
product(1, :amount => @amount, :description => @order) if Array(@products).empty?
|
|
75
|
+
@fields[mappings[:success_text]] ||= DEFAULT_SUCCESS_TEXT
|
|
76
|
+
@fields.merge('RafraenUndirskrift' => signature)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def format_amount(amount)
|
|
80
|
+
amount.to_f.round
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
require 'active_merchant/billing/integrations/valitor/response_fields'
|
|
2
|
+
|
|
3
|
+
module ActiveMerchant #:nodoc:
|
|
4
|
+
module Billing #:nodoc:
|
|
5
|
+
module Integrations #:nodoc:
|
|
6
|
+
module Valitor
|
|
7
|
+
class Notification < ActiveMerchant::Billing::Integrations::Notification
|
|
8
|
+
include ResponseFields
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
require 'digest/md5'
|
|
2
|
+
|
|
3
|
+
module ActiveMerchant #:nodoc:
|
|
4
|
+
module Billing #:nodoc:
|
|
5
|
+
module Integrations #:nodoc:
|
|
6
|
+
module Valitor
|
|
7
|
+
module ResponseFields
|
|
8
|
+
def success?
|
|
9
|
+
status == 'Completed'
|
|
10
|
+
end
|
|
11
|
+
alias :complete? :success?
|
|
12
|
+
|
|
13
|
+
def test?
|
|
14
|
+
@options[:test]
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def item_id
|
|
18
|
+
params['Tilvisunarnumer']
|
|
19
|
+
end
|
|
20
|
+
alias :order :item_id
|
|
21
|
+
|
|
22
|
+
def transaction_id
|
|
23
|
+
params['VefverslunSalaID']
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def currency
|
|
27
|
+
nil
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def status
|
|
31
|
+
"Completed" if acknowledge
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def received_at
|
|
35
|
+
Time.parse(params['Dagsetning'].to_s)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def gross
|
|
39
|
+
"%0.2f" % params['Upphaed'].to_s
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def card_type
|
|
43
|
+
params['Kortategund']
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def card_last_four
|
|
47
|
+
params['KortnumerSidustu']
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def authorization_number
|
|
51
|
+
params['Heimildarnumer']
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def transaction_number
|
|
55
|
+
params['Faerslunumer']
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def customer_name
|
|
59
|
+
params['Nafn']
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def customer_address
|
|
63
|
+
params['Heimilisfang']
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def customer_zip
|
|
67
|
+
params['Postnumer']
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def customer_city
|
|
71
|
+
params['Stadur']
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def customer_country
|
|
75
|
+
params['Land']
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def customer_email
|
|
79
|
+
params['Tolvupostfang']
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def customer_comment
|
|
83
|
+
params['Athugasemdir']
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def password
|
|
87
|
+
@options[:credential2]
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def acknowledge
|
|
91
|
+
password ? Digest::MD5.hexdigest("#{password}#{order}") == params['RafraenUndirskriftSvar'] : true
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
require 'active_merchant/billing/integrations/valitor/response_fields'
|
|
2
|
+
|
|
3
|
+
module ActiveMerchant #:nodoc:
|
|
4
|
+
module Billing #:nodoc:
|
|
5
|
+
module Integrations #:nodoc:
|
|
6
|
+
module Valitor
|
|
7
|
+
class Return < ActiveMerchant::Billing::Integrations::Return
|
|
8
|
+
include ResponseFields
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/world_pay/helper.rb'
|
|
2
|
+
require File.dirname(__FILE__) + '/world_pay/notification.rb'
|
|
3
|
+
|
|
4
|
+
module ActiveMerchant #:nodoc:
|
|
5
|
+
module Billing #:nodoc:
|
|
6
|
+
module Integrations #:nodoc:
|
|
7
|
+
module WorldPay
|
|
8
|
+
|
|
9
|
+
# production and test have the same endpoint
|
|
10
|
+
mattr_accessor :production_url
|
|
11
|
+
self.production_url = 'https://secure.wp3.rbsworldpay.com/wcc/purchase'
|
|
12
|
+
|
|
13
|
+
def self.service_url
|
|
14
|
+
production_url
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def self.notification(post, options = {})
|
|
18
|
+
Notification.new(post, options)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def self.return(post, options = {})
|
|
22
|
+
Return.new(post, options)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
module ActiveMerchant #:nodoc:
|
|
2
|
+
module Billing #:nodoc:
|
|
3
|
+
module Integrations #:nodoc:
|
|
4
|
+
module WorldPay
|
|
5
|
+
class Helper < ActiveMerchant::Billing::Integrations::Helper
|
|
6
|
+
mapping :account, 'instId'
|
|
7
|
+
mapping :amount, 'amount'
|
|
8
|
+
mapping :order, 'cartId'
|
|
9
|
+
mapping :currency, 'currency'
|
|
10
|
+
|
|
11
|
+
mapping :customer, :email => 'email',
|
|
12
|
+
:phone => 'tel'
|
|
13
|
+
|
|
14
|
+
mapping :billing_address, :zip => 'postcode',
|
|
15
|
+
:country => 'country'
|
|
16
|
+
|
|
17
|
+
mapping :description, 'desc'
|
|
18
|
+
mapping :notify_url, 'MC_callback'
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
# WorldPay supports two different test modes - :always_succeed and :always_fail
|
|
22
|
+
def initialize(order, account, options = {})
|
|
23
|
+
super
|
|
24
|
+
|
|
25
|
+
if ActiveMerchant::Billing::Base.integration_mode == :test || options[:test]
|
|
26
|
+
test_mode = case options[:test]
|
|
27
|
+
when :always_fail
|
|
28
|
+
101
|
|
29
|
+
when false
|
|
30
|
+
0
|
|
31
|
+
else
|
|
32
|
+
100
|
|
33
|
+
end
|
|
34
|
+
add_field('testMode', test_mode.to_s)
|
|
35
|
+
elsif ActiveMerchant::Billing::Base.integration_mode == :always_succeed
|
|
36
|
+
add_field('testMode', '100')
|
|
37
|
+
elsif ActiveMerchant::Billing::Base.integration_mode == :always_fail
|
|
38
|
+
add_field('testMode', '101')
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# WorldPay only supports a single address field so we
|
|
43
|
+
# have to concat together - lines are separated using
|
|
44
|
+
def billing_address(params={})
|
|
45
|
+
add_field(mappings[:billing_address][:zip], params[:zip])
|
|
46
|
+
add_field(mappings[:billing_address][:country], lookup_country_code(params[:country]))
|
|
47
|
+
|
|
48
|
+
address = [params[:address1], params[:address2], params[:city], params[:state]].compact
|
|
49
|
+
add_field('address', address.join(' '))
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# WorldPay only supports a single name field so we have to concat
|
|
53
|
+
def customer(params={})
|
|
54
|
+
add_field(mappings[:customer][:email], params[:email])
|
|
55
|
+
add_field(mappings[:customer][:phone], params[:phone])
|
|
56
|
+
add_field('name', "#{params[:first_name]} #{params[:last_name]}")
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Support for a MD5 hash of selected fields to prevent tampering
|
|
60
|
+
# For futher information read the tech note at the address below:
|
|
61
|
+
# http://support.worldpay.com/kb/integration_guides/junior/integration/help/tech_notes/sjig_tn_009.html
|
|
62
|
+
def encrypt(secret, fields = [:amount, :currency, :account, :order])
|
|
63
|
+
signature_fields = fields.collect{ |field| mappings[field] }
|
|
64
|
+
add_field('signatureFields', signature_fields.join(':'))
|
|
65
|
+
|
|
66
|
+
field_values = fields.collect{ |field| form_fields[mappings[field]] }
|
|
67
|
+
signature = "#{secret}:#{field_values.join(':')}"
|
|
68
|
+
add_field('signature', Digest::MD5.hexdigest(signature))
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# Add a time window for which the payment can be completed. Read the link below for how they work
|
|
72
|
+
# http://support.worldpay.com/kb/integration_guides/junior/integration/help/appendicies/sjig_10100.html
|
|
73
|
+
def valid_from(from_time)
|
|
74
|
+
add_field('authValidFrom', from_time.to_i.to_s + '000')
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def valid_to(to_time)
|
|
78
|
+
add_field('authValidTo', to_time.to_i.to_s + '000')
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# WorldPay supports the passing of custom parameters prefixed with the following:
|
|
82
|
+
# C_ : These parameters can be used in the response pages hosted on WorldPay's site
|
|
83
|
+
# M_ : These parameters are passed through to the callback script (if enabled)
|
|
84
|
+
# MC_ or CM_ : These parameters are availble both in the response and callback contexts
|
|
85
|
+
def response_params(params={})
|
|
86
|
+
params.each{|k,v| add_field("C_#{k}",v)}
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def callback_params(params={})
|
|
90
|
+
params.each{|k,v| add_field("M_#{k}",v)}
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def combined_params(params={})
|
|
94
|
+
params.each{|k,v| add_field("MC_#{k}",v)}
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
module ActiveMerchant #:nodoc:
|
|
2
|
+
module Billing #:nodoc:
|
|
3
|
+
module Integrations #:nodoc:
|
|
4
|
+
module WorldPay
|
|
5
|
+
class Notification < ActiveMerchant::Billing::Integrations::Notification
|
|
6
|
+
def complete?
|
|
7
|
+
status == 'Completed'
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def account
|
|
11
|
+
params['instId']
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def item_id
|
|
15
|
+
params['cartId']
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def transaction_id
|
|
19
|
+
params['transId']
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Time this payment was received by the client in UTC time.
|
|
23
|
+
def received_at
|
|
24
|
+
Time.at(params['transTime'].to_i / 1000).utc
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Callback password set in the WorldPay CMS
|
|
28
|
+
def security_key
|
|
29
|
+
params['callbackPW']
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# the money amount we received in X.2 decimal.
|
|
33
|
+
def gross
|
|
34
|
+
params['authAmount']
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def currency
|
|
38
|
+
params['authCurrency']
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Was this a test transaction?
|
|
42
|
+
def test?
|
|
43
|
+
params.key?('testMode') && params['testMode'] != '0'
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def status
|
|
47
|
+
params['transStatus'] == 'Y' ? 'Completed' : 'Cancelled'
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def name
|
|
51
|
+
params['name']
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def address
|
|
55
|
+
params['address']
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def postcode
|
|
59
|
+
params['postcode']
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def country
|
|
63
|
+
params['country']
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def phone_number
|
|
67
|
+
params['tel']
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def fax_number
|
|
71
|
+
params['fax']
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def email_address
|
|
75
|
+
params['email']
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def card_type
|
|
79
|
+
params['cardType']
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# WorldPay extended fraud checks returned as a 4 character string
|
|
83
|
+
# 1st char: Credit card CVV check
|
|
84
|
+
# 2nd char: Postcode AVS check
|
|
85
|
+
# 3rd char: Address AVS check
|
|
86
|
+
# 4th char: Country comparison check
|
|
87
|
+
# Possible values are:
|
|
88
|
+
# :not_supported - 0
|
|
89
|
+
# :not_checked - 1
|
|
90
|
+
# :matched - 2
|
|
91
|
+
# :not_matched - 4
|
|
92
|
+
# :partial_match - 8
|
|
93
|
+
def cvv_status
|
|
94
|
+
return avs_value_to_symbol(params['AVS'][0].chr)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def postcode_status
|
|
98
|
+
return avs_value_to_symbol(params['AVS'][1].chr)
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def address_status
|
|
102
|
+
return avs_value_to_symbol(params['AVS'][2].chr)
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def country_status
|
|
106
|
+
return avs_value_to_symbol(params['AVS'][3].chr)
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def acknowledge
|
|
110
|
+
return true
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
# WorldPay supports the passing of custom parameters through to the callback script
|
|
114
|
+
def custom_params
|
|
115
|
+
return @custom_params ||= read_custom_params
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
private
|
|
120
|
+
|
|
121
|
+
# Take the posted data and move the relevant data into a hash
|
|
122
|
+
def parse(post)
|
|
123
|
+
@raw = post
|
|
124
|
+
for line in post.split('&')
|
|
125
|
+
key, value = *line.scan( %r{^(\w+)\=(.*)$} ).flatten
|
|
126
|
+
params[key] = value
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
# Read the custom params into a hash
|
|
131
|
+
def read_custom_params
|
|
132
|
+
custom = {}
|
|
133
|
+
params.each do |key, value|
|
|
134
|
+
if /\A(M_|MC_|CM_)/ === key
|
|
135
|
+
custom[key.gsub(/\A(M_|MC_|CM_)/, '').to_sym] = value
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
custom
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
# Convert a AVS value to a symbol - see above for more about AVS
|
|
142
|
+
def avs_value_to_symbol(value)
|
|
143
|
+
case value.to_s
|
|
144
|
+
when '8'
|
|
145
|
+
:partial_match
|
|
146
|
+
when '4'
|
|
147
|
+
:no_match
|
|
148
|
+
when '2'
|
|
149
|
+
:matched
|
|
150
|
+
when '1'
|
|
151
|
+
:not_checked
|
|
152
|
+
else
|
|
153
|
+
:not_supported
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
end
|
|
159
|
+
end
|
|
160
|
+
end
|