gonow-activemerchant 1.15.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 +690 -0
- data/CONTRIBUTORS +237 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +165 -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 +178 -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 +664 -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 +132 -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 +293 -0
- data/lib/active_merchant/billing/gateways/braintree_orange.rb +17 -0
- data/lib/active_merchant/billing/gateways/braspag.rb +188 -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 +268 -0
- data/lib/active_merchant/billing/gateways/eway.rb +277 -0
- data/lib/active_merchant/billing/gateways/eway_managed.rb +231 -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/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 +351 -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 +177 -0
- data/lib/active_merchant/billing/gateways/paypal_express_common.rb +25 -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 +295 -0
- data/lib/active_merchant/billing/gateways/quantum.rb +282 -0
- data/lib/active_merchant/billing/gateways/quickpay.rb +218 -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/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/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/common.rb +14 -0
- data/lib/active_merchant/common/connection.rb +177 -0
- data/lib/active_merchant/common/country.rb +328 -0
- data/lib/active_merchant/common/error.rb +26 -0
- data/lib/active_merchant/common/post_data.rb +24 -0
- data/lib/active_merchant/common/posts_data.rb +63 -0
- data/lib/active_merchant/common/requires_parameters.rb +16 -0
- data/lib/active_merchant/common/utils.rb +22 -0
- data/lib/active_merchant/common/validateable.rb +81 -0
- data/lib/active_merchant/version.rb +3 -0
- data/lib/activemerchant.rb +1 -0
- data/lib/certs/cacert.pem +7815 -0
- data/lib/support/gateway_support.rb +58 -0
- data/lib/support/outbound_hosts.rb +25 -0
- metadata +276 -0
@@ -0,0 +1,31 @@
|
|
1
|
+
module ActiveMerchant #:nodoc:
|
2
|
+
module Billing #:nodoc:
|
3
|
+
module Integrations #:nodoc:
|
4
|
+
module SagePayForm
|
5
|
+
class Return < ActiveMerchant::Billing::Integrations::Return
|
6
|
+
|
7
|
+
def initialize(query_string, options)
|
8
|
+
begin
|
9
|
+
@notification = Notification.new(query_string, options)
|
10
|
+
rescue Notification::CryptError => e
|
11
|
+
@message = e.message
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def success?
|
16
|
+
@notification && @notification.complete?
|
17
|
+
end
|
18
|
+
|
19
|
+
def cancelled?
|
20
|
+
@notification && @notification.cancelled?
|
21
|
+
end
|
22
|
+
|
23
|
+
def message
|
24
|
+
@message || @notification.message
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
|
2
|
+
module ActiveMerchant #:nodoc:
|
3
|
+
module Billing #:nodoc:
|
4
|
+
module Integrations #:nodoc:
|
5
|
+
module TwoCheckout
|
6
|
+
autoload 'Helper', File.dirname(__FILE__) + '/two_checkout/helper'
|
7
|
+
autoload 'Return', File.dirname(__FILE__) + '/two_checkout/return'
|
8
|
+
autoload 'Notification', File.dirname(__FILE__) + '/two_checkout/notification'
|
9
|
+
|
10
|
+
mattr_accessor :service_url
|
11
|
+
self.service_url = 'https://www.2checkout.com/2co/buyer/purchase'
|
12
|
+
|
13
|
+
def self.notification(post, options = {})
|
14
|
+
Notification.new(post)
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.return(query_string, options = {})
|
18
|
+
Return.new(query_string)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module ActiveMerchant #:nodoc:
|
2
|
+
module Billing #:nodoc:
|
3
|
+
module Integrations #:nodoc:
|
4
|
+
module TwoCheckout
|
5
|
+
class Helper < ActiveMerchant::Billing::Integrations::Helper
|
6
|
+
def initialize(order, account, options = {})
|
7
|
+
super
|
8
|
+
add_field('fixed', 'Y')
|
9
|
+
|
10
|
+
if ActiveMerchant::Billing::Base.integration_mode == :test || options[:test]
|
11
|
+
add_field('demo', 'Y')
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
# The 2checkout vendor account number
|
16
|
+
mapping :account, 'sid'
|
17
|
+
|
18
|
+
# he total amount to be billed, in decimal form, without a currency symbol. (8 characters, decimal, 2 characters: Example: 99999999.99)
|
19
|
+
mapping :amount, 'total'
|
20
|
+
|
21
|
+
# a unique order id from your program. (128 characters max)
|
22
|
+
mapping :order, 'cart_order_id'
|
23
|
+
|
24
|
+
|
25
|
+
mapping :customer, :email => 'email',
|
26
|
+
:phone => 'phone'
|
27
|
+
|
28
|
+
mapping :billing_address, :city => 'city',
|
29
|
+
:address1 => 'street_address',
|
30
|
+
:address2 => 'street_address2',
|
31
|
+
:state => 'state',
|
32
|
+
:zip => 'zip',
|
33
|
+
:country => 'country'
|
34
|
+
|
35
|
+
mapping :shipping_address, :city => 'ship_city',
|
36
|
+
:address1 => 'ship_street_address',
|
37
|
+
:state => 'ship_state',
|
38
|
+
:zip => 'ship_zip',
|
39
|
+
:country => 'ship_country'
|
40
|
+
|
41
|
+
mapping :invoice, 'merchant_order_id'
|
42
|
+
|
43
|
+
# Does nothing, since we've disabled the Continue Shopping button by using the fixed = Y field
|
44
|
+
mapping :return_url, 'return_url'
|
45
|
+
|
46
|
+
#mapping :description, ''
|
47
|
+
#mapping :tax, ''
|
48
|
+
#mapping :shipping, ''
|
49
|
+
|
50
|
+
def customer(params = {})
|
51
|
+
add_field(mappings[:customer][:email], params[:email])
|
52
|
+
add_field(mappings[:customer][:phone], params[:phone])
|
53
|
+
add_field('card_holder_name', "#{params[:first_name]} #{params[:last_name]}")
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,114 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
require 'base64'
|
3
|
+
require 'digest/md5'
|
4
|
+
|
5
|
+
module ActiveMerchant #:nodoc:
|
6
|
+
module Billing #:nodoc:
|
7
|
+
module Integrations #:nodoc:
|
8
|
+
module TwoCheckout
|
9
|
+
class Notification < ActiveMerchant::Billing::Integrations::Notification
|
10
|
+
# order_number 2Checkout.com order number
|
11
|
+
# card_holder_name Card holder's name
|
12
|
+
# street_address Card holder's address
|
13
|
+
# city Card holder's city
|
14
|
+
# state Card holder's state
|
15
|
+
# zip Card holder's zip
|
16
|
+
# country Card holder's country
|
17
|
+
# email Card holder's email
|
18
|
+
# phone Card holder's phone
|
19
|
+
# credit_card_processed Y if successful, K if waiting for approval
|
20
|
+
# total Total purchase amount
|
21
|
+
# ship_name Shipping information
|
22
|
+
# ship_street_address Shipping information
|
23
|
+
# ship_city Shipping information
|
24
|
+
# ship_state Shipping information
|
25
|
+
# ship_zip Shipping information
|
26
|
+
# ship_country Shipping information
|
27
|
+
# product_id 2Checkout product ID for purchased items will append a number if more than one item.
|
28
|
+
# ex. product_id,product_id1,product_id2
|
29
|
+
# quantity quantity of corresponding product will append a number if more than one item.
|
30
|
+
# ex. quantity,quantity1,quantity2
|
31
|
+
# merchant_product_id your product ID for purchased items will append a number if more than one item.
|
32
|
+
# ex. merchant_product_id,merchant_product_id1,merchant_product_id2
|
33
|
+
# product_description your description for purchased items will append a number if more than one item.
|
34
|
+
# ex. product_description,product_description1,product_description2
|
35
|
+
|
36
|
+
def currency
|
37
|
+
'USD'
|
38
|
+
end
|
39
|
+
|
40
|
+
def complete?
|
41
|
+
status == 'Completed'
|
42
|
+
end
|
43
|
+
|
44
|
+
def item_id
|
45
|
+
params['cart_order_id']
|
46
|
+
end
|
47
|
+
|
48
|
+
def transaction_id
|
49
|
+
params['order_number']
|
50
|
+
end
|
51
|
+
|
52
|
+
def received_at
|
53
|
+
params['']
|
54
|
+
end
|
55
|
+
|
56
|
+
def payer_email
|
57
|
+
params['email']
|
58
|
+
end
|
59
|
+
|
60
|
+
def receiver_email
|
61
|
+
params['']
|
62
|
+
end
|
63
|
+
|
64
|
+
# The MD5 Hash
|
65
|
+
def security_key
|
66
|
+
params['key']
|
67
|
+
end
|
68
|
+
|
69
|
+
# the money amount we received in X.2 decimal.
|
70
|
+
def gross
|
71
|
+
params['total']
|
72
|
+
end
|
73
|
+
|
74
|
+
# Was this a test transaction? # Use the hash
|
75
|
+
def test?
|
76
|
+
params['demo'] == 'Y'
|
77
|
+
end
|
78
|
+
|
79
|
+
def status
|
80
|
+
case params['credit_card_processed']
|
81
|
+
when 'Y'
|
82
|
+
'Completed'
|
83
|
+
when 'K'
|
84
|
+
'Pending'
|
85
|
+
else
|
86
|
+
'Failed'
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def secret
|
91
|
+
@options[:credential2]
|
92
|
+
end
|
93
|
+
|
94
|
+
def acknowledge
|
95
|
+
return false if security_key.blank?
|
96
|
+
|
97
|
+
Digest::MD5.hexdigest("#{secret}#{params['sid']}#{transaction_id}#{gross}").upcase == security_key.upcase
|
98
|
+
end
|
99
|
+
|
100
|
+
private
|
101
|
+
|
102
|
+
def parse(post)
|
103
|
+
@raw = post.to_s
|
104
|
+
for line in @raw.split('&')
|
105
|
+
key, value = *line.scan( %r{^(\w+)\=(.*)$} ).flatten
|
106
|
+
params[key] = CGI.unescape(value || '')
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
@@ -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
|