nexio_activemerchant 0.1.0 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dfb690b171aa84d521a855689a86cc301b580820564b6d510d800cda2bdd686f
4
- data.tar.gz: e8328d6c3d67a4bae931833627ee611722b0dfd3c29f288c6e50bd34aeefba4f
3
+ metadata.gz: 3fee4e8586b27556107241251a935bdc43ed0a5a6071511a0307b3c2542d891f
4
+ data.tar.gz: 8adc6b9e898e8b41016f380854c0450f31b21e033134e921f97e8d63d7f47886
5
5
  SHA512:
6
- metadata.gz: 9db4a030573f29a2e6e94a7f9a3d4c44022741a4d792bc2d04f55c1fe84ef72f5e54088670ac88502456ff21f04f599cd06a1d1981b0575f50cc5443e6f0c8e7
7
- data.tar.gz: b865b5f47ab674b4dc1e823887bb1461f2fd8c3b90aa791776da518dec9feb729b13949aeb0767269fe6bf0b0b248272ba4eee33d85203bd22c1390abf0db431
6
+ metadata.gz: 6dcf35fb8da06141ed952109bccd03fdbb885325237210b2d17fa22291708e17b3ce3e0bcb330b8d8d5a447d11b7a87dd35c26851572f0115515c2c1e60b76d4
7
+ data.tar.gz: 4b1421517e5a04defdd269948cd6a72de85a8c90589a00fd3ca39ba02b892abd753aa119f7fffb7f9aeb48c8553111fb98b36e89414326c5ba79702a0493fbcc
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2021 Whitespectre
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -18,8 +18,8 @@ module ActiveMerchant
18
18
 
19
19
  if empty?(brand)
20
20
  errors << [:brand, 'is required'] if own_form
21
- els
22
- errors << [:brand, 'is invalid'] unless self.class.card_companies.include?(brand)
21
+ elsif !self.class.card_companies.include?(brand)
22
+ errors << [:brand, 'is invalid']
23
23
  end
24
24
 
25
25
  errors << [:encrypted_number, 'is required'] if empty?(encrypted_number)
@@ -38,6 +38,11 @@ module ActiveMerchant
38
38
 
39
39
  def purchase(money, payment, options = {})
40
40
  post = build_payload(options)
41
+ post[:processingOptions] ||= {}
42
+ post[:processingOptions][:verboseResponse] = true if test?
43
+ post[:processingOptions][:customerRedirectUrl] = options[:three_d_callback_url] if options.key?(:three_d_callback_url)
44
+ post[:processingOptions][:check3ds] = options[:three_d_secure]
45
+ post[:processingOptions][:paymentType] = options[:payment_type] if options.key?(:payment_type)
41
46
  add_invoice(post, money, options)
42
47
  add_payment(post, payment, options)
43
48
  add_order_data(post, options)
@@ -48,16 +53,17 @@ module ActiveMerchant
48
53
  purchase(money, payment, options.merge(payload: options.fetch(:payload, {}).merge(isAuthOnly: true)))
49
54
  end
50
55
 
51
- def capture(_money, _authorization, _options = {})
52
- commit('capture', post)
56
+ def capture(money, authorization, _options = {})
57
+ commit('capture', { id: authorization, data: { amount: amount(money).to_f } })
53
58
  end
54
59
 
55
- def refund(_money, _authorization, _options = {})
56
- commit('refund', post)
60
+ def refund(money, authorization, _options = {})
61
+ commit('refund', { id: authorization, data: { amount: amount(money).to_f } })
57
62
  end
63
+ alias credit refund
58
64
 
59
- def void(_authorization, _options = {})
60
- commit('void', post)
65
+ def void(authorization, _options = {})
66
+ commit('void', { id: authorization })
61
67
  end
62
68
 
63
69
  def verify(credit_card, options = {})
@@ -86,6 +92,31 @@ module ActiveMerchant
86
92
  resp.params.fetch('token', {}).fetch('token', nil)
87
93
  end
88
94
 
95
+ def set_webhooks(data)
96
+ post = { merchantId: options[:merchant_id].to_s }
97
+ if data.is_a?(String)
98
+ post[:webhooks] = {
99
+ TRANSACTION_AUTHORIZED: { url: data },
100
+ TRANSACTION_CAPTURED: { url: data }
101
+ }
102
+ else
103
+ webhooks = {}
104
+ webhooks[:TRANSACTION_AUTHORIZED] = { url: data[:authorized] } if data.key?(:authorized)
105
+ webhooks[:TRANSACTION_CAPTURED] = { url: data[:captured] } if data.key?(:captured)
106
+ post[:webhooks] = webhooks
107
+ end
108
+ commit('webhook', post)
109
+ end
110
+
111
+ def set_secret
112
+ commit('secret', { merchantId: options[:merchant_id].to_s }).params['secret']
113
+ end
114
+
115
+ def get_transaction(id)
116
+ parse(ssl_get(action_url("/transaction/v3/paymentId/#{id}"), base_headers))
117
+ rescue ResponseError => e
118
+ end
119
+
89
120
  private
90
121
 
91
122
  def add_invoice(post, money, options)
@@ -153,6 +184,12 @@ module ActiveMerchant
153
184
 
154
185
  def add_payment(post, payment, options)
155
186
  post[:tokenex] = token_from(payment)
187
+ if payment.is_a?(Spree::CreditCard)
188
+ post[:card] = {
189
+ cardHolderName: payment.name,
190
+ cardType: payment.brand
191
+ }
192
+ end
156
193
  post[:processingOptions] ||= {}
157
194
  post[:processingOptions][:merchantId] = self.options[:merchant_id].to_s
158
195
  post[:processingOptions][:saveCardToken] = options[:save_credit_card] if options.key?(:save_credit_card)
@@ -163,7 +200,8 @@ module ActiveMerchant
163
200
 
164
201
  {
165
202
  token: payment.gateway_payment_profile_id,
166
- lastFour: payment.last_digits
203
+ lastFour: payment.last_digits,
204
+ cardType: payment.brand
167
205
  }
168
206
  end
169
207
 
@@ -202,11 +240,10 @@ module ActiveMerchant
202
240
  end
203
241
 
204
242
  def commit(action, parameters)
205
- payload = parse(ssl_post(action_url(action, parameters), post_data(action, parameters),
206
- Authorization: "Basic #{options[:auth_token]}"))
243
+ payload = parse(ssl_post(commit_action_url(action, parameters), post_data(action, parameters), base_headers))
207
244
 
208
245
  Response.new(
209
- true,
246
+ response_status(action, payload),
210
247
  nil,
211
248
  payload,
212
249
  authorization: authorization_from(payload),
@@ -226,6 +263,14 @@ module ActiveMerchant
226
263
  )
227
264
  end
228
265
 
266
+ def response_status(action, payload)
267
+ case action
268
+ when 'process' then authorization_from(payload).present?
269
+ else
270
+ true
271
+ end
272
+ end
273
+
229
274
  def authorization_from(payload)
230
275
  payload.fetch('id', nil)
231
276
  end
@@ -234,8 +279,17 @@ module ActiveMerchant
234
279
  parameters.to_json
235
280
  end
236
281
 
237
- def action_url(action, _parameters)
238
- path = "/pay/v3/#{action}"
282
+ def commit_action_url(action, _parameters)
283
+ path = case action
284
+ when 'webhook' then '/webhook/v3/config'
285
+ when 'secret' then '/webhook/v3/secret'
286
+ else
287
+ "/pay/v3/#{action}"
288
+ end
289
+ action_url(path)
290
+ end
291
+
292
+ def action_url(path)
239
293
  "#{test? ? test_url : live_url}#{path}"
240
294
  end
241
295
 
@@ -254,6 +308,10 @@ module ActiveMerchant
254
308
  def build_payload(options)
255
309
  { data: { customer: {} } }.merge!(options.fetch(:payload, {}))
256
310
  end
311
+
312
+ def base_headers(custom = {})
313
+ { Authorization: "Basic #{options[:auth_token]}" }
314
+ end
257
315
  end
258
316
  end
259
317
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'activemerchant'
4
+ require 'active_merchant/billing/rails'
4
5
  require 'active_merchant/billing/encrypted_nexio_card'
5
6
  require 'active_merchant/billing/gateways/nexio'
6
7
  require 'nexio_activemerchant/version'
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module NexioActivemerchant
4
- VERSION = '0.1.0'
4
+ VERSION = '0.2.2'
5
5
  end
@@ -7,6 +7,7 @@ Gem::Specification.new do |spec|
7
7
  spec.version = NexioActivemerchant::VERSION
8
8
  spec.authors = %w[Whitespectre]
9
9
  spec.email = %w[hello@whitespectre.com]
10
+ spec.licenses = %w[MIT]
10
11
 
11
12
  spec.summary = 'ActiveMechant gateway for Nexio'
12
13
  spec.homepage = 'https://github.com/whitespectre/nexio_activemerchant'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nexio_activemerchant
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Whitespectre
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-07-15 00:00:00.000000000 Z
11
+ date: 2021-08-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemerchant
@@ -51,6 +51,7 @@ files:
51
51
  - ".travis.yml"
52
52
  - CHANGELOG
53
53
  - Gemfile
54
+ - LICENSE
54
55
  - README.md
55
56
  - Rakefile
56
57
  - bin/console
@@ -61,7 +62,8 @@ files:
61
62
  - lib/nexio_activemerchant/version.rb
62
63
  - nexio_activemerchant.gemspec
63
64
  homepage: https://github.com/whitespectre/nexio_activemerchant
64
- licenses: []
65
+ licenses:
66
+ - MIT
65
67
  metadata:
66
68
  homepage_uri: https://github.com/whitespectre/nexio_activemerchant
67
69
  source_code_uri: https://github.com/whitespectre/nexio_activemerchant