offsite_payments 2.0.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.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +70 -0
- data/lib/offsite_payments.rb +46 -0
- data/lib/offsite_payments/action_view_helper.rb +72 -0
- data/lib/offsite_payments/helper.rb +119 -0
- data/lib/offsite_payments/integrations.rb +14 -0
- data/lib/offsite_payments/integrations/a1agregator.rb +245 -0
- data/lib/offsite_payments/integrations/authorize_net_sim.rb +580 -0
- data/lib/offsite_payments/integrations/bit_pay.rb +150 -0
- data/lib/offsite_payments/integrations/bogus.rb +32 -0
- data/lib/offsite_payments/integrations/chronopay.rb +283 -0
- data/lib/offsite_payments/integrations/citrus.rb +227 -0
- data/lib/offsite_payments/integrations/direc_pay.rb +339 -0
- data/lib/offsite_payments/integrations/directebanking.rb +237 -0
- data/lib/offsite_payments/integrations/doku.rb +171 -0
- data/lib/offsite_payments/integrations/dotpay.rb +166 -0
- data/lib/offsite_payments/integrations/dwolla.rb +160 -0
- data/lib/offsite_payments/integrations/e_payment_plans.rb +146 -0
- data/lib/offsite_payments/integrations/easy_pay.rb +137 -0
- data/lib/offsite_payments/integrations/epay.rb +161 -0
- data/lib/offsite_payments/integrations/first_data.rb +133 -0
- data/lib/offsite_payments/integrations/gestpay.rb +201 -0
- data/lib/offsite_payments/integrations/hi_trust.rb +179 -0
- data/lib/offsite_payments/integrations/ipay88.rb +240 -0
- data/lib/offsite_payments/integrations/klarna.rb +291 -0
- data/lib/offsite_payments/integrations/liqpay.rb +216 -0
- data/lib/offsite_payments/integrations/maksuturva.rb +231 -0
- data/lib/offsite_payments/integrations/mollie_ideal.rb +213 -0
- data/lib/offsite_payments/integrations/moneybookers.rb +199 -0
- data/lib/offsite_payments/integrations/nochex.rb +228 -0
- data/lib/offsite_payments/integrations/pag_seguro.rb +255 -0
- data/lib/offsite_payments/integrations/paxum.rb +114 -0
- data/lib/offsite_payments/integrations/pay_fast.rb +269 -0
- data/lib/offsite_payments/integrations/paydollar.rb +142 -0
- data/lib/offsite_payments/integrations/payflow_link.rb +194 -0
- data/lib/offsite_payments/integrations/paypal.rb +362 -0
- data/lib/offsite_payments/integrations/paypal_payments_advanced.rb +23 -0
- data/lib/offsite_payments/integrations/paysbuy.rb +71 -0
- data/lib/offsite_payments/integrations/payu_in.rb +266 -0
- data/lib/offsite_payments/integrations/payu_in_paisa.rb +46 -0
- data/lib/offsite_payments/integrations/platron.rb +153 -0
- data/lib/offsite_payments/integrations/pxpay.rb +271 -0
- data/lib/offsite_payments/integrations/quickpay.rb +232 -0
- data/lib/offsite_payments/integrations/rbkmoney.rb +110 -0
- data/lib/offsite_payments/integrations/robokassa.rb +154 -0
- data/lib/offsite_payments/integrations/sage_pay_form.rb +425 -0
- data/lib/offsite_payments/integrations/two_checkout.rb +332 -0
- data/lib/offsite_payments/integrations/universal.rb +180 -0
- data/lib/offsite_payments/integrations/valitor.rb +200 -0
- data/lib/offsite_payments/integrations/verkkomaksut.rb +143 -0
- data/lib/offsite_payments/integrations/web_pay.rb +186 -0
- data/lib/offsite_payments/integrations/webmoney.rb +119 -0
- data/lib/offsite_payments/integrations/wirecard_checkout_page.rb +359 -0
- data/lib/offsite_payments/integrations/world_pay.rb +273 -0
- data/lib/offsite_payments/notification.rb +71 -0
- data/lib/offsite_payments/return.rb +37 -0
- data/lib/offsite_payments/version.rb +3 -0
- 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
|
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(' '))
|
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
|
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: []
|