offsite_payments 2.7.21 → 2.7.22
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 +4 -4
- data/README.md +1 -0
- data/lib/offsite_payments.rb +1 -1
- data/lib/offsite_payments/integrations/quickpay.rb +1 -1
- data/lib/offsite_payments/integrations/quickpay_v10.rb +173 -0
- data/lib/offsite_payments/integrations/universal.rb +0 -1
- data/lib/offsite_payments/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 49a788e055321691469e48ea06db510414df18ddb513bde74dc4aff2901c6d9b
|
4
|
+
data.tar.gz: e1bf2836b3a773832bb49858f1584e1dceb0a18d2503ede84ee0632c76da8a2f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9684dbe104d37f359263b0af474f62ab8e3fabe13462047a06e3939840fa09a70d6f5d5cbe3293630d961ef70d63f16b4d74d76b972c4c6e6da5fd848cf444a0
|
7
|
+
data.tar.gz: bcc832909f3bf9a165088afefc476766a24adbfb52abcab9a7b003eb7bce258e2434aeba424b65c8f3a28038a3c258aed6d975b1eef0faf1c92e45bc525ceb6f
|
data/README.md
CHANGED
@@ -78,6 +78,7 @@ one.
|
|
78
78
|
* [PayDollar](http://www.paydollar.com)
|
79
79
|
* [Paysbuy](https://www.paysbuy.com/) - TH
|
80
80
|
* [Platron](https://www.platron.ru/) - RU
|
81
|
+
* [QuickPay](http://quickpay.net/dk/) - AT, DE, DK, EE, LT, LV, FO, NL, NO, SE, UK
|
81
82
|
* [RBK Money](https://rbkmoney.ru/) - RU
|
82
83
|
* [Robokassa](http://robokassa.ru/) - RU
|
83
84
|
* [SagePay Form](http://www.sagepay.com/products_services/sage_pay_go/integration/form)
|
data/lib/offsite_payments.rb
CHANGED
@@ -40,5 +40,5 @@ module OffsitePayments
|
|
40
40
|
self.mode == :test
|
41
41
|
end
|
42
42
|
|
43
|
-
CURRENCIES_WITHOUT_FRACTIONS = [ 'BIF', 'BYR', 'CLP', 'CVE', 'DJF', 'GNF', '
|
43
|
+
CURRENCIES_WITHOUT_FRACTIONS = [ 'BIF', 'BYR', 'CLP', 'CVE', 'DJF', 'GNF', 'ISK', 'JPY', 'KMF', 'KRW', 'PYG', 'RWF', 'TWD', 'UGX', 'VND', 'VUV', 'XAF', 'XOF', 'XPF' ]
|
44
44
|
end
|
@@ -2,7 +2,7 @@ module OffsitePayments #:nodoc:
|
|
2
2
|
module Integrations #:nodoc:
|
3
3
|
module Quickpay
|
4
4
|
mattr_accessor :service_url
|
5
|
-
self.service_url = 'https://
|
5
|
+
self.service_url = 'https://legacy-proxy.quickpay.net/form/'
|
6
6
|
|
7
7
|
def self.notification(post, options = {})
|
8
8
|
Notification.new(post, options)
|
@@ -0,0 +1,173 @@
|
|
1
|
+
require 'openssl'
|
2
|
+
|
3
|
+
module OffsitePayments #:nodoc:
|
4
|
+
module Integrations #:nodoc:
|
5
|
+
module QuickpayV10
|
6
|
+
mattr_accessor :service_url
|
7
|
+
self.service_url = 'https://payment.quickpay.net'
|
8
|
+
|
9
|
+
def self.notification(post, options = {})
|
10
|
+
Notification.new(post)
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.return(post, options = {})
|
14
|
+
Return.new(post, options)
|
15
|
+
end
|
16
|
+
|
17
|
+
# credential2: Payment window API key
|
18
|
+
class Helper < OffsitePayments::Helper
|
19
|
+
def initialize(order, account, options = {})
|
20
|
+
payment_window_api_key options.delete(:credential2)
|
21
|
+
super
|
22
|
+
add_field('version', 'v10')
|
23
|
+
add_field('type', 'payment')
|
24
|
+
add_field('language', 'da')
|
25
|
+
add_field('autocapture', 0)
|
26
|
+
add_field('order_id', format_order_number(order))
|
27
|
+
end
|
28
|
+
|
29
|
+
def payment_window_api_key(value)
|
30
|
+
@payment_window_api_key = value
|
31
|
+
end
|
32
|
+
|
33
|
+
def form_fields
|
34
|
+
@fields.merge('checksum' => generate_checksum)
|
35
|
+
end
|
36
|
+
|
37
|
+
def flatten_params(obj, result = {}, path = [])
|
38
|
+
case obj
|
39
|
+
when Hash
|
40
|
+
obj.each do |k, v|
|
41
|
+
flatten_params(v, result, [*path, k])
|
42
|
+
end
|
43
|
+
when Array
|
44
|
+
obj.each_with_index do |v, i|
|
45
|
+
flatten_params(v, result, [*path, i])
|
46
|
+
end
|
47
|
+
else
|
48
|
+
result[path.map{|p| "[#{p}]"}.join.to_sym] = obj
|
49
|
+
end
|
50
|
+
result
|
51
|
+
end
|
52
|
+
|
53
|
+
def generate_checksum
|
54
|
+
flattened_params = flatten_params(@fields)
|
55
|
+
values = flattened_params.sort.map { |_, value| value }
|
56
|
+
base = values.join(' ')
|
57
|
+
OpenSSL::HMAC.hexdigest('sha256', @payment_window_api_key, base)
|
58
|
+
end
|
59
|
+
|
60
|
+
# Limited to 20 digits max
|
61
|
+
def format_order_number(number)
|
62
|
+
number.to_s.gsub(/[^\w]/, '').rjust(4, "0")[0...20]
|
63
|
+
end
|
64
|
+
|
65
|
+
mapping :version, 'version'
|
66
|
+
mapping :type, 'type'
|
67
|
+
mapping :account, 'merchant_id'
|
68
|
+
mapping :language, 'language'
|
69
|
+
mapping :amount, 'amount'
|
70
|
+
mapping :currency, 'currency'
|
71
|
+
|
72
|
+
mapping :return_url, 'continueurl'
|
73
|
+
mapping :cancel_return_url, 'cancelurl'
|
74
|
+
mapping :notify_url, 'callbackurl'
|
75
|
+
|
76
|
+
mapping :autocapture, 'autocapture'
|
77
|
+
mapping :autofee, 'autofee'
|
78
|
+
|
79
|
+
mapping :description, 'description'
|
80
|
+
mapping :payment_methods, 'payment_methods'
|
81
|
+
mapping :acquirer, 'acquirer'
|
82
|
+
mapping :branding_id, 'branding_id'
|
83
|
+
mapping :google_analytics_tracking_id, 'google_analytics_tracking_id'
|
84
|
+
mapping :google_analytics_client_id, 'google_analytics_client_id'
|
85
|
+
mapping :variables, 'variables'
|
86
|
+
mapping :text_on_statement, 'text_on_statement'
|
87
|
+
mapping :customer_email, 'customer_email'
|
88
|
+
|
89
|
+
mapping :splitpayment, 'splitpayment'
|
90
|
+
mapping :forcemobile, 'forcemobile'
|
91
|
+
mapping :deadline, 'deadline'
|
92
|
+
mapping :cardhash, 'cardhash'
|
93
|
+
|
94
|
+
mapping :invoice_address, {}
|
95
|
+
mapping :billing_address, {}
|
96
|
+
end
|
97
|
+
|
98
|
+
# credential3: private key
|
99
|
+
# checksum_header: QuickPay-Checksum-Sha256 request header value
|
100
|
+
class Notification < OffsitePayments::Notification
|
101
|
+
# http://tech.quickpay.net/appendixes/errors/
|
102
|
+
def complete?
|
103
|
+
status == '20000'
|
104
|
+
end
|
105
|
+
|
106
|
+
def item_id
|
107
|
+
params['order_id']
|
108
|
+
end
|
109
|
+
|
110
|
+
def transaction_id
|
111
|
+
params['id']
|
112
|
+
end
|
113
|
+
|
114
|
+
def received_at
|
115
|
+
Time.iso8601(params['created_at'])
|
116
|
+
end
|
117
|
+
|
118
|
+
def gross
|
119
|
+
"%.2f" % (gross_cents / 100.0)
|
120
|
+
end
|
121
|
+
|
122
|
+
def gross_cents
|
123
|
+
last_operation['amount']
|
124
|
+
end
|
125
|
+
|
126
|
+
def last_operation
|
127
|
+
params['operations'].last
|
128
|
+
end
|
129
|
+
|
130
|
+
def status
|
131
|
+
last_operation['qp_status_code'] if last_operation
|
132
|
+
end
|
133
|
+
|
134
|
+
# Provide access to raw fields from quickpay
|
135
|
+
%w(
|
136
|
+
accepted
|
137
|
+
test_mode
|
138
|
+
branding_id
|
139
|
+
variables
|
140
|
+
acquirer
|
141
|
+
operations
|
142
|
+
metadata
|
143
|
+
balance
|
144
|
+
currency
|
145
|
+
).each do |attr|
|
146
|
+
define_method(attr) do
|
147
|
+
params[attr]
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
def generate_checksum
|
152
|
+
OpenSSL::HMAC.hexdigest('sha256', @options[:credential3], @raw)
|
153
|
+
end
|
154
|
+
|
155
|
+
def checksum_header
|
156
|
+
@options[:checksum_header]
|
157
|
+
end
|
158
|
+
|
159
|
+
# Quickpay doesn't do acknowledgements of callback notifications
|
160
|
+
# Instead it provides a SHA256 checksum header
|
161
|
+
def acknowledge(authcode = nil)
|
162
|
+
generate_checksum == checksum_header
|
163
|
+
end
|
164
|
+
|
165
|
+
# Take the posted data and move the relevant data into a hash
|
166
|
+
def parse(post)
|
167
|
+
@raw = post.to_s
|
168
|
+
@params = JSON.parse(post)
|
169
|
+
end
|
170
|
+
end
|
171
|
+
end
|
172
|
+
end
|
173
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: offsite_payments
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.7.
|
4
|
+
version: 2.7.22
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tobias Luetke
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-03-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -257,6 +257,7 @@ files:
|
|
257
257
|
- lib/offsite_payments/integrations/platron.rb
|
258
258
|
- lib/offsite_payments/integrations/pxpay.rb
|
259
259
|
- lib/offsite_payments/integrations/quickpay.rb
|
260
|
+
- lib/offsite_payments/integrations/quickpay_v10.rb
|
260
261
|
- lib/offsite_payments/integrations/rbkmoney.rb
|
261
262
|
- lib/offsite_payments/integrations/realex_offsite.rb
|
262
263
|
- lib/offsite_payments/integrations/robokassa.rb
|