rails-gp-webpay 0.1.1 → 0.2.4

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: 68c5ca63691f25cc1393da75ba8d9dc4c6017cbb2afb30390b172c315c6aa2f8
4
- data.tar.gz: 01116c56a2f03dca5d85c751e161cbbb12b88bc82753492edf0a68122c3ed1ee
3
+ metadata.gz: 7caabd56b08f1dfb22f11c8adf9ae7203f7168e519f61053e0f6824c8df6de24
4
+ data.tar.gz: 7407825456302d22c9b805009e3f77d89643c70b09d7627effa57c89b6f82177
5
5
  SHA512:
6
- metadata.gz: 1bc34b6adf6f06b1501a194b115ee5d424f35444b3d578fba4e7c4f1aaf0a613f817a105763867dba0e2313df73e02b2cb47c0805260f6b76416c33e06b17a8b
7
- data.tar.gz: 4e4ba67b3332391b60ffe0e7f428562f495cc9a0602523c947b243fe81bcf671011ac4551740d5a9622112da963816c58445113eb0279c178cec98f2edeed154
6
+ metadata.gz: dfa85755e1d2295c46eafe73d280cc1fd4ececb9702931b45e5c0de9ac3dbdc30137eb88a4838ff3e3fab99b06d6618f4189900861635188eb02f15cc2a10239
7
+ data.tar.gz: c5b76adde49e69714308289a70b3dfd8cd8f08fbdd67d0a0073063b0f0518657fd1c27490b01650780a4d26b0f17d7b74a46928be89e48fa2db5a2b9b45e1724
@@ -1,5 +1,5 @@
1
1
  class GpWebpayController < GpWebpay.config.parent_controller.constantize
2
- skip_before_action :verify_authenticity_token if defined?(verify_authenticity_token)
2
+ skip_before_action :verify_authenticity_token if defined?(:verify_authenticity_token)
3
3
  prepend_before_action :set_external_order_number
4
4
  prepend_before_action :validate_gpwebpay_response
5
5
  prepend_before_action :set_gpwebpay_response
data/changelog.md CHANGED
@@ -1,4 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.2.4
4
+ Increase savon timeout to 5 minutes
5
+
6
+ ## 0.2.2
7
+ Add merchant number to stubs
8
+
9
+ ## 0.2
10
+ Add spec helpers
11
+
3
12
  ## 0.1
4
13
  Init
@@ -15,7 +15,17 @@ module GpWebpay
15
15
  end
16
16
 
17
17
  def [](config_name)
18
- @configurations[config_name]
18
+ return if config_name.blank?
19
+
20
+ @configurations[config_name] || find_configuration_by_merchant_number(config_name)
21
+ end
22
+
23
+ def find_configuration_by_merchant_number(merchant_number)
24
+
25
+ config = @configurations.find { |_key, value| puts _key;value.merchant_number.to_s == merchant_number.to_s }
26
+ return nil if config.blank?
27
+
28
+ config[-1]
19
29
  end
20
30
 
21
31
  def add_configuration(merchant_number:, default: false)
@@ -25,7 +35,7 @@ module GpWebpay
25
35
  end
26
36
 
27
37
  def remove_configuration(merchant_number:)
28
- @configurations[merchant_number] = nil
38
+ @configurations.delete(merchant_number)
29
39
  @configurations[:default] = @configurations[@configurations.keys[0]]
30
40
  end
31
41
 
@@ -9,15 +9,17 @@
9
9
 
10
10
  module GpWebpay
11
11
  module Http
12
- class CreateOrder < BaseSignedRequest
13
- def initialize(attributes, locale, merchant_number: nil, url_attributes: {})
14
- super(attributes, locale, 'CREATE_ORDER', merchant_number: merchant_number, url_attributes: url_attributes)
15
- end
12
+ module Services
13
+ class CreateOrder < BaseSignedRequest
14
+ def initialize(attributes, locale, merchant_number: nil, url_attributes: {})
15
+ super(attributes, locale, 'CREATE_ORDER', merchant_number: merchant_number, url_attributes: url_attributes)
16
+ end
16
17
 
17
- protected
18
+ protected
18
19
 
19
- def callback_url
20
- GpWebpay::Engine.routes.url_helpers.gp_webpay_orders_path({ merchant_number: config.merchant_number, locale: locale }.merge(url_attributes))
20
+ def callback_url
21
+ GpWebpay::Engine.routes.url_helpers.gp_webpay_orders_url({ merchant_number: config.merchant_number, locale: locale }.merge(url_attributes))
22
+ end
21
23
  end
22
24
  end
23
25
  end
@@ -0,0 +1,20 @@
1
+ ##
2
+ # Service object creates request data for GP Webpay CARD_VERIFICATION operation.
3
+
4
+ module GpWebpay
5
+ module Http
6
+ module Services
7
+ class VerifyCard < BaseSignedRequest
8
+ def initialize(attributes, locale, merchant_number: nil, url_attributes: {})
9
+ super(attributes, locale, 'CARD_VERIFICATION', merchant_number: merchant_number, url_attributes: url_attributes)
10
+ end
11
+
12
+ protected
13
+
14
+ def callback_url
15
+ GpWebpay::Engine.routes.url_helpers.gp_webpay_cards_url({ merchant_number: config.merchant_number, locale: locale }.merge(url_attributes))
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,104 @@
1
+ require 'savon/mock/spec_helper'
2
+
3
+ module GpWebpay
4
+ module SpecHelper
5
+ class Interface
6
+ include Savon::SpecHelper
7
+ include RSpec::Mocks::ExampleMethods
8
+
9
+ def params_with_digest(params, merchant_number = :default)
10
+ config = GpWebpay.config[merchant_number] || GpWebpay.config.default
11
+ params.merge(
12
+ 'DIGEST' => GpWebpay::OpensslSecurity.generate_digest(config, params.values.join('|'))
13
+ )
14
+ end
15
+
16
+ def params_with_both_digests(params, merchant_number = :default)
17
+ config = GpWebpay.config[merchant_number] || GpWebpay.config.default
18
+ params.merge(
19
+ 'DIGEST' => GpWebpay::OpensslSecurity.generate_digest(config, params.values.join('|')),
20
+ 'DIGEST1' => GpWebpay::OpensslSecurity.generate_digest(config, "#{params.values.join('|')}|#{config.merchant_number}")
21
+ )
22
+ end
23
+
24
+ def stub_card_token(token, status: 'VERIFIED', success: true, valid: true)
25
+ allow(GpWebpay::Ws::Services::GetTokenStatus)
26
+ .to receive(:call).with(hash_including(token_data: token, message_id: anything))
27
+ .and_return(instance_double(GpWebpay::Ws::WsResponse, valid?: valid, success?: success, status: status))
28
+ end
29
+
30
+ def stub_master_payment_status(payment_number, status: 'OK', success: true, valid: true)
31
+ allow(GpWebpay::Ws::Services::GetMasterPaymentStatus)
32
+ .to receive(:call).with(hash_including(payment_number: payment_number, message_id: anything))
33
+ .and_return(instance_double(GpWebpay::Ws::WsResponse, valid?: valid, success?: success, status: status))
34
+ end
35
+
36
+ def stub_payment_status(payment_number, status: 'VERIFIED', sub_status: 'SETTLED', success: true, valid: true)
37
+ allow(GpWebpay::Ws::Services::GetPaymentStatus)
38
+ .to receive(:call).with(hash_including(payment_number: payment_number, message_id: anything))
39
+ .and_return(instance_double(GpWebpay::Ws::WsResponse,
40
+ valid?: valid, success?: success, status: status,
41
+ params: { sub_status: sub_status }))
42
+ end
43
+
44
+ def stub_usage_based_payment(attributes, merchant_number:, valid: true, success: true, status: '', result_text: 'OK', response_token_data: nil)
45
+ allow(GpWebpay::Ws::Services::ProcessUsageBasedPayment)
46
+ .to receive(:call).with(
47
+ hash_including(
48
+ {
49
+ message_id: anything,
50
+ payment_number: anything,
51
+ order_number: anything,
52
+ currency_code: anything,
53
+ capture_flag: '1'
54
+ }.merge(attributes)
55
+ ),
56
+ merchant_number: merchant_number,
57
+ ).and_return(instance_double(GpWebpay::Ws::WsResponse,
58
+ valid?: valid, success?: success, status: status, result_text: result_text,
59
+ pr_code: success ? '0' : '123', sr_code: success ? '0' : '4',
60
+ params: { token_data: response_token_data || attributes[:token_data] }))
61
+ end
62
+
63
+ def stub_token_revoke(token, valid: true, success: true, status: 'REVOKED', result_text: 'OK')
64
+ allow(GpWebpay::Ws::Services::ProcessTokenRevoke)
65
+ .to receive(:call).with(
66
+ hash_including({ message_id: anything }.merge(token_data: token))
67
+ ).and_return(instance_double(GpWebpay::Ws::WsResponse,
68
+ valid?: valid, success?: success, status: status, result_text: result_text,
69
+ pr_code: success ? '0' : '123', sr_code: success ? '0' : '4'))
70
+ end
71
+
72
+ def stub_refund_payment(attributes, valid: true, success: true, status: '', result_text: 'OK')
73
+ allow(GpWebpay::Ws::Services::ProcessRefundPayment)
74
+ .to receive(:call).with(
75
+ hash_including({ message_id: anything }.merge(attributes))
76
+ ).and_return(instance_double(GpWebpay::Ws::WsResponse,
77
+ valid?: valid, success?: success, status: status, result_text: result_text,
78
+ pr_code: success ? '0' : '123', sr_code: success ? '0' : '4'))
79
+ end
80
+
81
+ def stub_capture_reverse(attributes, valid: true, success: true, status: '', result_text: 'OK')
82
+ allow(GpWebpay::Ws::Services::ProcessCaptureReverse)
83
+ .to receive(:call).with(
84
+ hash_including({ message_id: anything }.merge(attributes))
85
+ ).and_return(instance_double(GpWebpay::Ws::WsResponse,
86
+ valid?: valid, success?: success, status: status, result_text: result_text,
87
+ pr_code: success ? '0' : '123', sr_code: success ? '0' : '4'))
88
+ end
89
+
90
+ def stub_cancel_capture(attributes, valid: true, success: true, status: '', result_text: 'OK')
91
+ allow(GpWebpay::Ws::Services::ProcessCancelCapture)
92
+ .to receive(:call).with(
93
+ hash_including({ message_id: anything }.merge(attributes))
94
+ ).and_return(instance_double(GpWebpay::Ws::WsResponse,
95
+ valid?: valid, success?: success, status: status, result_text: result_text,
96
+ pr_code: success ? '0' : '123', sr_code: success ? '0' : '4'))
97
+ end
98
+ end
99
+
100
+ def gp_webpay
101
+ @gp_webpay ||= Interface.new
102
+ end
103
+ end
104
+ end
@@ -1,3 +1,3 @@
1
1
  module GpWebpay
2
- VERSION = '0.1.1'.freeze
2
+ VERSION = '0.2.4'.freeze
3
3
  end
@@ -11,7 +11,7 @@
11
11
  #
12
12
  # @param [Hash] attributes for GP Webpay
13
13
  #
14
- # @return [GpwebpayWsResponse] response value object
14
+ # @return [GpWebpay::Ws::WsResponse] response value object
15
15
 
16
16
  module GpWebpay
17
17
  module Ws
@@ -54,7 +54,11 @@ module GpWebpay
54
54
  end
55
55
 
56
56
  def client
57
- @client ||= Savon.client(wsdl: config.wsdl_file, endpoint: config.ws_url, pretty_print_xml: true)
57
+ @client ||= Savon.client(wsdl: config.wsdl_file,
58
+ endpoint: config.ws_url,
59
+ pretty_print_xml: true,
60
+ open_timeout: 300,
61
+ read_timeout: 300)
58
62
  end
59
63
 
60
64
  def rescue_from_http(error)
@@ -5,7 +5,7 @@
5
5
  #
6
6
  # @param [Hash] attributes for GP Webpay
7
7
  #
8
- # @return [GpwebpayWsResponse] response value object
8
+ # @return [GpWebpay::Ws::WsResponse] response value object
9
9
 
10
10
  module GpWebpay
11
11
  module Ws
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # @param [Hash] attributes for GP Webpay
5
5
  #
6
- # @return [GpwebpayWsResponse] response value object
6
+ # @return [GpWebpay::Ws::WsResponse] response value object
7
7
 
8
8
  module GpWebpay
9
9
  module Ws
@@ -5,7 +5,7 @@
5
5
  #
6
6
  # @param [Hash] attributes for GP Webpay
7
7
  #
8
- # @return [GpwebpayWsResponse] response value object
8
+ # @return [GpWebpay::Ws::WsResponse] response value object
9
9
 
10
10
  module GpWebpay
11
11
  module Ws
@@ -4,7 +4,7 @@
4
4
  #
5
5
  # @param [Hash] attributes for GP Webpay
6
6
  #
7
- # @return [GpwebpayWsResponse] response value object
7
+ # @return [GpWebpay::Ws::WsResponse] response value object
8
8
 
9
9
  module GpWebpay
10
10
  module Ws
@@ -4,7 +4,7 @@
4
4
  #
5
5
  # @param [Hash] attributes for GP Webpay
6
6
  #
7
- # @return [GpwebpayWsResponse] response value object
7
+ # @return [GpWebpay::Ws::WsResponse] response value object
8
8
 
9
9
  module GpWebpay
10
10
  module Ws
@@ -4,7 +4,7 @@
4
4
  #
5
5
  # @param [Hash] attributes for GP Webpay
6
6
  #
7
- # @return [GpwebpayWsResponse] response value object
7
+ # @return [GpWebpay::Ws::WsResponse] response value object
8
8
 
9
9
  module GpWebpay
10
10
  module Ws
@@ -16,14 +16,22 @@ module GpWebpay
16
16
  RESPONSE_ENTITY_NAME = :card_on_file_payment_response
17
17
  SERVICE_EXCEPTION = :card_on_file_payment_service_exception
18
18
 
19
+ def initialize(attributes, merchant_number: :default)
20
+ config = GpWebpay.config[merchant_number] || GpWebpay.config.default
21
+ merged_attributes = {
22
+ return_url: GpWebpay::Engine.routes.url_helpers.gp_webpay_orders_url({ merchant_number: config.merchant_number })
23
+ }.merge(attributes)
24
+ super(merged_attributes, merchant_number: merchant_number)
25
+ end
26
+
19
27
  def rescue_from_soap(exception)
20
28
  response = WsResponse.from_fault_error(exception.to_hash, self.class::SERVICE_EXCEPTION, config.merchant_number)
21
29
 
22
30
  if response.valid? && response.params[:authentication_link].present?
23
31
  raise GpWebpayConfirmationRequired.new('GP Webpay requires authentication', response.params[:authentication_link])
24
- else
25
- response
26
32
  end
33
+
34
+ response
27
35
  end
28
36
 
29
37
  class GpWebpayConfirmationRequired < GpWebpay::Error
@@ -4,7 +4,7 @@
4
4
  #
5
5
  # @param [Hash] attributes for GP Webpay
6
6
  #
7
- # @return [GpwebpayWsResponse] response value object
7
+ # @return [GpWebpay::Ws::WsResponse] response value object
8
8
 
9
9
  module GpWebpay
10
10
  module Ws
@@ -4,7 +4,7 @@
4
4
  #
5
5
  # @param [Hash] attributes for GP Webpay
6
6
  #
7
- # @return [GpwebpayWsResponse] response value object
7
+ # @return [GpWebpay::Ws::WsResponse] response value object
8
8
 
9
9
  module GpWebpay
10
10
  module Ws
@@ -4,7 +4,7 @@
4
4
  #
5
5
  # @param [Hash] attributes for GP Webpay
6
6
  #
7
- # @return [GpwebpayWsResponse] response value object
7
+ # @return [GpWebpay::Ws::WsResponse] response value object
8
8
 
9
9
  module GpWebpay
10
10
  module Ws
@@ -4,7 +4,7 @@
4
4
  #
5
5
  # @param [Hash] attributes for GP Webpay
6
6
  #
7
- # @return [GpwebpayWsResponse] response value object
7
+ # @return [GpWebpay::Ws::WsResponse] response value object
8
8
 
9
9
  module GpWebpay
10
10
  module Ws
@@ -16,9 +16,8 @@ module GpWebpay
16
16
  RESPONSE_ENTITY_NAME = :token_payment_response
17
17
  SERVICE_EXCEPTION = :payment_service_exception
18
18
 
19
- def initialize(attributes)
20
- super
21
- @attributes = attributes.except(:return_url)
19
+ def initialize(attributes, merchant_number: :default)
20
+ super(attributes.except(:return_url), merchant_number: merchant_number)
22
21
  end
23
22
  end
24
23
  end
@@ -4,7 +4,7 @@
4
4
  #
5
5
  # @param [Hash] attributes for GP Webpay
6
6
  #
7
- # @return [GpwebpayWsResponse] response value object
7
+ # @return [GpWebpay::Ws::WsResponse] response value object
8
8
 
9
9
  module GpWebpay
10
10
  module Ws
@@ -4,7 +4,7 @@
4
4
  #
5
5
  # @param [Hash] attributes for GP Webpay
6
6
  #
7
- # @return [GpwebpayWsResponse] response value object
7
+ # @return [GpWebpay::Ws::WsResponse] response value object
8
8
 
9
9
  module GpWebpay
10
10
  module Ws
@@ -15,6 +15,14 @@ module GpWebpay
15
15
  RESPONSE_NAME = :process_usage_based_payment_response
16
16
  RESPONSE_ENTITY_NAME = :usage_based_payment_response
17
17
  SERVICE_EXCEPTION = :payment_service_exception
18
+
19
+ def initialize(attributes, merchant_number: :default)
20
+ config = GpWebpay.config[merchant_number] || GpWebpay.config.default
21
+ merged_attributes = {
22
+ return_url: GpWebpay::Engine.routes.url_helpers.gp_webpay_orders_url({ merchant_number: config.merchant_number })
23
+ }.merge(attributes)
24
+ super(merged_attributes, merchant_number: merchant_number)
25
+ end
18
26
  end
19
27
  end
20
28
  end
@@ -1,8 +1,6 @@
1
1
  module GpWebpay
2
2
  module Ws
3
3
  class WsResponse < Response
4
- attr_accessor :validation_response
5
-
6
4
  def self.from_success(hash, response_name, response_entity_name, merchant_number)
7
5
  validation_response = hash.dig(response_name, response_entity_name)
8
6
  new(
@@ -15,9 +15,9 @@ require 'gp_webpay/http/base_signed_request'
15
15
  require 'gp_webpay/http/external_url'
16
16
  require 'gp_webpay/http/http_response'
17
17
  require 'gp_webpay/http/http_request'
18
- require 'gp_webpay/http/create_order'
19
- require 'gp_webpay/http/verify_card'
20
18
  require 'gp_webpay/http/validate_result'
19
+ require 'gp_webpay/http/services/verify_card'
20
+ require 'gp_webpay/http/services/create_order'
21
21
 
22
22
  require 'gp_webpay/ws/ws_request'
23
23
  require 'gp_webpay/ws/validate_result'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails-gp-webpay
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lubomir Vnenk
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-04-21 00:00:00.000000000 Z
11
+ date: 2021-06-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -78,12 +78,13 @@ files:
78
78
  - lib/gp_webpay/engine.rb
79
79
  - lib/gp_webpay/error.rb
80
80
  - lib/gp_webpay/http/base_signed_request.rb
81
- - lib/gp_webpay/http/create_order.rb
82
81
  - lib/gp_webpay/http/external_url.rb
83
82
  - lib/gp_webpay/http/http_request.rb
84
83
  - lib/gp_webpay/http/http_response.rb
84
+ - lib/gp_webpay/http/services/create_order.rb
85
+ - lib/gp_webpay/http/services/verify_card.rb
85
86
  - lib/gp_webpay/http/validate_result.rb
86
- - lib/gp_webpay/http/verify_card.rb
87
+ - lib/gp_webpay/mock/spec_helper.rb
87
88
  - lib/gp_webpay/openssl_security.rb
88
89
  - lib/gp_webpay/response.rb
89
90
  - lib/gp_webpay/service.rb
@@ -1,18 +0,0 @@
1
- ##
2
- # Service object creates request data for GP Webpay CARD_VERIFICATION operation.
3
-
4
- module GpWebpay
5
- module Http
6
- class VerifyCard < BaseSignedRequest
7
- def initialize(attributes, locale, merchant_number: nil, url_attributes: {})
8
- super(attributes, locale, 'CARD_VERIFICATION', merchant_number: merchant_number, url_attributes: url_attributes)
9
- end
10
-
11
- protected
12
-
13
- def callback_url
14
- GpWebpay::Engine.routes.url_helpers.gp_webpay_cards_path({ merchant_number: config.merchant_number, locale: locale }.merge(url_attributes))
15
- end
16
- end
17
- end
18
- end