offsite_payments 2.7.20 → 2.7.21
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 -1
- data/lib/offsite_payments/integrations/realex_offsite.rb +190 -7
- data/lib/offsite_payments/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 11d3af9b6ea7b963a53bba9b38c1c0495aa8a676a5d15a081fff92461ea7848c
|
4
|
+
data.tar.gz: d68bbaabd36c6e31f4ccdd9c77245dfb8adc1596dd9e8b71ba2042f1de010760
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 57c6f0dda0656e8a528eec91ff862d7580c2603559011d0ee2ddc7fbb437244ef2c3ee111fcf2b7a35ca34c68235a85debc77f33477b5bdb7b07beaa3b759db6
|
7
|
+
data.tar.gz: 50b50027b8cd16ed325e3e12692f775d615d32f6caa187882e89dfedb10cbdc63c4170278e8ae20ddd5e5ea056c1feaa85292efe4290bb4066204d25825b68d5
|
data/README.md
CHANGED
@@ -67,6 +67,7 @@ one.
|
|
67
67
|
* [Dwolla](https://www.dwolla.com/default.aspx)
|
68
68
|
* [ePay](http://www.epay.dk/epay-payment-solutions/)
|
69
69
|
* [First Data](https://firstdata.zendesk.com/entries/407522-first-data-global-gateway-e4sm-payment-pages-integration-manual)
|
70
|
+
* [Realex](https://www.globalpaymentsinc.com)
|
70
71
|
* [HiTRUST](http://www.hitrust.com.hk/)
|
71
72
|
* [MOLPay](http://www.molpay.com/v2/) - MY, SG, ID, TH, VN, PH, CN, AU
|
72
73
|
* [Moneybookers](http://www.moneybookers.com)
|
@@ -77,7 +78,6 @@ one.
|
|
77
78
|
* [PayDollar](http://www.paydollar.com)
|
78
79
|
* [Paysbuy](https://www.paysbuy.com/) - TH
|
79
80
|
* [Platron](https://www.platron.ru/) - RU
|
80
|
-
* [Realex](http://www.realexpayments.com)
|
81
81
|
* [RBK Money](https://rbkmoney.ru/) - RU
|
82
82
|
* [Robokassa](http://robokassa.ru/) - RU
|
83
83
|
* [SagePay Form](http://www.sagepay.com/products_services/sage_pay_go/integration/form)
|
@@ -63,6 +63,85 @@ module OffsitePayments #:nodoc:
|
|
63
63
|
'COU' => 4
|
64
64
|
}
|
65
65
|
|
66
|
+
CANADIAN_STATES = {
|
67
|
+
'AB' => 'Alberta',
|
68
|
+
'BC' => 'British Columbia',
|
69
|
+
'MB' => 'Manitoba',
|
70
|
+
'NB' => 'New Brunswick',
|
71
|
+
'NL' => 'Newfoundland',
|
72
|
+
'NS' => 'Nova Scotia',
|
73
|
+
'NU' => 'Nunavut',
|
74
|
+
'NT' => 'Northwest Territories',
|
75
|
+
'ON' => 'Ontario',
|
76
|
+
'PE' => 'Prince Edward Island',
|
77
|
+
'QC' => 'Quebec',
|
78
|
+
'SK' => 'Saskatchewan',
|
79
|
+
'YT' => 'Yukon'
|
80
|
+
}
|
81
|
+
|
82
|
+
US_STATES = {
|
83
|
+
'AL' => 'Alabama',
|
84
|
+
'AK' => 'Alaska',
|
85
|
+
'AS' => 'American Samoa',
|
86
|
+
'AZ' => 'Arizona',
|
87
|
+
'AR' => 'Arkansas',
|
88
|
+
'CA' => 'California',
|
89
|
+
'CO' => 'Colorado',
|
90
|
+
'CT' => 'Connecticut',
|
91
|
+
'DE' => 'Delaware',
|
92
|
+
'DC' => 'District Of Columbia',
|
93
|
+
'FM' => 'Federated States Of Micronesia',
|
94
|
+
'FL' => 'Florida',
|
95
|
+
'GA' => 'Georgia',
|
96
|
+
'GU' => 'Guam',
|
97
|
+
'HI' => 'Hawaii',
|
98
|
+
'ID' => 'Idaho',
|
99
|
+
'IL' => 'Illinois',
|
100
|
+
'IN' => 'Indiana',
|
101
|
+
'IA' => 'Iowa',
|
102
|
+
'KS' => 'Kansas',
|
103
|
+
'KY' => 'Kentucky',
|
104
|
+
'LA' => 'Louisiana',
|
105
|
+
'ME' => 'Maine',
|
106
|
+
'MH' => 'Marshall Islands',
|
107
|
+
'MD' => 'Maryland',
|
108
|
+
'MA' => 'Massachusetts',
|
109
|
+
'MI' => 'Michigan',
|
110
|
+
'MN' => 'Minnesota',
|
111
|
+
'MS' => 'Mississippi',
|
112
|
+
'MO' => 'Missouri',
|
113
|
+
'MT' => 'Montana',
|
114
|
+
'NE' => 'Nebraska',
|
115
|
+
'NV' => 'Nevada',
|
116
|
+
'NH' => 'New Hampshire',
|
117
|
+
'NJ' => 'New Jersey',
|
118
|
+
'NM' => 'New Mexico',
|
119
|
+
'NY' => 'New York',
|
120
|
+
'NC' => 'North Carolina',
|
121
|
+
'ND' => 'North Dakota',
|
122
|
+
'MP' => 'Northern Mariana Islands',
|
123
|
+
'OH' => 'Ohio',
|
124
|
+
'OK' => 'Oklahoma',
|
125
|
+
'OR' => 'Oregon',
|
126
|
+
'PW' => 'Palau',
|
127
|
+
'PA' => 'Pennsylvania',
|
128
|
+
'PR' => 'Puerto Rico',
|
129
|
+
'RI' => 'Rhode Island',
|
130
|
+
'SC' => 'South Carolina',
|
131
|
+
'SD' => 'South Dakota',
|
132
|
+
'TN' => 'Tennessee',
|
133
|
+
'TX' => 'Texas',
|
134
|
+
'UT' => 'Utah',
|
135
|
+
'VT' => 'Vermont',
|
136
|
+
'VI' => 'Virgin Islands',
|
137
|
+
'VA' => 'Virginia',
|
138
|
+
'WA' => 'Washington',
|
139
|
+
'WV' => 'West Virginia',
|
140
|
+
'WI' => 'Wisconsin',
|
141
|
+
'WY' => 'Wyoming'
|
142
|
+
}
|
143
|
+
|
144
|
+
|
66
145
|
def create_signature(fields, secret)
|
67
146
|
data = fields.join('.')
|
68
147
|
digest = Digest::SHA1.hexdigest(data)
|
@@ -96,11 +175,51 @@ module OffsitePayments #:nodoc:
|
|
96
175
|
[extract_digits(params[:zip]), extract_digits(params[:address1])].join('|')
|
97
176
|
end
|
98
177
|
|
178
|
+
def extract_address_match_indicator(value)
|
179
|
+
value ? 'TRUE' : 'FALSE'
|
180
|
+
end
|
181
|
+
|
182
|
+
# The home phone number provided by the Cardholder. Should be In format:
|
183
|
+
# of 'CountryCallingCode|Number' for example, '1|123456789'.
|
184
|
+
def format_phone_number(phone_number)
|
185
|
+
return nil if phone_number.nil?
|
186
|
+
|
187
|
+
clean_number = phone_number.gsub(/\D/, '')
|
188
|
+
|
189
|
+
return phone_number if clean_number.length < 10
|
190
|
+
|
191
|
+
country_code = clean_number[0, clean_number.length - 9]
|
192
|
+
number = clean_number[clean_number.length - 9, clean_number.length]
|
193
|
+
|
194
|
+
"#{country_code}|#{number}"
|
195
|
+
end
|
196
|
+
|
197
|
+
def lookup_state_code(country_code, state)
|
198
|
+
case country_code
|
199
|
+
when 'CA'
|
200
|
+
state_code = CANADIAN_STATES.find { |code, state_name| state_name.downcase == state.downcase}
|
201
|
+
state_code ? state_code.first : state
|
202
|
+
when 'US'
|
203
|
+
state_code = US_STATES.find { |code, state_name| state_name.downcase == state.downcase}
|
204
|
+
state_code ? state_code.first : state
|
205
|
+
end
|
206
|
+
end
|
207
|
+
|
208
|
+
# if HPP_ADDRESS_MATCH_INDICATOR is set to TRUE
|
209
|
+
# HPP requires the shipping address to be sent from the billing address
|
210
|
+
def copy_billing_address
|
211
|
+
@fields.select { |k, _| k.start_with? 'HPP_BILLING_' }
|
212
|
+
.each do |k, v|
|
213
|
+
add_field("HPP_SHIPPING_#{k.split('HPP_BILLING_')[1]}", v)
|
214
|
+
end
|
215
|
+
end
|
99
216
|
end
|
100
217
|
|
101
218
|
class Helper < OffsitePayments::Helper
|
102
219
|
include Common
|
103
220
|
|
221
|
+
self.country_format = :numeric
|
222
|
+
|
104
223
|
def initialize(order, account, options = {})
|
105
224
|
@timestamp = Time.now.strftime('%Y%m%d%H%M%S')
|
106
225
|
@currency = options[:currency]
|
@@ -115,11 +234,13 @@ module OffsitePayments #:nodoc:
|
|
115
234
|
add_field 'AUTO_SETTLE_FLAG', '1'
|
116
235
|
add_field 'RETURN_TSS', '1'
|
117
236
|
add_field 'TIMESTAMP', @timestamp
|
237
|
+
add_field 'HPP_VERSION', '2'
|
118
238
|
# Realex does not send back CURRENCY param in response
|
119
239
|
# however it does echo any other param so we send it twice.
|
120
240
|
add_field 'X-CURRENCY', @currency
|
121
241
|
add_field 'X-TEST', @test.to_s
|
122
242
|
add_field 'ORDER_ID', "#{order}#{@timestamp.to_i}"
|
243
|
+
add_field 'COMMENT1', application_id
|
123
244
|
end
|
124
245
|
|
125
246
|
def form_fields
|
@@ -131,13 +252,59 @@ module OffsitePayments #:nodoc:
|
|
131
252
|
end
|
132
253
|
|
133
254
|
def billing_address(params={})
|
255
|
+
country = params[:country]
|
256
|
+
country_code = lookup_country_code(country, :alpha2)
|
257
|
+
super
|
258
|
+
|
134
259
|
add_field(mappings[:billing_address][:zip], extract_avs_code(params))
|
135
|
-
add_field(mappings[:billing_address][:country], lookup_country_code(
|
260
|
+
add_field(mappings[:billing_address][:country], lookup_country_code(country))
|
261
|
+
|
262
|
+
if ['US', 'CA'].include?(country_code) && params[:state].length > 2
|
263
|
+
add_field(mappings[:billing_address][:state], lookup_state_code(country_code, params[:state]))
|
264
|
+
end
|
136
265
|
end
|
137
266
|
|
138
267
|
def shipping_address(params={})
|
268
|
+
country = params[:country]
|
269
|
+
country_code = lookup_country_code(country, :alpha2)
|
270
|
+
super
|
271
|
+
|
139
272
|
add_field(mappings[:shipping_address][:zip], extract_avs_code(params))
|
140
273
|
add_field(mappings[:shipping_address][:country], lookup_country_code(params[:country]))
|
274
|
+
|
275
|
+
if ['US', 'CA'].include?(country_code) && params[:state].length > 2
|
276
|
+
add_field(mappings[:shipping_address][:state], lookup_state_code(country_code, params[:state]))
|
277
|
+
end
|
278
|
+
end
|
279
|
+
|
280
|
+
def customer(params={})
|
281
|
+
super
|
282
|
+
add_field(mappings[:customer][:phone], format_phone_number(params[:phone]))
|
283
|
+
end
|
284
|
+
|
285
|
+
def addresses_match(address_match = nil)
|
286
|
+
return if address_match.nil?
|
287
|
+
|
288
|
+
add_field(
|
289
|
+
mappings[:addresses_match],
|
290
|
+
extract_address_match_indicator(address_match)
|
291
|
+
)
|
292
|
+
|
293
|
+
copy_billing_address if address_match
|
294
|
+
end
|
295
|
+
|
296
|
+
def comment(comment = nil)
|
297
|
+
add_field(mappings[:comment], comment)
|
298
|
+
end
|
299
|
+
|
300
|
+
# HPP does not want shipping address and HPP_ADDRESS_MATCH_INDICATOR to be sent
|
301
|
+
# if the product does not require shipping
|
302
|
+
def require_shipping(require_shipping = nil)
|
303
|
+
return unless require_shipping == false
|
304
|
+
|
305
|
+
@fields.delete_if do |k, _|
|
306
|
+
k.start_with?('HPP_SHIPPING_') || k == 'HPP_ADDRESS_MATCH_INDICATOR'
|
307
|
+
end
|
141
308
|
end
|
142
309
|
|
143
310
|
def sign_fields
|
@@ -161,13 +328,29 @@ module OffsitePayments #:nodoc:
|
|
161
328
|
mapping :notify_url, 'MERCHANT_RESPONSE_URL'
|
162
329
|
mapping :return_url, 'MERCHANT_RETURN_URL'
|
163
330
|
|
164
|
-
# Realex Optional fields
|
165
|
-
mapping :customer, :email => 'CUST_NUM'
|
166
331
|
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
332
|
+
# Realex Optional fields
|
333
|
+
mapping :customer, :email => 'HPP_CUSTOMER_EMAIL',
|
334
|
+
:phone => 'HPP_CUSTOMER_PHONENUMBER_MOBILE'
|
335
|
+
|
336
|
+
mapping :shipping_address, :zip => 'HPP_SHIPPING_POSTALCODE',
|
337
|
+
:country => 'HPP_SHIPPING_COUNTRY',
|
338
|
+
:address1 => 'HPP_SHIPPING_STREET1',
|
339
|
+
:address2 => 'HPP_SHIPPING_STREET2',
|
340
|
+
:address3 => 'HPP_SHIPPING_STREET3',
|
341
|
+
:city => 'HPP_SHIPPING_CITY',
|
342
|
+
:state => 'HPP_SHIPPING_STATE'
|
343
|
+
|
344
|
+
mapping :billing_address, :zip => 'HPP_BILLING_POSTALCODE',
|
345
|
+
:country => 'HPP_BILLING_COUNTRY',
|
346
|
+
:address1 => 'HPP_BILLING_STREET1',
|
347
|
+
:address2 => 'HPP_BILLING_STREET2',
|
348
|
+
:address3 => 'HPP_BILLING_STREET3',
|
349
|
+
:city => 'HPP_BILLING_CITY',
|
350
|
+
:state => 'HPP_BILLING_STATE'
|
351
|
+
|
352
|
+
mapping :addresses_match, 'HPP_ADDRESS_MATCH_INDICATOR'
|
353
|
+
mapping :comment, 'COMMENT2'
|
171
354
|
end
|
172
355
|
|
173
356
|
class Notification < OffsitePayments::Notification
|
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.21
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tobias Luetke
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-09-
|
11
|
+
date: 2019-09-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|