acquiring-sdk-ruby 0.1.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.
Files changed (174) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +2 -0
  3. data/LICENSE.txt +22 -0
  4. data/README.md +140 -0
  5. data/Rakefile +34 -0
  6. data/acquiring-sdk-ruby.gemspec +30 -0
  7. data/lib/worldline/acquiring/sdk/api_resource.rb +53 -0
  8. data/lib/worldline/acquiring/sdk/authentication/authenticator.rb +21 -0
  9. data/lib/worldline/acquiring/sdk/authentication/authorization_type.rb +17 -0
  10. data/lib/worldline/acquiring/sdk/authentication/oauth2_authenticator.rb +142 -0
  11. data/lib/worldline/acquiring/sdk/authentication/oauth2_exception.rb +15 -0
  12. data/lib/worldline/acquiring/sdk/authentication.rb +1 -0
  13. data/lib/worldline/acquiring/sdk/call_context.rb +9 -0
  14. data/lib/worldline/acquiring/sdk/client.rb +69 -0
  15. data/lib/worldline/acquiring/sdk/communication/communication_exception.rb +21 -0
  16. data/lib/worldline/acquiring/sdk/communication/connection.rb +50 -0
  17. data/lib/worldline/acquiring/sdk/communication/default_connection.rb +429 -0
  18. data/lib/worldline/acquiring/sdk/communication/metadata_provider.rb +162 -0
  19. data/lib/worldline/acquiring/sdk/communication/multipart_form_data_object.rb +54 -0
  20. data/lib/worldline/acquiring/sdk/communication/multipart_form_data_request.rb +15 -0
  21. data/lib/worldline/acquiring/sdk/communication/not_found_exception.rb +21 -0
  22. data/lib/worldline/acquiring/sdk/communication/param_request.rb +16 -0
  23. data/lib/worldline/acquiring/sdk/communication/pooled_connection.rb +28 -0
  24. data/lib/worldline/acquiring/sdk/communication/request_header.rb +64 -0
  25. data/lib/worldline/acquiring/sdk/communication/request_param.rb +30 -0
  26. data/lib/worldline/acquiring/sdk/communication/response_exception.rb +58 -0
  27. data/lib/worldline/acquiring/sdk/communication/response_header.rb +80 -0
  28. data/lib/worldline/acquiring/sdk/communication.rb +1 -0
  29. data/lib/worldline/acquiring/sdk/communicator.rb +506 -0
  30. data/lib/worldline/acquiring/sdk/communicator_configuration.rb +197 -0
  31. data/lib/worldline/acquiring/sdk/domain/data_object.rb +34 -0
  32. data/lib/worldline/acquiring/sdk/domain/shopping_cart_extension.rb +62 -0
  33. data/lib/worldline/acquiring/sdk/domain/uploadable_file.rb +35 -0
  34. data/lib/worldline/acquiring/sdk/domain.rb +1 -0
  35. data/lib/worldline/acquiring/sdk/factory.rb +183 -0
  36. data/lib/worldline/acquiring/sdk/json/default_marshaller.rb +36 -0
  37. data/lib/worldline/acquiring/sdk/json/marshaller.rb +29 -0
  38. data/lib/worldline/acquiring/sdk/json/marshaller_syntax_exception.rb +11 -0
  39. data/lib/worldline/acquiring/sdk/json.rb +1 -0
  40. data/lib/worldline/acquiring/sdk/logging/communicator_logger.rb +26 -0
  41. data/lib/worldline/acquiring/sdk/logging/log_message_builder.rb +91 -0
  42. data/lib/worldline/acquiring/sdk/logging/logging_capable.rb +19 -0
  43. data/lib/worldline/acquiring/sdk/logging/obfuscation/body_obfuscator.rb +101 -0
  44. data/lib/worldline/acquiring/sdk/logging/obfuscation/header_obfuscator.rb +54 -0
  45. data/lib/worldline/acquiring/sdk/logging/obfuscation/obfuscation_capable.rb +23 -0
  46. data/lib/worldline/acquiring/sdk/logging/obfuscation/obfuscation_rule.rb +49 -0
  47. data/lib/worldline/acquiring/sdk/logging/obfuscation.rb +1 -0
  48. data/lib/worldline/acquiring/sdk/logging/request_log_message_builder.rb +52 -0
  49. data/lib/worldline/acquiring/sdk/logging/response_log_message_builder.rb +43 -0
  50. data/lib/worldline/acquiring/sdk/logging/ruby_communicator_logger.rb +63 -0
  51. data/lib/worldline/acquiring/sdk/logging/stdout_communicator_logger.rb +33 -0
  52. data/lib/worldline/acquiring/sdk/logging.rb +1 -0
  53. data/lib/worldline/acquiring/sdk/proxy_configuration.rb +76 -0
  54. data/lib/worldline/acquiring/sdk/v1/acquirer/acquirer_client.rb +35 -0
  55. data/lib/worldline/acquiring/sdk/v1/acquirer/merchant/accountverifications/account_verifications_client.rb +60 -0
  56. data/lib/worldline/acquiring/sdk/v1/acquirer/merchant/accountverifications.rb +4 -0
  57. data/lib/worldline/acquiring/sdk/v1/acquirer/merchant/dynamiccurrencyconversion/dynamic_currency_conversion_client.rb +60 -0
  58. data/lib/worldline/acquiring/sdk/v1/acquirer/merchant/dynamiccurrencyconversion.rb +4 -0
  59. data/lib/worldline/acquiring/sdk/v1/acquirer/merchant/merchant_client.rb +66 -0
  60. data/lib/worldline/acquiring/sdk/v1/acquirer/merchant/payments/get_payment_status_params.rb +34 -0
  61. data/lib/worldline/acquiring/sdk/v1/acquirer/merchant/payments/payments_client.rb +224 -0
  62. data/lib/worldline/acquiring/sdk/v1/acquirer/merchant/payments.rb +4 -0
  63. data/lib/worldline/acquiring/sdk/v1/acquirer/merchant/refunds/get_refund_params.rb +34 -0
  64. data/lib/worldline/acquiring/sdk/v1/acquirer/merchant/refunds/refunds_client.rb +157 -0
  65. data/lib/worldline/acquiring/sdk/v1/acquirer/merchant/refunds.rb +4 -0
  66. data/lib/worldline/acquiring/sdk/v1/acquirer/merchant/technicalreversals/technical_reversals_client.rb +64 -0
  67. data/lib/worldline/acquiring/sdk/v1/acquirer/merchant/technicalreversals.rb +4 -0
  68. data/lib/worldline/acquiring/sdk/v1/acquirer/merchant.rb +4 -0
  69. data/lib/worldline/acquiring/sdk/v1/acquirer.rb +4 -0
  70. data/lib/worldline/acquiring/sdk/v1/api_exception.rb +63 -0
  71. data/lib/worldline/acquiring/sdk/v1/authorization_exception.rb +23 -0
  72. data/lib/worldline/acquiring/sdk/v1/domain/address_verification_data.rb +41 -0
  73. data/lib/worldline/acquiring/sdk/v1/domain/amount_data.rb +48 -0
  74. data/lib/worldline/acquiring/sdk/v1/domain/api_account_verification_request.rb +70 -0
  75. data/lib/worldline/acquiring/sdk/v1/domain/api_account_verification_response.rb +87 -0
  76. data/lib/worldline/acquiring/sdk/v1/domain/api_action_response.rb +71 -0
  77. data/lib/worldline/acquiring/sdk/v1/domain/api_action_response_for_refund.rb +71 -0
  78. data/lib/worldline/acquiring/sdk/v1/domain/api_capture_request.rb +75 -0
  79. data/lib/worldline/acquiring/sdk/v1/domain/api_capture_request_for_refund.rb +43 -0
  80. data/lib/worldline/acquiring/sdk/v1/domain/api_increment_request.rb +61 -0
  81. data/lib/worldline/acquiring/sdk/v1/domain/api_increment_response.rb +43 -0
  82. data/lib/worldline/acquiring/sdk/v1/domain/api_payment_error_response.rb +62 -0
  83. data/lib/worldline/acquiring/sdk/v1/domain/api_payment_refund_request.rb +77 -0
  84. data/lib/worldline/acquiring/sdk/v1/domain/api_payment_request.rb +95 -0
  85. data/lib/worldline/acquiring/sdk/v1/domain/api_payment_resource.rb +103 -0
  86. data/lib/worldline/acquiring/sdk/v1/domain/api_payment_response.rb +126 -0
  87. data/lib/worldline/acquiring/sdk/v1/domain/api_payment_reversal_request.rb +61 -0
  88. data/lib/worldline/acquiring/sdk/v1/domain/api_payment_summary_for_response.rb +66 -0
  89. data/lib/worldline/acquiring/sdk/v1/domain/api_references_for_responses.rb +48 -0
  90. data/lib/worldline/acquiring/sdk/v1/domain/api_refund_request.rb +88 -0
  91. data/lib/worldline/acquiring/sdk/v1/domain/api_refund_resource.rb +110 -0
  92. data/lib/worldline/acquiring/sdk/v1/domain/api_refund_response.rb +133 -0
  93. data/lib/worldline/acquiring/sdk/v1/domain/api_refund_summary_for_response.rb +66 -0
  94. data/lib/worldline/acquiring/sdk/v1/domain/api_reversal_response.rb +36 -0
  95. data/lib/worldline/acquiring/sdk/v1/domain/api_technical_reversal_request.rb +50 -0
  96. data/lib/worldline/acquiring/sdk/v1/domain/api_technical_reversal_response.rb +62 -0
  97. data/lib/worldline/acquiring/sdk/v1/domain/card_data_for_dcc.rb +48 -0
  98. data/lib/worldline/acquiring/sdk/v1/domain/card_on_file_data.rb +52 -0
  99. data/lib/worldline/acquiring/sdk/v1/domain/card_payment_data.rb +114 -0
  100. data/lib/worldline/acquiring/sdk/v1/domain/card_payment_data_for_refund.rb +82 -0
  101. data/lib/worldline/acquiring/sdk/v1/domain/card_payment_data_for_resource.rb +43 -0
  102. data/lib/worldline/acquiring/sdk/v1/domain/card_payment_data_for_response.rb +52 -0
  103. data/lib/worldline/acquiring/sdk/v1/domain/card_payment_data_for_verification.rb +91 -0
  104. data/lib/worldline/acquiring/sdk/v1/domain/dcc_data.rb +55 -0
  105. data/lib/worldline/acquiring/sdk/v1/domain/dcc_proposal.rb +60 -0
  106. data/lib/worldline/acquiring/sdk/v1/domain/e_commerce_data.rb +52 -0
  107. data/lib/worldline/acquiring/sdk/v1/domain/e_commerce_data_for_account_verification.rb +45 -0
  108. data/lib/worldline/acquiring/sdk/v1/domain/e_commerce_data_for_response.rb +41 -0
  109. data/lib/worldline/acquiring/sdk/v1/domain/get_dcc_rate_request.rb +75 -0
  110. data/lib/worldline/acquiring/sdk/v1/domain/get_dcc_rate_response.rb +57 -0
  111. data/lib/worldline/acquiring/sdk/v1/domain/initial_card_on_file_data.rb +41 -0
  112. data/lib/worldline/acquiring/sdk/v1/domain/merchant_data.rb +76 -0
  113. data/lib/worldline/acquiring/sdk/v1/domain/network_token_data.rb +41 -0
  114. data/lib/worldline/acquiring/sdk/v1/domain/payment_references.rb +48 -0
  115. data/lib/worldline/acquiring/sdk/v1/domain/plain_card_data.rb +48 -0
  116. data/lib/worldline/acquiring/sdk/v1/domain/point_of_sale_data.rb +34 -0
  117. data/lib/worldline/acquiring/sdk/v1/domain/point_of_sale_data_for_dcc.rb +41 -0
  118. data/lib/worldline/acquiring/sdk/v1/domain/rate_data.rb +64 -0
  119. data/lib/worldline/acquiring/sdk/v1/domain/sub_operation.rb +94 -0
  120. data/lib/worldline/acquiring/sdk/v1/domain/sub_operation_for_refund.rb +87 -0
  121. data/lib/worldline/acquiring/sdk/v1/domain/subsequent_card_on_file_data.rb +48 -0
  122. data/lib/worldline/acquiring/sdk/v1/domain/three_d_secure.rb +62 -0
  123. data/lib/worldline/acquiring/sdk/v1/domain/transaction_data_for_dcc.rb +52 -0
  124. data/lib/worldline/acquiring/sdk/v1/domain.rb +4 -0
  125. data/lib/worldline/acquiring/sdk/v1/exception_factory.rb +48 -0
  126. data/lib/worldline/acquiring/sdk/v1/ping/ping_client.rb +52 -0
  127. data/lib/worldline/acquiring/sdk/v1/ping.rb +4 -0
  128. data/lib/worldline/acquiring/sdk/v1/platform_exception.rb +23 -0
  129. data/lib/worldline/acquiring/sdk/v1/reference_exception.rb +23 -0
  130. data/lib/worldline/acquiring/sdk/v1/v1_client.rb +43 -0
  131. data/lib/worldline/acquiring/sdk/v1/validation_exception.rb +23 -0
  132. data/lib/worldline/acquiring/sdk/v1.rb +4 -0
  133. data/lib/worldline/acquiring/sdk.rb +1 -0
  134. data/spec/comparable_extension.rb +29 -0
  135. data/spec/fixtures/resources/authentication/oauth2AccessToken.expired.json +4 -0
  136. data/spec/fixtures/resources/authentication/oauth2AccessToken.invalidClient.json +4 -0
  137. data/spec/fixtures/resources/authentication/oauth2AccessToken.json +4 -0
  138. data/spec/fixtures/resources/communication/getWithQueryParams.json +3 -0
  139. data/spec/fixtures/resources/communication/getWithoutQueryParams.json +3 -0
  140. data/spec/fixtures/resources/communication/notFound.html +1 -0
  141. data/spec/fixtures/resources/communication/postWithBadRequestResponse.json +11 -0
  142. data/spec/fixtures/resources/communication/postWithCreatedResponse.json +6 -0
  143. data/spec/fixtures/resources/communication/unknownServerError.json +10 -0
  144. data/spec/fixtures/resources/logging/bodyNoObfuscation.json +7 -0
  145. data/spec/fixtures/resources/logging/bodyWithBinObfuscated.json +3 -0
  146. data/spec/fixtures/resources/logging/bodyWithBinOriginal.json +3 -0
  147. data/spec/fixtures/resources/logging/bodyWithCardCustomObfuscated.json +13 -0
  148. data/spec/fixtures/resources/logging/bodyWithCardObfuscated.json +13 -0
  149. data/spec/fixtures/resources/logging/bodyWithCardOriginal.json +13 -0
  150. data/spec/fixtures/resources/logging/bodyWithObjectObfuscated.json +5 -0
  151. data/spec/fixtures/resources/logging/bodyWithObjectOriginal.json +5 -0
  152. data/spec/fixtures/resources/properties.oauth2.yml +8 -0
  153. data/spec/fixtures/resources/properties.proxy.yml +14 -0
  154. data/spec/integration/connection_pooling_spec.rb +74 -0
  155. data/spec/integration/multipart_form_data_spec.rb +216 -0
  156. data/spec/integration/process_payment_spec.rb +43 -0
  157. data/spec/integration/request_dcc_rate_spec.rb +24 -0
  158. data/spec/integration/sdk_proxy_spec.rb +70 -0
  159. data/spec/integration_setup.rb +111 -0
  160. data/spec/lib/authentication/oauth2_authenticator_spec.rb +68 -0
  161. data/spec/lib/client_spec.rb +47 -0
  162. data/spec/lib/communication/default_connection_logger_spec.rb +484 -0
  163. data/spec/lib/communication/default_connection_spec.rb +352 -0
  164. data/spec/lib/communication/metadata_provider_spec.rb +93 -0
  165. data/spec/lib/communicator_configuration_spec.rb +181 -0
  166. data/spec/lib/communicator_spec.rb +34 -0
  167. data/spec/lib/factory_spec.rb +38 -0
  168. data/spec/lib/json/default_marshaller_spec.rb +39 -0
  169. data/spec/lib/logging/obfuscation/body_obfuscator_spec.rb +86 -0
  170. data/spec/lib/logging/obfuscation/header_obfuscator_spec.rb +100 -0
  171. data/spec/lib/logging/ruby_communicator_logger_spec.rb +92 -0
  172. data/spec/lib/logging/stdout_communicator_logger_spec.rb +64 -0
  173. data/spec/spec_helper.rb +32 -0
  174. metadata +375 -0
@@ -0,0 +1,52 @@
1
+ #
2
+ # This file was automatically generated.
3
+ #
4
+ require 'worldline/acquiring/sdk/api_resource'
5
+ require 'worldline/acquiring/sdk/communication/response_exception'
6
+ require 'worldline/acquiring/sdk/v1/exception_factory'
7
+ require 'worldline/acquiring/sdk/v1/domain/api_payment_error_response'
8
+
9
+ module Worldline
10
+ module Acquiring
11
+ module SDK
12
+ module V1
13
+ module Ping
14
+ # Ping client. Thread-safe.
15
+ class PingClient < Worldline::Acquiring::SDK::ApiResource
16
+
17
+ # @param parent [Worldline::Acquiring::SDK::ApiResource]
18
+ # @param path_context [Hash, nil]
19
+ def initialize(parent, path_context)
20
+ super(parent: parent, path_context: path_context)
21
+ end
22
+
23
+ # Resource /services/v1/ping - {https://docs.acquiring.worldline-solutions.com/api-reference#tag/Ping/operation/ping Check API connection}
24
+ #
25
+ # @param context [Worldline::Acquiring::SDK::CallContext, nil]
26
+ # @raise [Worldline::Acquiring::SDK::V1::ValidationException] if the request was not correct and couldn't be processed (HTTP status code 400)
27
+ # @raise [Worldline::Acquiring::SDK::V1::AuthorizationException] if the request was not allowed (HTTP status code 403)
28
+ # @raise [Worldline::Acquiring::SDK::V1::ReferenceException] if an object was attempted to be referenced that doesn't exist or has been removed,
29
+ # or there was a conflict (HTTP status code 404, 409 or 410)
30
+ # @raise [Worldline::Acquiring::SDK::V1::PlatformException] if something went wrong at the Worldline Acquiring platform,
31
+ # the Worldline Acquiring platform was unable to process a message from a downstream partner/acquirer,
32
+ # or the service that you're trying to reach is temporary unavailable (HTTP status code 500, 502 or 503)
33
+ # @raise [Worldline::Acquiring::SDK::V1::ApiException] if the Worldline Acquiring platform returned any other error
34
+ def ping(context = nil)
35
+ uri = instantiate_uri('/services/v1/ping', nil)
36
+ @communicator.get(
37
+ uri,
38
+ nil,
39
+ nil,
40
+ nil,
41
+ context)
42
+ rescue Worldline::Acquiring::SDK::Communication::ResponseException => e
43
+ error_type = Worldline::Acquiring::SDK::V1::Domain::ApiPaymentErrorResponse
44
+ error_object = @communicator.marshaller.unmarshal(e.body, error_type)
45
+ raise Worldline::Acquiring::SDK::V1.create_exception(e.status_code, e.body, error_object, context)
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,4 @@
1
+ #
2
+ # This file was automatically generated.
3
+ #
4
+ Dir[File.join(__dir__, 'ping', '*.rb')].each { |f| require f }
@@ -0,0 +1,23 @@
1
+ #
2
+ # This file was automatically generated.
3
+ #
4
+ require_relative 'api_exception'
5
+
6
+ module Worldline
7
+ module Acquiring
8
+ module SDK
9
+ module V1
10
+ # Represents an error response from the Worldline Acquiring platform when something went wrong at the Worldline Acquiring platform or further downstream.
11
+ class PlatformException < ApiException
12
+
13
+ # Create a new PlatformException.
14
+ # @see ApiException#initialize
15
+ def initialize(status_code, response_body, type, title, status, detail, instance,
16
+ message='The Worldline Acquiring platform returned an error response')
17
+ super(status_code, response_body, type, title, status, detail, instance, message)
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,23 @@
1
+ #
2
+ # This file was automatically generated.
3
+ #
4
+ require_relative 'api_exception'
5
+
6
+ module Worldline
7
+ module Acquiring
8
+ module SDK
9
+ module V1
10
+ # Represents an error response from the Worldline Acquiring platform when a non-existing or removed object is trying to be accessed.
11
+ class ReferenceException < ApiException
12
+
13
+ # Create a new ReferenceException.
14
+ # @see ApiException#initialize
15
+ def initialize(status_code, response_body, type, title, status, detail, instance,
16
+ message='The Worldline Acquiring platform returned a reference error response')
17
+ super(status_code, response_body, type, title, status, detail, instance, message)
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,43 @@
1
+ #
2
+ # This file was automatically generated.
3
+ #
4
+ require 'worldline/acquiring/sdk/api_resource'
5
+ require 'worldline/acquiring/sdk/v1/acquirer/acquirer_client'
6
+ require 'worldline/acquiring/sdk/v1/ping/ping_client'
7
+
8
+ module Worldline
9
+ module Acquiring
10
+ module SDK
11
+ module V1
12
+ # V1 client.
13
+ #
14
+ # Thread safe.
15
+ class V1Client < Worldline::Acquiring::SDK::ApiResource
16
+
17
+ # @param parent [Worldline::Acquiring::SDK::ApiResource]
18
+ # @param path_context [Hash, nil]
19
+ def initialize(parent, path_context)
20
+ super(parent: parent, path_context: path_context)
21
+ end
22
+
23
+ # Resource /processing/v1/{acquirerId}
24
+ #
25
+ # @param acquirer_id [String]
26
+ # @return [Worldline::Acquiring::SDK::V1::Acquirer::AcquirerClient]
27
+ def acquirer(acquirer_id)
28
+ Worldline::Acquiring::SDK::V1::Acquirer::AcquirerClient.new(self, {
29
+ 'acquirerId'.freeze => acquirer_id,
30
+ })
31
+ end
32
+
33
+ # Resource /services/v1/ping
34
+ #
35
+ # @return [Worldline::Acquiring::SDK::V1::Ping::PingClient]
36
+ def ping
37
+ Worldline::Acquiring::SDK::V1::Ping::PingClient.new(self, nil)
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,23 @@
1
+ #
2
+ # This file was automatically generated.
3
+ #
4
+ require_relative 'api_exception'
5
+
6
+ module Worldline
7
+ module Acquiring
8
+ module SDK
9
+ module V1
10
+ # Represents an error response from the Worldline Acquiring platform when validation of requests failed.
11
+ class ValidationException < ApiException
12
+
13
+ # Create a new ValidationException.
14
+ # @see ApiException#initialize
15
+ def initialize(status_code, response_body, type, title, status, detail, instance,
16
+ message='The Worldline Acquiring platform returned an incorrect request error response')
17
+ super(status_code, response_body, type, title, status, detail, instance, message)
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,4 @@
1
+ #
2
+ # This file was automatically generated.
3
+ #
4
+ Dir[File.join(__dir__, 'v1', '*.rb')].each { |f| require f }
@@ -0,0 +1 @@
1
+ Dir[File.join(__dir__, 'sdk', '*.rb')].each { |f| require f }
@@ -0,0 +1,29 @@
1
+ require 'worldline/acquiring/sdk/communication/request_param'
2
+
3
+ module Worldline::Acquiring::SDK::Communication
4
+
5
+ # extension of the RequestParam object to support comparison
6
+ class RequestParam
7
+
8
+ def ==(other)
9
+ other.instance_variables.each do |var|
10
+ unless instance_variable_get(var).to_s == other.instance_variable_get(var).to_s
11
+ return false
12
+ end
13
+ end
14
+ true
15
+ end
16
+ end
17
+
18
+ # extension of the RequestHeader object to support comparison
19
+ class RequestHeader
20
+
21
+ def ==(other)
22
+ other.instance_variables.each do |var|
23
+ unless instance_variable_get(var).to_s == other.instance_variable_get(var).to_s
24
+ return false
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,4 @@
1
+ {
2
+ "access_token": "expiredAccessToken",
3
+ "expires_in": -1
4
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "error": "unauthorized_client",
3
+ "error_description": "INVALID_CREDENTIALS: Invalid client credentials"
4
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "access_token": "accessToken",
3
+ "expires_in": 300
4
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "convertedAmount" : 4547504
3
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "result": "OK"
3
+ }
@@ -0,0 +1 @@
1
+ Not Found
@@ -0,0 +1,11 @@
1
+ {
2
+ "errorId": "0953f236-9e54-4f23-9556-d66bc757dda8",
3
+ "errors": [
4
+ {
5
+ "code": "21000020",
6
+ "requestId": "24146",
7
+ "message": "VALUE **************** OF FIELD CREDITCARDNUMBER DID NOT PASS THE LUHNCHECK",
8
+ "httpStatusCode": 400
9
+ }
10
+ ]
11
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "payment": {
3
+ "id": "000000123410000595980000100001",
4
+ "status": "PENDING_APPROVAL"
5
+ }
6
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "errorId": "fbff1179-7ba4-4894-9021-d8a0011d23a7",
3
+ "errors": [
4
+ {
5
+ "code": "9999",
6
+ "message": "UNKNOWN_SERVER_ERROR",
7
+ "httpStatusCode": 500
8
+ }
9
+ ]
10
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "amount": {
3
+ "currencyCode": "EUR",
4
+ "amount": 1000
5
+ },
6
+ "authorizationType": "PRE_AUTHORIZATION"
7
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "bin": "123456**"
3
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "bin": "12345678"
3
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "amount": {
3
+ "currencyCode": "CAD",
4
+ "amount": 2345
5
+ },
6
+ "cardPaymentData": {
7
+ "cardData": {
8
+ "cardSecurityCode": "***",
9
+ "cardNumber": "123456******3456",
10
+ "expiryDate": "**2024"
11
+ }
12
+ }
13
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "amount": {
3
+ "currencyCode": "CAD",
4
+ "amount": 2345
5
+ },
6
+ "cardPaymentData": {
7
+ "cardData": {
8
+ "cardSecurityCode": "***",
9
+ "cardNumber": "************3456",
10
+ "expiryDate": "**2024"
11
+ }
12
+ }
13
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "amount": {
3
+ "currencyCode": "CAD",
4
+ "amount": 2345
5
+ },
6
+ "cardPaymentData": {
7
+ "cardData": {
8
+ "cardSecurityCode": "123",
9
+ "cardNumber": "1234567890123456",
10
+ "expiryDate": "122024"
11
+ }
12
+ }
13
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "name": ****,
3
+ "name": {
4
+ }
5
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "name": true,
3
+ "name": {
4
+ }
5
+ }
@@ -0,0 +1,8 @@
1
+ --- # YAML settings used in testing the SDK
2
+ acquiring.api.endpoint.host: api.preprod.acquiring.worldline-solutions.com
3
+ acquiring.api.authorizationType: OAuth2
4
+ acquiring.api.oauth2.tokenUri: https://sso.preprod.acquiring.worldline-solutions.com/auth/realms/acquiring_api/protocol/openid-acquiring/token
5
+ acquiring.api.connectTimeout: 1000
6
+ acquiring.api.socketTimeout: 1000
7
+ acquiring.api.maxConnections: 100
8
+ acquiring.api.integrator: Worldline
@@ -0,0 +1,14 @@
1
+ --- # YAML settings used in testing the SDK
2
+ acquiring.api.endpoint.host: api.preprod.acquiring.worldline-solutions.com
3
+ acquiring.api.authorizationType: OAuth2
4
+ acquiring.api.oauth2.tokenUri: https://sso.preprod.acquiring.worldline-solutions.com/auth/realms/acquiring_api/protocol/openid-acquiring/token
5
+ acquiring.api.connectTimeout: 1000
6
+ acquiring.api.socketTimeout: 1000
7
+ acquiring.api.maxConnections: 10
8
+ acquiring.api.integrator: Worldline
9
+ # change uri to preferred proxy
10
+ acquiring.api.proxy.uri: http://localhost:9999
11
+ # change username and password to authentication credentials for the proxy, omit the entries if no authentication is required
12
+ # authentication is done using basic proxy authentication. Therefore, to avoid leaking credentials you should connect to the proxy using SSL
13
+ acquiring.api.proxy.username: test-user
14
+ acquiring.api.proxy.password: test-password
@@ -0,0 +1,74 @@
1
+ require 'spec_helper'
2
+ require 'integration_setup'
3
+ require 'worldline/acquiring/sdk/factory'
4
+ require 'yaml'
5
+
6
+ describe 'connection pooling with the server' do
7
+
8
+ before(:context){WebMock.allow_net_connect!}
9
+ after(:context){WebMock.disable_net_connect!}
10
+
11
+ it 'runs with one connection per request' do
12
+ run_connection_pooling_test(10, 10)
13
+ end
14
+
15
+ it 'runs with one connection per two requests' do
16
+ run_connection_pooling_test(10, 5)
17
+ end
18
+
19
+ it 'runs with one connection for 10 requests' do
20
+ run_connection_pooling_test(10, 1)
21
+ end
22
+ end
23
+
24
+ class Event # as per https://emptysqua.re/blog/an-event-synchronization-primitive-for-ruby/
25
+ def initialize
26
+ @lock = Mutex.new
27
+ @cond = ConditionVariable.new
28
+ @flag = false
29
+ end
30
+
31
+ def set
32
+ @lock.synchronize do
33
+ @flag = true
34
+ @cond.broadcast
35
+ end
36
+ end
37
+
38
+ def wait
39
+ @lock.synchronize do
40
+ unless @flag
41
+ @cond.wait(@lock)
42
+ end
43
+ end
44
+ end
45
+ end
46
+
47
+ # sends *request_count* requests with a maximum number of connections in the connection pool equal to *max_connections*
48
+ def run_connection_pooling_test(request_count, max_connections)
49
+ configuration = Integration.init_communicator_configuration(max_connections: max_connections)
50
+ begin
51
+ communicator = Worldline::Acquiring::SDK::Factory.create_communicator_from_configuration(configuration)
52
+ flag = Event.new
53
+ runner_threads = Array.new(request_count){ |i| Thread.new{run_request(i, communicator, flag)} }
54
+ flag.set
55
+ ensure
56
+ communicator.close unless communicator.nil?
57
+ end
58
+ results = Array.new(request_count){ |i| runner_threads[i].value } # returned values are arrays of size 2
59
+ puts "running times of #{request_count} threads using #{max_connections} connections:"
60
+ puts "each pair is the thread's start and end time in milliseconds"
61
+ results.each do |pair|
62
+ puts pair[0].to_s + ' ' + pair[1].to_s
63
+ end
64
+ end
65
+
66
+ def run_request(i, communicator, flag)
67
+ request = Integration.get_dcc_rate_request
68
+
69
+ client = Worldline::Acquiring::SDK::Factory.create_client_from_communicator(communicator)
70
+ flag.wait
71
+ start_time = Time.now
72
+ client.v1.acquirer(Integration::ACQUIRER_ID).merchant(Integration::MERCHANT_ID).dynamic_currency_conversion.request_dcc_rate(request)
73
+ [start_time.to_i*1000, Time.now.to_i*1000]
74
+ end