offsite_payments 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +70 -0
  4. data/lib/offsite_payments.rb +46 -0
  5. data/lib/offsite_payments/action_view_helper.rb +72 -0
  6. data/lib/offsite_payments/helper.rb +119 -0
  7. data/lib/offsite_payments/integrations.rb +14 -0
  8. data/lib/offsite_payments/integrations/a1agregator.rb +245 -0
  9. data/lib/offsite_payments/integrations/authorize_net_sim.rb +580 -0
  10. data/lib/offsite_payments/integrations/bit_pay.rb +150 -0
  11. data/lib/offsite_payments/integrations/bogus.rb +32 -0
  12. data/lib/offsite_payments/integrations/chronopay.rb +283 -0
  13. data/lib/offsite_payments/integrations/citrus.rb +227 -0
  14. data/lib/offsite_payments/integrations/direc_pay.rb +339 -0
  15. data/lib/offsite_payments/integrations/directebanking.rb +237 -0
  16. data/lib/offsite_payments/integrations/doku.rb +171 -0
  17. data/lib/offsite_payments/integrations/dotpay.rb +166 -0
  18. data/lib/offsite_payments/integrations/dwolla.rb +160 -0
  19. data/lib/offsite_payments/integrations/e_payment_plans.rb +146 -0
  20. data/lib/offsite_payments/integrations/easy_pay.rb +137 -0
  21. data/lib/offsite_payments/integrations/epay.rb +161 -0
  22. data/lib/offsite_payments/integrations/first_data.rb +133 -0
  23. data/lib/offsite_payments/integrations/gestpay.rb +201 -0
  24. data/lib/offsite_payments/integrations/hi_trust.rb +179 -0
  25. data/lib/offsite_payments/integrations/ipay88.rb +240 -0
  26. data/lib/offsite_payments/integrations/klarna.rb +291 -0
  27. data/lib/offsite_payments/integrations/liqpay.rb +216 -0
  28. data/lib/offsite_payments/integrations/maksuturva.rb +231 -0
  29. data/lib/offsite_payments/integrations/mollie_ideal.rb +213 -0
  30. data/lib/offsite_payments/integrations/moneybookers.rb +199 -0
  31. data/lib/offsite_payments/integrations/nochex.rb +228 -0
  32. data/lib/offsite_payments/integrations/pag_seguro.rb +255 -0
  33. data/lib/offsite_payments/integrations/paxum.rb +114 -0
  34. data/lib/offsite_payments/integrations/pay_fast.rb +269 -0
  35. data/lib/offsite_payments/integrations/paydollar.rb +142 -0
  36. data/lib/offsite_payments/integrations/payflow_link.rb +194 -0
  37. data/lib/offsite_payments/integrations/paypal.rb +362 -0
  38. data/lib/offsite_payments/integrations/paypal_payments_advanced.rb +23 -0
  39. data/lib/offsite_payments/integrations/paysbuy.rb +71 -0
  40. data/lib/offsite_payments/integrations/payu_in.rb +266 -0
  41. data/lib/offsite_payments/integrations/payu_in_paisa.rb +46 -0
  42. data/lib/offsite_payments/integrations/platron.rb +153 -0
  43. data/lib/offsite_payments/integrations/pxpay.rb +271 -0
  44. data/lib/offsite_payments/integrations/quickpay.rb +232 -0
  45. data/lib/offsite_payments/integrations/rbkmoney.rb +110 -0
  46. data/lib/offsite_payments/integrations/robokassa.rb +154 -0
  47. data/lib/offsite_payments/integrations/sage_pay_form.rb +425 -0
  48. data/lib/offsite_payments/integrations/two_checkout.rb +332 -0
  49. data/lib/offsite_payments/integrations/universal.rb +180 -0
  50. data/lib/offsite_payments/integrations/valitor.rb +200 -0
  51. data/lib/offsite_payments/integrations/verkkomaksut.rb +143 -0
  52. data/lib/offsite_payments/integrations/web_pay.rb +186 -0
  53. data/lib/offsite_payments/integrations/webmoney.rb +119 -0
  54. data/lib/offsite_payments/integrations/wirecard_checkout_page.rb +359 -0
  55. data/lib/offsite_payments/integrations/world_pay.rb +273 -0
  56. data/lib/offsite_payments/notification.rb +71 -0
  57. data/lib/offsite_payments/return.rb +37 -0
  58. data/lib/offsite_payments/version.rb +3 -0
  59. metadata +270 -0
@@ -0,0 +1,273 @@
1
+ module OffsitePayments #:nodoc:
2
+ module Integrations #:nodoc:
3
+ module WorldPay
4
+ mattr_accessor :production_url, :test_url
5
+ self.production_url = 'https://secure.worldpay.com/wcc/purchase'
6
+ self.test_url = 'https://secure-test.worldpay.com/wcc/purchase'
7
+
8
+ def self.service_url
9
+ case OffsitePayments.mode
10
+ when :production
11
+ self.production_url
12
+ when :test
13
+ self.test_url
14
+ else
15
+ raise StandardError, "Integration mode set to an invalid value: #{mode}"
16
+ end
17
+ end
18
+
19
+ def self.notification(post, options = {})
20
+ Notification.new(post, options)
21
+ end
22
+
23
+ def self.return(post, options = {})
24
+ Return.new(post, options)
25
+ end
26
+
27
+ class Helper < OffsitePayments::Helper
28
+ mapping :account, 'instId'
29
+ mapping :amount, 'amount'
30
+ mapping :order, 'cartId'
31
+ mapping :currency, 'currency'
32
+
33
+ mapping :customer, :email => 'email',
34
+ :phone => 'tel'
35
+
36
+ mapping :billing_address, :zip => 'postcode',
37
+ :country => 'country'
38
+
39
+ mapping :description, 'desc'
40
+ mapping :notify_url, 'MC_callback'
41
+ mapping :return_url, 'MC_return'
42
+
43
+ # WorldPay supports two different test modes - :always_succeed and :always_fail
44
+ def initialize(order, account, options = {})
45
+ super
46
+
47
+ if OffsitePayments.mode == :test || options[:test]
48
+ test_mode = case options[:test]
49
+ when :always_fail
50
+ 101
51
+ when false
52
+ 0
53
+ else
54
+ 100
55
+ end
56
+ add_field('testMode', test_mode.to_s)
57
+ elsif OffsitePayments.mode == :always_succeed
58
+ add_field('testMode', '100')
59
+ elsif OffsitePayments.mode == :always_fail
60
+ add_field('testMode', '101')
61
+ end
62
+ end
63
+
64
+ # WorldPay only supports a single address field so we
65
+ # have to concat together - lines are separated using &#10;
66
+ def billing_address(params={})
67
+ add_field(mappings[:billing_address][:zip], params[:zip])
68
+ add_field(mappings[:billing_address][:country], lookup_country_code(params[:country]))
69
+
70
+ address = [params[:address1], params[:address2], params[:city], params[:state]].compact
71
+ add_field('address', address.join('&#10;'))
72
+ end
73
+
74
+ # WorldPay only supports a single name field so we have to concat
75
+ def customer(params={})
76
+ add_field(mappings[:customer][:email], params[:email])
77
+ add_field(mappings[:customer][:phone], params[:phone])
78
+ add_field('name', "#{params[:first_name]} #{params[:last_name]}")
79
+ end
80
+
81
+ # Support for a MD5 hash of selected fields to prevent tampering
82
+ # For further information read the tech note at the address below:
83
+ # http://support.worldpay.com/kb/integration_guides/junior/integration/help/tech_notes/sjig_tn_009.html
84
+ def encrypt(secret, fields = [:amount, :currency, :account, :order])
85
+ signature_fields = fields.collect{ |field| mappings[field] }
86
+ add_field('signatureFields', signature_fields.join(':'))
87
+
88
+ field_values = fields.collect{ |field| form_fields[mappings[field]] }
89
+ signature = "#{secret}:#{field_values.join(':')}"
90
+ add_field('signature', Digest::MD5.hexdigest(signature))
91
+ end
92
+
93
+ # Add a time window for which the payment can be completed. Read the link below for how they work
94
+ # http://support.worldpay.com/kb/integration_guides/junior/integration/help/appendicies/sjig_10100.html
95
+ def valid_from(from_time)
96
+ add_field('authValidFrom', from_time.to_i.to_s + '000')
97
+ end
98
+
99
+ def valid_to(to_time)
100
+ add_field('authValidTo', to_time.to_i.to_s + '000')
101
+ end
102
+
103
+ # WorldPay supports the passing of custom parameters prefixed with the following:
104
+ # C_ : These parameters can be used in the response pages hosted on WorldPay's site
105
+ # M_ : These parameters are passed through to the callback script (if enabled)
106
+ # MC_ or CM_ : These parameters are availble both in the response and callback contexts
107
+ def response_params(params={})
108
+ params.each{|k,v| add_field("C_#{k}",v)}
109
+ end
110
+
111
+ def callback_params(params={})
112
+ params.each{|k,v| add_field("M_#{k}",v)}
113
+ end
114
+
115
+ def combined_params(params={})
116
+ params.each{|k,v| add_field("MC_#{k}",v)}
117
+ end
118
+ end
119
+
120
+ class Notification < OffsitePayments::Notification
121
+ def complete?
122
+ status == 'Completed'
123
+ end
124
+
125
+ def account
126
+ params['instId']
127
+ end
128
+
129
+ def item_id
130
+ params['cartId']
131
+ end
132
+
133
+ def transaction_id
134
+ params['transId']
135
+ end
136
+
137
+ # Time this payment was received by the client in UTC time.
138
+ def received_at
139
+ Time.at(params['transTime'].to_i / 1000).utc
140
+ end
141
+
142
+ # Callback password set in the WorldPay CMS
143
+ def security_key
144
+ params['callbackPW']
145
+ end
146
+
147
+ # the money amount we received in X.2 decimal.
148
+ def gross
149
+ params['authAmount']
150
+ end
151
+
152
+ def currency
153
+ params['authCurrency']
154
+ end
155
+
156
+ # Was this a test transaction?
157
+ def test?
158
+ params.key?('testMode') && params['testMode'] != '0'
159
+ end
160
+
161
+ def status
162
+ params['transStatus'] == 'Y' ? 'Completed' : 'Cancelled'
163
+ end
164
+
165
+ def name
166
+ params['name']
167
+ end
168
+
169
+ def address
170
+ params['address']
171
+ end
172
+
173
+ def postcode
174
+ params['postcode']
175
+ end
176
+
177
+ def country
178
+ params['country']
179
+ end
180
+
181
+ def phone_number
182
+ params['tel']
183
+ end
184
+
185
+ def fax_number
186
+ params['fax']
187
+ end
188
+
189
+ def email_address
190
+ params['email']
191
+ end
192
+
193
+ def card_type
194
+ params['cardType']
195
+ end
196
+
197
+ # WorldPay extended fraud checks returned as a 4 character string
198
+ # 1st char: Credit card CVV check
199
+ # 2nd char: Postcode AVS check
200
+ # 3rd char: Address AVS check
201
+ # 4th char: Country comparison check
202
+ # Possible values are:
203
+ # :not_supported - 0
204
+ # :not_checked - 1
205
+ # :matched - 2
206
+ # :not_matched - 4
207
+ # :partial_match - 8
208
+ def cvv_status
209
+ return avs_value_to_symbol(params['AVS'][0].chr)
210
+ end
211
+
212
+ def postcode_status
213
+ return avs_value_to_symbol(params['AVS'][1].chr)
214
+ end
215
+
216
+ def address_status
217
+ return avs_value_to_symbol(params['AVS'][2].chr)
218
+ end
219
+
220
+ def country_status
221
+ return avs_value_to_symbol(params['AVS'][3].chr)
222
+ end
223
+
224
+ def acknowledge(authcode = nil)
225
+ return true
226
+ end
227
+
228
+ # WorldPay supports the passing of custom parameters through to the callback script
229
+ def custom_params
230
+ return @custom_params ||= read_custom_params
231
+ end
232
+
233
+ private
234
+
235
+ # Take the posted data and move the relevant data into a hash
236
+ def parse(post)
237
+ @raw = post
238
+ for line in post.split('&')
239
+ key, value = *line.scan( %r{^(\w+)\=(.*)$} ).flatten
240
+ params[key] = value
241
+ end
242
+ end
243
+
244
+ # Read the custom params into a hash
245
+ def read_custom_params
246
+ custom = {}
247
+ params.each do |key, value|
248
+ if /\A(M_|MC_|CM_)/ === key
249
+ custom[key.gsub(/\A(M_|MC_|CM_)/, '').to_sym] = value
250
+ end
251
+ end
252
+ custom
253
+ end
254
+
255
+ # Convert a AVS value to a symbol - see above for more about AVS
256
+ def avs_value_to_symbol(value)
257
+ case value.to_s
258
+ when '8'
259
+ :partial_match
260
+ when '4'
261
+ :no_match
262
+ when '2'
263
+ :matched
264
+ when '1'
265
+ :not_checked
266
+ else
267
+ :not_supported
268
+ end
269
+ end
270
+ end
271
+ end
272
+ end
273
+ end
@@ -0,0 +1,71 @@
1
+ module OffsitePayments #:nodoc:
2
+ class Notification
3
+ attr_accessor :params
4
+ attr_accessor :raw
5
+
6
+ # set this to an array in the subclass, to specify which IPs are allowed
7
+ # to send requests
8
+ class_attribute :production_ips
9
+
10
+ # * *Args* :
11
+ # - +doc+ -> raw post string
12
+ # - +options+ -> custom options which individual implementations can
13
+ # utilize
14
+ def initialize(post, options = {})
15
+ @options = options
16
+ empty!
17
+ parse(post)
18
+ end
19
+
20
+ def status
21
+ raise NotImplementedError, "Must implement this method in the subclass"
22
+ end
23
+
24
+ # the money amount we received in X.2 decimal.
25
+ def gross
26
+ raise NotImplementedError, "Must implement this method in the subclass"
27
+ end
28
+
29
+ def gross_cents
30
+ (gross.to_f * 100.0).round
31
+ end
32
+
33
+ # This combines the gross and currency and returns a proper Money object.
34
+ # this requires the money library located at http://rubymoney.github.io/money/
35
+ def amount
36
+ return Money.new(gross_cents, currency) rescue ArgumentError
37
+ return Money.new(gross_cents) # maybe you have an own money object which doesn't take a currency?
38
+ end
39
+
40
+ # reset the notification.
41
+ def empty!
42
+ @params = Hash.new
43
+ @raw = ""
44
+ end
45
+
46
+ # Check if the request comes from an official IP
47
+ def valid_sender?(ip)
48
+ return true if OffsitePayments.mode == :test || production_ips.blank?
49
+ production_ips.include?(ip)
50
+ end
51
+
52
+ def test?
53
+ false
54
+ end
55
+
56
+ def iso_currency
57
+ ActiveMerchant::CurrencyCode.standardize(currency)
58
+ end
59
+
60
+ private
61
+
62
+ # Take the posted data and move the relevant data into a hash
63
+ def parse(post)
64
+ @raw = post.to_s
65
+ for line in @raw.split('&')
66
+ key, value = *line.scan( %r{^([A-Za-z0-9_.-]+)\=(.*)$} ).flatten
67
+ params[key] = CGI.unescape(value.to_s) if key.present?
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,37 @@
1
+ module OffsitePayments #:nodoc:
2
+ class Return
3
+ attr_accessor :params
4
+ attr_reader :notification
5
+
6
+ def initialize(query_string, options = {})
7
+ @params = parse(query_string)
8
+ @options = options
9
+ end
10
+
11
+ # Successful by default. Overridden in the child class
12
+ def success?
13
+ true
14
+ end
15
+
16
+ # Not cancelled by default. Overridden in the child class.
17
+ def cancelled?
18
+ false
19
+ end
20
+
21
+ def message
22
+ end
23
+
24
+ def parse(query_string)
25
+ return {} if query_string.blank?
26
+
27
+ query_string.split('&').inject({}) do |memo, chunk|
28
+ next if chunk.empty?
29
+ key, value = chunk.split('=', 2)
30
+ next if key.empty?
31
+ value = value.nil? ? nil : CGI.unescape(value)
32
+ memo[CGI.unescape(key)] = value
33
+ memo
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,3 @@
1
+ module OffsitePayments
2
+ VERSION = "2.0.0"
3
+ end
metadata ADDED
@@ -0,0 +1,270 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: offsite_payments
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Tobias Luetke
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-06-04 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 3.2.14
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: 5.0.0
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: 3.2.14
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: 5.0.0
33
+ - !ruby/object:Gem::Dependency
34
+ name: i18n
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '0.5'
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '0.5'
47
+ - !ruby/object:Gem::Dependency
48
+ name: money
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "<"
52
+ - !ruby/object:Gem::Version
53
+ version: 7.0.0
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "<"
59
+ - !ruby/object:Gem::Version
60
+ version: 7.0.0
61
+ - !ruby/object:Gem::Dependency
62
+ name: builder
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: 2.1.2
68
+ - - "<"
69
+ - !ruby/object:Gem::Version
70
+ version: 4.0.0
71
+ type: :runtime
72
+ prerelease: false
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ version: 2.1.2
78
+ - - "<"
79
+ - !ruby/object:Gem::Version
80
+ version: 4.0.0
81
+ - !ruby/object:Gem::Dependency
82
+ name: json
83
+ requirement: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - "~>"
86
+ - !ruby/object:Gem::Version
87
+ version: '1.7'
88
+ type: :runtime
89
+ prerelease: false
90
+ version_requirements: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - "~>"
93
+ - !ruby/object:Gem::Version
94
+ version: '1.7'
95
+ - !ruby/object:Gem::Dependency
96
+ name: active_utils
97
+ requirement: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - "~>"
100
+ - !ruby/object:Gem::Version
101
+ version: 2.2.0
102
+ type: :runtime
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - "~>"
107
+ - !ruby/object:Gem::Version
108
+ version: 2.2.0
109
+ - !ruby/object:Gem::Dependency
110
+ name: nokogiri
111
+ requirement: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - "~>"
114
+ - !ruby/object:Gem::Version
115
+ version: '1.4'
116
+ type: :runtime
117
+ prerelease: false
118
+ version_requirements: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - "~>"
121
+ - !ruby/object:Gem::Version
122
+ version: '1.4'
123
+ - !ruby/object:Gem::Dependency
124
+ name: rake
125
+ requirement: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ version: '0'
130
+ type: :development
131
+ prerelease: false
132
+ version_requirements: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - ">="
135
+ - !ruby/object:Gem::Version
136
+ version: '0'
137
+ - !ruby/object:Gem::Dependency
138
+ name: mocha
139
+ requirement: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - "~>"
142
+ - !ruby/object:Gem::Version
143
+ version: 0.13.0
144
+ type: :development
145
+ prerelease: false
146
+ version_requirements: !ruby/object:Gem::Requirement
147
+ requirements:
148
+ - - "~>"
149
+ - !ruby/object:Gem::Version
150
+ version: 0.13.0
151
+ - !ruby/object:Gem::Dependency
152
+ name: rails
153
+ requirement: !ruby/object:Gem::Requirement
154
+ requirements:
155
+ - - ">="
156
+ - !ruby/object:Gem::Version
157
+ version: 3.2.14
158
+ type: :development
159
+ prerelease: false
160
+ version_requirements: !ruby/object:Gem::Requirement
161
+ requirements:
162
+ - - ">="
163
+ - !ruby/object:Gem::Version
164
+ version: 3.2.14
165
+ - !ruby/object:Gem::Dependency
166
+ name: thor
167
+ requirement: !ruby/object:Gem::Requirement
168
+ requirements:
169
+ - - ">="
170
+ - !ruby/object:Gem::Version
171
+ version: '0'
172
+ type: :development
173
+ prerelease: false
174
+ version_requirements: !ruby/object:Gem::Requirement
175
+ requirements:
176
+ - - ">="
177
+ - !ruby/object:Gem::Version
178
+ version: '0'
179
+ description: Offsite Payments is a simple abstraction library used in and sponsored
180
+ by Shopify. It is written by Tobias Luetke, Cody Fauser, and contributors. The aim
181
+ of the project is to put as simple an abstraction as possible on top of offsite
182
+ (often called hosted) payment pages, and allow contributors to easily help services
183
+ such as Shopify extend the number of offsite payment services they support.
184
+ email: tobi@shopify.com
185
+ executables: []
186
+ extensions: []
187
+ extra_rdoc_files: []
188
+ files:
189
+ - MIT-LICENSE
190
+ - README.md
191
+ - lib/offsite_payments.rb
192
+ - lib/offsite_payments/action_view_helper.rb
193
+ - lib/offsite_payments/helper.rb
194
+ - lib/offsite_payments/integrations.rb
195
+ - lib/offsite_payments/integrations/a1agregator.rb
196
+ - lib/offsite_payments/integrations/authorize_net_sim.rb
197
+ - lib/offsite_payments/integrations/bit_pay.rb
198
+ - lib/offsite_payments/integrations/bogus.rb
199
+ - lib/offsite_payments/integrations/chronopay.rb
200
+ - lib/offsite_payments/integrations/citrus.rb
201
+ - lib/offsite_payments/integrations/direc_pay.rb
202
+ - lib/offsite_payments/integrations/directebanking.rb
203
+ - lib/offsite_payments/integrations/doku.rb
204
+ - lib/offsite_payments/integrations/dotpay.rb
205
+ - lib/offsite_payments/integrations/dwolla.rb
206
+ - lib/offsite_payments/integrations/e_payment_plans.rb
207
+ - lib/offsite_payments/integrations/easy_pay.rb
208
+ - lib/offsite_payments/integrations/epay.rb
209
+ - lib/offsite_payments/integrations/first_data.rb
210
+ - lib/offsite_payments/integrations/gestpay.rb
211
+ - lib/offsite_payments/integrations/hi_trust.rb
212
+ - lib/offsite_payments/integrations/ipay88.rb
213
+ - lib/offsite_payments/integrations/klarna.rb
214
+ - lib/offsite_payments/integrations/liqpay.rb
215
+ - lib/offsite_payments/integrations/maksuturva.rb
216
+ - lib/offsite_payments/integrations/mollie_ideal.rb
217
+ - lib/offsite_payments/integrations/moneybookers.rb
218
+ - lib/offsite_payments/integrations/nochex.rb
219
+ - lib/offsite_payments/integrations/pag_seguro.rb
220
+ - lib/offsite_payments/integrations/paxum.rb
221
+ - lib/offsite_payments/integrations/pay_fast.rb
222
+ - lib/offsite_payments/integrations/paydollar.rb
223
+ - lib/offsite_payments/integrations/payflow_link.rb
224
+ - lib/offsite_payments/integrations/paypal.rb
225
+ - lib/offsite_payments/integrations/paypal_payments_advanced.rb
226
+ - lib/offsite_payments/integrations/paysbuy.rb
227
+ - lib/offsite_payments/integrations/payu_in.rb
228
+ - lib/offsite_payments/integrations/payu_in_paisa.rb
229
+ - lib/offsite_payments/integrations/platron.rb
230
+ - lib/offsite_payments/integrations/pxpay.rb
231
+ - lib/offsite_payments/integrations/quickpay.rb
232
+ - lib/offsite_payments/integrations/rbkmoney.rb
233
+ - lib/offsite_payments/integrations/robokassa.rb
234
+ - lib/offsite_payments/integrations/sage_pay_form.rb
235
+ - lib/offsite_payments/integrations/two_checkout.rb
236
+ - lib/offsite_payments/integrations/universal.rb
237
+ - lib/offsite_payments/integrations/valitor.rb
238
+ - lib/offsite_payments/integrations/verkkomaksut.rb
239
+ - lib/offsite_payments/integrations/web_pay.rb
240
+ - lib/offsite_payments/integrations/webmoney.rb
241
+ - lib/offsite_payments/integrations/wirecard_checkout_page.rb
242
+ - lib/offsite_payments/integrations/world_pay.rb
243
+ - lib/offsite_payments/notification.rb
244
+ - lib/offsite_payments/return.rb
245
+ - lib/offsite_payments/version.rb
246
+ homepage: https://github.com/Shopify/offsite_payments
247
+ licenses:
248
+ - MIT
249
+ metadata: {}
250
+ post_install_message:
251
+ rdoc_options: []
252
+ require_paths:
253
+ - lib
254
+ required_ruby_version: !ruby/object:Gem::Requirement
255
+ requirements:
256
+ - - ">="
257
+ - !ruby/object:Gem::Version
258
+ version: '0'
259
+ required_rubygems_version: !ruby/object:Gem::Requirement
260
+ requirements:
261
+ - - ">="
262
+ - !ruby/object:Gem::Version
263
+ version: '0'
264
+ requirements: []
265
+ rubyforge_project:
266
+ rubygems_version: 2.2.2
267
+ signing_key:
268
+ specification_version: 4
269
+ summary: Framework and tools for dealing with offsite (hosted) payment pages.
270
+ test_files: []