spree_gateway 2.1.1 → 2.2.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.
Files changed (84) hide show
  1. checksums.yaml +4 -4
  2. metadata +185 -116
  3. data/.gitignore +0 -14
  4. data/.rspec +0 -1
  5. data/.travis.yml +0 -22
  6. data/Gemfile +0 -21
  7. data/LICENSE +0 -26
  8. data/README.md +0 -68
  9. data/Rakefile +0 -14
  10. data/Versionfile +0 -12
  11. data/app/assets/javascripts/store/gateway/stripe.js.coffee +0 -58
  12. data/app/assets/javascripts/store/spree_gateway.js +0 -2
  13. data/app/assets/stylesheets/store/spree_gateway.css +0 -8
  14. data/app/controllers/spree/checkout_controller_decorator.rb +0 -51
  15. data/app/controllers/spree/skrill_status_controller.rb +0 -39
  16. data/app/models/spree/billing_integration/skrill/quick_checkout.rb +0 -48
  17. data/app/models/spree/gateway/authorize_net.rb +0 -16
  18. data/app/models/spree/gateway/authorize_net_cim.rb +0 -132
  19. data/app/models/spree/gateway/balanced_gateway.rb +0 -65
  20. data/app/models/spree/gateway/banwire.rb +0 -15
  21. data/app/models/spree/gateway/beanstream.rb +0 -193
  22. data/app/models/spree/gateway/braintree_gateway.rb +0 -147
  23. data/app/models/spree/gateway/card_save.rb +0 -10
  24. data/app/models/spree/gateway/data_cash.rb +0 -10
  25. data/app/models/spree/gateway/eway.rb +0 -20
  26. data/app/models/spree/gateway/fatzebra.rb +0 -15
  27. data/app/models/spree/gateway/linkpoint.rb +0 -28
  28. data/app/models/spree/gateway/maxipago.rb +0 -14
  29. data/app/models/spree/gateway/moneris.rb +0 -11
  30. data/app/models/spree/gateway/pay_junction.rb +0 -16
  31. data/app/models/spree/gateway/pay_pal_gateway.rb +0 -12
  32. data/app/models/spree/gateway/payflow_pro.rb +0 -17
  33. data/app/models/spree/gateway/paymill.rb +0 -12
  34. data/app/models/spree/gateway/pin_gateway.rb +0 -15
  35. data/app/models/spree/gateway/sage_pay.rb +0 -11
  36. data/app/models/spree/gateway/samurai.rb +0 -63
  37. data/app/models/spree/gateway/secure_pay_au.rb +0 -10
  38. data/app/models/spree/gateway/stripe_gateway.rb +0 -103
  39. data/app/models/spree/gateway/usa_epay.rb +0 -9
  40. data/app/models/spree/gateway/worldpay.rb +0 -91
  41. data/app/models/spree/skrill_transaction.rb +0 -19
  42. data/app/views/spree/admin/log_entries/_braintree.html.erb +0 -31
  43. data/app/views/spree/admin/log_entries/_stripe.html.erb +0 -28
  44. data/app/views/spree/admin/payments/source_forms/_quickcheckout.html.erb +0 -8
  45. data/app/views/spree/admin/payments/source_forms/_stripe.html.erb +0 -1
  46. data/app/views/spree/admin/payments/source_views/_quickcheckout.html.erb +0 -39
  47. data/app/views/spree/admin/payments/source_views/_stripe.html.erb +0 -1
  48. data/app/views/spree/checkout/payment/_quickcheckout.html.erb +0 -26
  49. data/app/views/spree/checkout/payment/_stripe.html.erb +0 -21
  50. data/config/initializers/savon.rb +0 -3
  51. data/config/locales/bg.yml +0 -11
  52. data/config/locales/de.yml +0 -11
  53. data/config/locales/en.yml +0 -30
  54. data/config/locales/sv.yml +0 -11
  55. data/config/routes.rb +0 -20
  56. data/db/migrate/20111118164631_create_skrill_transactions.rb +0 -14
  57. data/db/migrate/20121017004102_update_braintree_payment_method_type.rb +0 -9
  58. data/db/migrate/20130213222555_update_stripe_payment_method_type.rb +0 -9
  59. data/db/migrate/20130415222802_update_balanced_payment_method_type.rb +0 -9
  60. data/db/migrate/20131008221012_update_paypal_payment_method_type.rb +0 -9
  61. data/db/migrate/20131112133401_migrate_stripe_preferences.rb +0 -8
  62. data/lib/active_merchant/billing/skrill.rb +0 -18
  63. data/lib/generators/spree_gateway/install/install_generator.rb +0 -28
  64. data/lib/spree_gateway.rb +0 -3
  65. data/lib/spree_gateway/engine.rb +0 -42
  66. data/script/rails +0 -5
  67. data/spec/factories/payment_method_factory.rb +0 -4
  68. data/spec/features/stripe_checkout_spec.rb +0 -82
  69. data/spec/models/gateway/authorize_net_cim_spec.rb +0 -17
  70. data/spec/models/gateway/authorize_net_spec.rb +0 -17
  71. data/spec/models/gateway/balanced_gateway_spec.rb +0 -9
  72. data/spec/models/gateway/banwire_spec.rb +0 -9
  73. data/spec/models/gateway/braintree_gateway_spec.rb +0 -289
  74. data/spec/models/gateway/eway_spec.rb +0 -17
  75. data/spec/models/gateway/fatzebra_spec.rb +0 -47
  76. data/spec/models/gateway/linkpoint_spec.rb +0 -60
  77. data/spec/models/gateway/pay_junction_spec.rb +0 -17
  78. data/spec/models/gateway/payflow_pro_spec.rb +0 -17
  79. data/spec/models/gateway/pin_gateway_spec.rb +0 -57
  80. data/spec/models/gateway/stripe_gateway_spec.rb +0 -122
  81. data/spec/models/gateway/usa_epay_spec.rb +0 -38
  82. data/spec/models/savon_spec.rb +0 -9
  83. data/spec/spec_helper.rb +0 -56
  84. data/spree_gateway.gemspec +0 -28
@@ -1,65 +0,0 @@
1
- module Spree
2
- class Gateway::BalancedGateway < Gateway
3
- preference :login, :string
4
- preference :on_behalf_of_uri, :string
5
-
6
- def authorize(money, creditcard, gateway_options)
7
- if token = creditcard.gateway_payment_profile_id
8
- # The Balanced ActiveMerchant gateway supports passing the token directly as the creditcard parameter
9
- creditcard = token
10
- end
11
- provider.authorize(money, creditcard, gateway_options)
12
- end
13
-
14
- def capture(authorization, creditcard, gateway_options)
15
- gateway_options[:on_behalf_of_uri] = self.preferred_on_behalf_of_uri
16
- provider.capture((authorization.amount * 100).round, authorization.response_code, gateway_options)
17
- end
18
-
19
- def create_profile(payment)
20
- return unless payment.source.gateway_payment_profile_id.nil?
21
-
22
- options = {}
23
- options[:email] = payment.order.email
24
- options[:login] = preferred_login
25
-
26
- card_store_response = provider.store(payment.source, options)
27
- card_uri = card_store_response.authorization.split(';').first
28
-
29
- # A success just returns a string of the token. A failed request returns a bad request response with a message.
30
- payment.source.update_attributes!(:gateway_payment_profile_id => card_uri)
31
- rescue Error => ex
32
- payment.send(:gateway_error, ex.message)
33
- end
34
-
35
- def options_with_test_preference
36
- options_without_test_preference.merge(:test => self.preferred_test_mode)
37
- end
38
- alias_method_chain :options, :test_preference
39
-
40
- def payment_profiles_supported?
41
- true
42
- end
43
-
44
- def purchase(money, creditcard, gateway_options)
45
- if token = creditcard.gateway_payment_profile_id
46
- # The Balanced ActiveMerchant gateway supports passing the token directly as the creditcard parameter
47
- creditcard = token
48
- end
49
- provider.purchase(money, creditcard, gateway_options)
50
- end
51
-
52
- def provider_class
53
- ActiveMerchant::Billing::BalancedGateway
54
- end
55
-
56
- def credit(money, creditcard, response_code, gateway_options)
57
- provider.refund(money, response_code, {})
58
- end
59
-
60
- def void(response_code, creditcard, gateway_options)
61
- provider.void(response_code)
62
- end
63
-
64
- end
65
- end
@@ -1,15 +0,0 @@
1
- module Spree
2
- class Gateway::Banwire < Gateway
3
- preference :login, :string
4
-
5
-
6
- def provider_class
7
- ActiveMerchant::Billing::BanwireGateway
8
- end
9
-
10
- def purchase(money, creditcard, gateway_options)
11
- gateway_options[:description] = "Spree Order"
12
- provider.purchase(money, creditcard, gateway_options)
13
- end
14
- end
15
- end
@@ -1,193 +0,0 @@
1
- module Spree
2
- class Gateway::Beanstream < Gateway
3
- preference :login, :string
4
- preference :user, :string
5
- preference :password, :string
6
- preference :secure_profile_api_key, :string
7
-
8
- def provider_class
9
- ActiveMerchant::Billing::BeanstreamGateway
10
- end
11
-
12
- def payment_profiles_supported?
13
- true
14
- end
15
-
16
- def create_profile(payment)
17
- creditcard = payment.source
18
- if creditcard.gateway_customer_profile_id.nil?
19
- options = options_for_create_customer_profile(creditcard, {})
20
- verify_creditcard_name!(creditcard)
21
- result = provider.store(creditcard, options)
22
- if result.success?
23
- creditcard.update_attributes(:gateway_customer_profile_id => result.params['customerCode'], :gateway_payment_profile_id => result.params['customer_vault_id'])
24
- else
25
- payment.send(:gateway_error, result)
26
- end
27
- end
28
- end
29
-
30
- def capture(transaction, creditcard, gateway_options)
31
- beanstream_gateway.capture((transaction.amount*100).round, transaction.response_code, gateway_options)
32
- end
33
-
34
- def void(transaction_response, creditcard, gateway_options)
35
- beanstream_gateway.void(transaction_response, gateway_options)
36
- end
37
-
38
- def credit(amount, creditcard, response_code, gateway_options = {})
39
- amount = (amount * -1) if amount < 0
40
- beanstream_gateway.credit(amount, response_code, gateway_options)
41
- end
42
-
43
- private
44
- def beanstream_gateway
45
- ActiveMerchant::Billing::Base.gateway_mode = preferred_server.to_sym
46
- gateway_options = options
47
- ActiveMerchant::Billing::BeanstreamGateway.new(gateway_options)
48
- end
49
-
50
- def verify_creditcard_name!(creditcard)
51
- bill_address = creditcard.payments.first.order.bill_address
52
- creditcard.first_name = bill_address.firstname unless creditcard.first_name?
53
- creditcard.last_name = bill_address.lastname unless creditcard.last_name?
54
- end
55
-
56
- def options_for_create_customer_profile(creditcard, gateway_options)
57
- order = creditcard.payments.first.order
58
- address = order.bill_address
59
- { :email=>order.email,
60
- :billing_address=>
61
- { :name=>address.full_name,
62
- :phone=>address.phone,
63
- :address1=>address.address1,
64
- :address2=>address.address2,
65
- :city=>address.city,
66
- :state=>address.state_name || address.state.abbr,
67
- :country=>address.country.iso,
68
- :zip=>address.zipcode
69
- }
70
- }.merge(gateway_options)
71
- end
72
-
73
- SECURE_PROFILE_URL = 'https://www.beanstream.com/scripts/payment_profile.asp'
74
- SP_SERVICE_VERSION = '1.1'
75
- PROFILE_OPERATIONS = { :new => 'N', :modify => 'M' }
76
-
77
- ActiveMerchant::Billing::BeanstreamGateway.class_eval do
78
-
79
- def store(credit_card, options = {})
80
- post = {}
81
- add_address(post, options)
82
- add_credit_card(post, credit_card)
83
- add_secure_profile_variables(post,options)
84
- commit(post, true)
85
- end
86
-
87
- #can't actually delete a secure profile with the supplicaed API. This function sets the status of the profile to closed (C).
88
- #Closed profiles will have to removed manually.
89
- def delete(vault_id)
90
- update(vault_id, false, { :status => 'C' })
91
- end
92
-
93
- #alias_method :unstore, :delete
94
-
95
- # Update the values (such as CC expiration) stored at
96
- # the gateway. The CC number must be supplied in the
97
- # CreditCard object.
98
- def update(vault_id, credit_card, options = {})
99
- post = {}
100
- add_address(post, options)
101
- add_credit_card(post, credit_card)
102
- options.merge!({ :vault_id => vault_id, :operation => secure_profile_action(:modify) })
103
- add_secure_profile_variables(post,options)
104
- commit(post, true)
105
- end
106
-
107
- # CORE #
108
-
109
- def secure_profile_action(type)
110
- PROFILE_OPERATIONS[type] || PROFILE_OPERATIONS[:new]
111
- end
112
-
113
- def add_credit_card(post, credit_card)
114
- if credit_card
115
- if credit_card.has_payment_profile?
116
- post[:customerCode] = credit_card.gateway_customer_profile_id
117
- else
118
- post[:trnCardOwner] = credit_card.name
119
- post[:trnCardNumber] = credit_card.number
120
- post[:trnExpMonth] = format(credit_card.month, :two_digits)
121
- post[:trnExpYear] = format(credit_card.year, :two_digits)
122
- post[:trnCardCvd] = credit_card.verification_value
123
- end
124
- end
125
- end
126
-
127
- def add_secure_profile_variables(post, options = {})
128
- post[:serviceVersion] = SP_SERVICE_VERSION
129
- post[:responseFormat] = 'QS'
130
- post[:cardValidation] = (options[:cardValidation].to_i == 1) || '0'
131
-
132
- post[:operationType] = options[:operationType] || options[:operation] || secure_profile_action(:new)
133
- post[:customerCode] = options[:billing_id] || options[:vault_id] || false
134
- post[:status] = options[:status]
135
- end
136
-
137
- def commit(params, use_profile_api = false)
138
- post(post_data(params,use_profile_api),use_profile_api)
139
- end
140
-
141
- def post(data, use_profile_api)
142
- response = parse(ssl_post((use_profile_api ? SECURE_PROFILE_URL : ActiveMerchant::Billing::BeanstreamGateway::URL), data))
143
- if response[:responseCode].eql?("17") # Found matching card
144
- response[:responseCode] = "1"
145
- response[:customerCode] = response[:matchedCustomerCode]
146
- end
147
- response[:customer_vault_id] = response[:customerCode] if response[:customerCode]
148
- build_response(success?(response), message_from(response), response,
149
- :test => test? || response[:authCode] == 'TEST',
150
- :authorization => authorization_from(response),
151
- :cvv_result => ActiveMerchant::Billing::BeanstreamGateway::CVD_CODES[response[:cvdId]],
152
- :avs_result => { :code => (ActiveMerchant::Billing::BeanstreamGateway::AVS_CODES.include? response[:avsId]) ? ActiveMerchant::Billing::BeanstreamGateway::AVS_CODES[response[:avsId]] : response[:avsId] }
153
- )
154
- end
155
-
156
- def message_from(response)
157
- response[:messageText] || response[:responseMessage]
158
- end
159
-
160
- def success?(response)
161
- response[:responseType] == 'R' || response[:trnApproved] == '1' || response[:responseCode] == '1'
162
- end
163
-
164
- def add_source(post, source)
165
- if source.is_a?(String) or source.is_a?(Integer)
166
- post[:customerCode] = source
167
- else
168
- if source.respond_to?(:type) && source.type.to_s == 'check'
169
- add_check(post, source)
170
- else
171
- add_credit_card(post, source)
172
- end
173
- end
174
- end
175
-
176
- def post_data(params, use_profile_api)
177
- params[:requestType] = 'BACKEND'
178
- if use_profile_api
179
- params[:merchantId] = @options[:login]
180
- params[:passCode] = @options[:secure_profile_api_key]
181
- else
182
- params[:username] = @options[:user] if @options[:user]
183
- params[:password] = @options[:password] if @options[:password]
184
- params[:merchant_id] = @options[:login]
185
- end
186
- params[:vbvEnabled] = '0'
187
- params[:scEnabled] = '0'
188
-
189
- params.reject { |k, v| v.blank? }.collect { |key, value| "#{key}=#{CGI.escape(value.to_s)}" }.join('&')
190
- end
191
- end
192
- end
193
- end
@@ -1,147 +0,0 @@
1
- module Spree
2
- class Gateway::BraintreeGateway < Gateway
3
- preference :environment, :string
4
- preference :merchant_id, :string
5
- preference :merchant_account_id, :string
6
- preference :public_key, :string
7
- preference :private_key, :string
8
- preference :client_side_encryption_key, :text
9
-
10
- CARD_TYPE_MAPPING = {
11
- 'American Express' => 'american_express',
12
- 'Diners Club' => 'diners_club',
13
- 'Discover' => 'discover',
14
- 'JCB' => 'jcb',
15
- 'Laser' => 'laser',
16
- 'Maestro' => 'maestro',
17
- 'MasterCard' => 'master',
18
- 'Solo' => 'solo',
19
- 'Switch' => 'switch',
20
- 'Visa' => 'visa'
21
- }
22
-
23
- def provider
24
- provider_instance = super
25
- Braintree::Configuration.custom_user_agent = "Spree #{Spree.version}"
26
- Braintree::Configuration.environment = preferred_environment.to_sym
27
- Braintree::Configuration.merchant_id = preferred_merchant_id
28
- Braintree::Configuration.public_key = preferred_public_key
29
- Braintree::Configuration.private_key = preferred_private_key
30
-
31
- provider_instance
32
- end
33
-
34
- def provider_class
35
- ActiveMerchant::Billing::BraintreeBlueGateway
36
- end
37
-
38
- def authorize(money, creditcard, options = {})
39
- adjust_options_for_braintree(creditcard, options)
40
- payment_method = creditcard.gateway_customer_profile_id || creditcard
41
- provider.authorize(money, payment_method, options)
42
- end
43
-
44
- def capture(authorization, ignored_creditcard, ignored_options)
45
- amount = (authorization.amount * 100).to_i
46
- provider.capture(amount, authorization.response_code)
47
- end
48
-
49
- def create_profile(payment)
50
- if payment.source.gateway_customer_profile_id.nil?
51
- response = provider.store(payment.source)
52
- if response.success?
53
- payment.source.update_attributes!(:gateway_customer_profile_id => response.params['customer_vault_id'])
54
- cc = response.params['braintree_customer'].fetch('credit_cards',[]).first
55
- update_card_number(payment.source, cc) if cc
56
- else
57
- payment.send(:gateway_error, response.message)
58
- end
59
- end
60
- end
61
-
62
- def update_card_number(source, cc)
63
- last_4 = cc['last_4']
64
- source.last_digits = last_4 if last_4
65
- source.gateway_payment_profile_id = cc['token']
66
- source.cc_type = CARD_TYPE_MAPPING[cc['card_type']] if cc['card_type']
67
- source.save!
68
- end
69
-
70
- def credit(*args)
71
- if args.size == 4
72
- # enables ability to refund instead of credit
73
- args.slice!(1,1)
74
- credit_without_payment_profiles(*args)
75
- elsif args.size == 3
76
- credit_without_payment_profiles(*args)
77
- else
78
- raise ArgumentError, "Expected 3 or 4 arguments, received #{args.size}"
79
- end
80
- end
81
-
82
- # Braintree now disables credits by default, see https://www.braintreepayments.com/docs/ruby/transactions/credit
83
- def credit_with_payment_profiles(amount, payment, response_code, option)
84
- provider.credit(amount, payment)
85
- end
86
-
87
- def credit_without_payment_profiles(amount, response_code, options)
88
- provider # braintree provider needs to be called here to properly configure braintree gem.
89
- transaction = ::Braintree::Transaction.find(response_code)
90
- if BigDecimal.new(amount.to_s) == (transaction.amount * 100)
91
- provider.refund(response_code)
92
- elsif BigDecimal.new(amount.to_s) < (transaction.amount * 100) # support partial refunds
93
- provider.refund(amount, response_code)
94
- else
95
- raise NotImplementedError
96
- end
97
- end
98
-
99
- def payment_profiles_supported?
100
- true
101
- end
102
-
103
- def purchase(money, creditcard, options = {})
104
- authorize(money, creditcard, options.merge(:submit_for_settlement => true))
105
- end
106
-
107
- def void(response_code, *ignored_options)
108
- provider.void(response_code)
109
- end
110
-
111
- def options
112
- h = super
113
- # We need to add merchant_account_id only if present when creating BraintreeBlueGateway
114
- # Remove it since it is always part of the preferences hash.
115
- if h[:merchant_account_id].blank?
116
- h.delete(:merchant_account_id)
117
- end
118
- h
119
- end
120
-
121
- def preferences
122
- preferences = super.slice(:merchant_id,
123
- :merchant_account_id,
124
- :public_key,
125
- :private_key,
126
- :client_side_encryption_key,
127
- :environment)
128
-
129
- # Must be either :production or :sandbox, not their string equivalents.
130
- # Thanks to the Braintree gem.
131
- preferences[:environment] = preferences[:environment].try(:to_sym) || :sandbox
132
- preferences
133
- end
134
-
135
- protected
136
-
137
- def adjust_billing_address(creditcard, options)
138
- if creditcard.gateway_customer_profile_id
139
- options.delete(:billing_address)
140
- end
141
- end
142
-
143
- def adjust_options_for_braintree(creditcard, options)
144
- adjust_billing_address(creditcard, options)
145
- end
146
- end
147
- end
@@ -1,10 +0,0 @@
1
- module Spree
2
- class Gateway::CardSave < Gateway
3
- preference :login, :string
4
- preference :password, :string
5
-
6
- def provider_class
7
- ActiveMerchant::Billing::CardSaveGateway
8
- end
9
- end
10
- end
@@ -1,10 +0,0 @@
1
- module Spree
2
- class Gateway::DataCash < Gateway
3
- preference :login, :string
4
- preference :password, :string
5
-
6
- def provider_class
7
- ActiveMerchant::Billing::DataCashGateway
8
- end
9
- end
10
- end
@@ -1,20 +0,0 @@
1
- module Spree
2
- class Gateway::Eway < Gateway
3
- preference :login, :string
4
-
5
- # Note: EWay supports purchase method only (no authorize method).
6
- def auto_capture?
7
- true
8
- end
9
-
10
- def provider_class
11
- ActiveMerchant::Billing::EwayGateway
12
- end
13
-
14
- def options_with_test_preference
15
- options_without_test_preference.merge(:test => self.preferred_test_mode)
16
- end
17
-
18
- alias_method_chain :options, :test_preference
19
- end
20
- end