genesis_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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +11 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +158 -0
- data/LICENSE +21 -0
- data/README.md +343 -0
- data/Rakefile +12 -0
- data/VERSION +1 -0
- data/genesis_ruby.gemspec +43 -0
- data/lib/genesis_ruby/api/constants/currencies/iso4217.rb +1106 -0
- data/lib/genesis_ruby/api/constants/date_time_formats.rb +45 -0
- data/lib/genesis_ruby/api/constants/endpoints.rb +18 -0
- data/lib/genesis_ruby/api/constants/environments.rb +17 -0
- data/lib/genesis_ruby/api/constants/states/state.rb +43 -0
- data/lib/genesis_ruby/api/constants/states.rb +86 -0
- data/lib/genesis_ruby/api/constants/transactions/parameters/business/payment_types.rb +24 -0
- data/lib/genesis_ruby/api/constants/transactions/parameters/recurring/categories.rb +24 -0
- data/lib/genesis_ruby/api/constants/transactions/parameters/recurring/types.rb +28 -0
- data/lib/genesis_ruby/api/constants/transactions/parameters/sca_exemptions.rb +34 -0
- data/lib/genesis_ruby/api/constants/transactions/parameters/threeds/version2/browser/color_depths.rb +46 -0
- data/lib/genesis_ruby/api/constants/transactions/parameters/threeds/version2/card_holder_account/password_change_indicators.rb +37 -0
- data/lib/genesis_ruby/api/constants/transactions/parameters/threeds/version2/card_holder_account/registration_indicators.rb +37 -0
- data/lib/genesis_ruby/api/constants/transactions/parameters/threeds/version2/card_holder_account/shipping_address_usage_indicators.rb +34 -0
- data/lib/genesis_ruby/api/constants/transactions/parameters/threeds/version2/card_holder_account/suspicious_activity_indicators.rb +28 -0
- data/lib/genesis_ruby/api/constants/transactions/parameters/threeds/version2/card_holder_account/update_indicators.rb +34 -0
- data/lib/genesis_ruby/api/constants/transactions/parameters/threeds/version2/control/challenge_indicators.rb +34 -0
- data/lib/genesis_ruby/api/constants/transactions/parameters/threeds/version2/control/challenge_window_sizes.rb +37 -0
- data/lib/genesis_ruby/api/constants/transactions/parameters/threeds/version2/control/device_types.rb +28 -0
- data/lib/genesis_ruby/api/constants/transactions/parameters/threeds/version2/merchant_risk/delivery_timeframes.rb +34 -0
- data/lib/genesis_ruby/api/constants/transactions/parameters/threeds/version2/merchant_risk/pre_order_purchase_indicators.rb +28 -0
- data/lib/genesis_ruby/api/constants/transactions/parameters/threeds/version2/merchant_risk/reorder_item_indicators.rb +28 -0
- data/lib/genesis_ruby/api/constants/transactions/parameters/threeds/version2/merchant_risk/shipping_indicators.rb +46 -0
- data/lib/genesis_ruby/api/constants/transactions/parameters/threeds/version2/purchase/categories.rb +43 -0
- data/lib/genesis_ruby/api/constants/transactions/parameters/threeds/version2/sdk/interfaces.rb +31 -0
- data/lib/genesis_ruby/api/constants/transactions/parameters/threeds/version2/sdk/ui_types.rb +37 -0
- data/lib/genesis_ruby/api/constants/transactions.rb +371 -0
- data/lib/genesis_ruby/api/mixins/constants/common.rb +27 -0
- data/lib/genesis_ruby/api/mixins/requests/address_info_attributes.rb +20 -0
- data/lib/genesis_ruby/api/mixins/requests/customer_address/billing_info_attributes.rb +33 -0
- data/lib/genesis_ruby/api/mixins/requests/customer_address/customer_info_attributes.rb +26 -0
- data/lib/genesis_ruby/api/mixins/requests/customer_address/shipping_info_attributes.rb +33 -0
- data/lib/genesis_ruby/api/mixins/requests/document_attributes.rb +14 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/async_attributes.rb +34 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/base_attributes.rb +16 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/business/airlines_air_carriers_attributes.rb +60 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/business/business_attributes.rb +56 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/business/car_plane_and_boat_rentals_attributes.rb +53 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/business/cruise_lines_attributes.rb +50 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/business/event_management_attributes.rb +54 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/business/furniture_attributes.rb +53 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/business/hotels_and_real_estate_rentals_attributes.rb +53 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/business/travel_agencies_attributes.rb +88 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/cards/credit_card_attributes.rb +31 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/cards/fx_rate_attributes.rb +18 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/cards/recurring/recurring_category_attributes.rb +31 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/cards/recurring/recurring_type_attributes.rb +31 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/cards/tokenization_attributes.rb +39 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/crypto_attributes.rb +25 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/dynamic_descriptor_attributes.rb +114 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/gaming_attributes.rb +25 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/moto_attributes.rb +25 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/notification_attributes.rb +25 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/payment_attributes.rb +32 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/pending_payment_attributes.rb +25 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/reference_attributes.rb +16 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/risk_attributes.rb +47 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/sca_attributes.rb +37 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/threeds/version2/browser.rb +92 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/threeds/version2/card_holder_account.rb +183 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/threeds/version2/common_attributes.rb +52 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/threeds/version2/control.rb +61 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/threeds/version2/merchant_risk.rb +114 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/threeds/version2/method.rb +44 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/threeds/version2/purchase.rb +42 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/threeds/version2/recurring.rb +49 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/threeds/version2/sdk.rb +107 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/threeds/version2/wpf_attributes.rb +61 -0
- data/lib/genesis_ruby/api/mixins/requests/restricted_setter.rb +75 -0
- data/lib/genesis_ruby/api/request.rb +171 -0
- data/lib/genesis_ruby/api/requests/base/financial.rb +44 -0
- data/lib/genesis_ruby/api/requests/base/financials/credit_card.rb +27 -0
- data/lib/genesis_ruby/api/requests/financial/cards/authorize.rb +60 -0
- data/lib/genesis_ruby/api/requests/financial/cards/authorize3d.rb +76 -0
- data/lib/genesis_ruby/api/requests/financial/cards/sale.rb +59 -0
- data/lib/genesis_ruby/api/requests/financial/cards/sale3d.rb +75 -0
- data/lib/genesis_ruby/api/requests/wpf/create.rb +142 -0
- data/lib/genesis_ruby/api/response.rb +91 -0
- data/lib/genesis_ruby/builder.rb +42 -0
- data/lib/genesis_ruby/builders/base.rb +18 -0
- data/lib/genesis_ruby/builders/xml.rb +95 -0
- data/lib/genesis_ruby/configuration.rb +177 -0
- data/lib/genesis_ruby/connection.rb +20 -0
- data/lib/genesis_ruby/dependencies.rb +19 -0
- data/lib/genesis_ruby/errors/builder_error.rb +14 -0
- data/lib/genesis_ruby/errors/endpoint_not_set_error.rb +14 -0
- data/lib/genesis_ruby/errors/error.rb +18 -0
- data/lib/genesis_ruby/errors/invalid_argument_error.rb +14 -0
- data/lib/genesis_ruby/errors/network_error.rb +14 -0
- data/lib/genesis_ruby/errors/object_formatter_error.rb +14 -0
- data/lib/genesis_ruby/errors/parameter_error.rb +12 -0
- data/lib/genesis_ruby/errors/parser_error.rb +14 -0
- data/lib/genesis_ruby/errors/response_error.rb +14 -0
- data/lib/genesis_ruby/network/adapter/base_adapter.rb +31 -0
- data/lib/genesis_ruby/network/adapter/net_http_adapter.rb +92 -0
- data/lib/genesis_ruby/network/base_network.rb +83 -0
- data/lib/genesis_ruby/network/net_http.rb +28 -0
- data/lib/genesis_ruby/parser.rb +44 -0
- data/lib/genesis_ruby/parsers/base.rb +25 -0
- data/lib/genesis_ruby/parsers/xml.rb +120 -0
- data/lib/genesis_ruby/utils/common.rb +108 -0
- data/lib/genesis_ruby/utils/formatters/base.rb +40 -0
- data/lib/genesis_ruby/utils/formatters/response/definitions.rb +21 -0
- data/lib/genesis_ruby/utils/formatters/response/formats/amount.rb +34 -0
- data/lib/genesis_ruby/utils/formatters/response/formats/timestamp.rb +29 -0
- data/lib/genesis_ruby/utils/formatters/response/loader.rb +42 -0
- data/lib/genesis_ruby/utils/money/base/strategy.rb +38 -0
- data/lib/genesis_ruby/utils/money/conversions/amount_to_exponent.rb +22 -0
- data/lib/genesis_ruby/utils/money/conversions/exponent_to_amount.rb +22 -0
- data/lib/genesis_ruby/utils/money/format.rb +34 -0
- data/lib/genesis_ruby/utils/money_format.rb +39 -0
- data/lib/genesis_ruby/utils/object_formatter.rb +67 -0
- data/lib/genesis_ruby/utils/options/api_config.rb +36 -0
- data/lib/genesis_ruby/utils/options/base.rb +35 -0
- data/lib/genesis_ruby/utils/options/network_adapter_config.rb +41 -0
- data/lib/genesis_ruby/utils/transactions/financial_types.rb +50 -0
- data/lib/genesis_ruby/utils/transactions/references/capturable_types.rb +52 -0
- data/lib/genesis_ruby/utils/transactions/references/refundable_types.rb +70 -0
- data/lib/genesis_ruby/utils/transactions/references/voidable_types.rb +49 -0
- data/lib/genesis_ruby/utils/transactions/wpf_types.rb +43 -0
- data/lib/genesis_ruby/version.rb +5 -0
- data/lib/genesis_ruby.rb +57 -0
- metadata +372 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
require 'genesis_ruby/api/mixins/requests/financial/threeds/version2/recurring'
|
|
2
|
+
require 'genesis_ruby/api/mixins/requests/financial/threeds/version2/purchase'
|
|
3
|
+
require 'genesis_ruby/api/mixins/requests/financial/threeds/version2/merchant_risk'
|
|
4
|
+
require 'genesis_ruby/api/mixins/requests/financial/threeds/version2/control'
|
|
5
|
+
require 'genesis_ruby/api/mixins/requests/financial/threeds/version2/card_holder_account'
|
|
6
|
+
|
|
7
|
+
module GenesisRuby
|
|
8
|
+
module Api
|
|
9
|
+
module Mixins
|
|
10
|
+
module Requests
|
|
11
|
+
module Financial
|
|
12
|
+
module Threeds
|
|
13
|
+
module Version2
|
|
14
|
+
# Threeds Version 2 WPF Attributes
|
|
15
|
+
module WpfAttributes
|
|
16
|
+
|
|
17
|
+
include Control
|
|
18
|
+
include Purchase
|
|
19
|
+
include Recurring
|
|
20
|
+
include MerchantRisk
|
|
21
|
+
include CardHolderAccount
|
|
22
|
+
|
|
23
|
+
# WPF doesn't support Threeds V2 Device Type parameter
|
|
24
|
+
def threeds_v2_control_device_type
|
|
25
|
+
raise NoMethodError, "#{__method__} isn't available for the Web Payment Form"
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# WPF doesn't support Threeds V2 Device Type parameter
|
|
29
|
+
def threeds_v2_control_device_type=(_value)
|
|
30
|
+
raise NoMethodError, "#{__method__} isn't available for the Web Payment Form"
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
protected
|
|
34
|
+
|
|
35
|
+
# Request Control Attributes structure available for the Web Payment Form
|
|
36
|
+
def control_attributes
|
|
37
|
+
{
|
|
38
|
+
challenge_window_size: threeds_v2_control_challenge_window_size,
|
|
39
|
+
challenge_indicator: threeds_v2_control_challenge_indicator
|
|
40
|
+
}
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Threeds V2 Web Payment Form Attributes
|
|
44
|
+
def threeds_v2_wpf_attributes_structure
|
|
45
|
+
{
|
|
46
|
+
control: control_attributes,
|
|
47
|
+
purchase: purchase_attributes,
|
|
48
|
+
merchant_risk: merchant_risk_attributes,
|
|
49
|
+
card_holder_account: card_holder_account_attributes,
|
|
50
|
+
recurring: recurring_attributes
|
|
51
|
+
}
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
require 'genesis_ruby/api/constants/date_time_formats'
|
|
2
|
+
require 'genesis_ruby/utils/common'
|
|
3
|
+
|
|
4
|
+
module GenesisRuby
|
|
5
|
+
module Api
|
|
6
|
+
module Mixins
|
|
7
|
+
module Requests
|
|
8
|
+
# Helper methods for restricting the available accessor's values
|
|
9
|
+
module RestrictedSetter
|
|
10
|
+
|
|
11
|
+
protected
|
|
12
|
+
|
|
13
|
+
# Validation of the value's allowed values
|
|
14
|
+
def allowed_options(attribute:, allowed:, value:, allow_empty: false, error_message: nil)
|
|
15
|
+
return assign_instance_variable attribute, nil if allow_empty && value.to_s.empty?
|
|
16
|
+
|
|
17
|
+
error_message = format(
|
|
18
|
+
'%{error_message}%{method} accepts one of the following: %{allowed}',
|
|
19
|
+
error_message: error_message ? "#{error_message} " : '',
|
|
20
|
+
method: attribute,
|
|
21
|
+
allowed: allowed.join(', ')
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
raise InvalidArgumentError, error_message unless allowed.include? value
|
|
25
|
+
|
|
26
|
+
assign_instance_variable attribute, value
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Validation of the value's length
|
|
30
|
+
def limited_string(attribute:, value:, min: nil, max: nil)
|
|
31
|
+
len = value.to_s.length
|
|
32
|
+
|
|
33
|
+
raise InvalidArgumentError, "#{attribute} value must be min #{min} chars long." if !min.nil? && len < min
|
|
34
|
+
|
|
35
|
+
raise InvalidArgumentError, "#{attribute} value must be max #{max} chars long." if !max.nil? && len > max
|
|
36
|
+
|
|
37
|
+
assign_instance_variable attribute, value
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Parses given date and assign it to the given attribute when it is valid
|
|
41
|
+
def parse_date(attribute:, value:, formats: [], error_message: nil, allow_empty: false)
|
|
42
|
+
return assign_instance_variable attribute, nil if allow_empty && value.to_s.empty?
|
|
43
|
+
|
|
44
|
+
formats = GenesisRuby::Api::Constants::DateTimeFormats.all if formats.empty?
|
|
45
|
+
parsed_date = GenesisRuby::Utils::Common.parse_date(value, formats)
|
|
46
|
+
error_message ||= format(
|
|
47
|
+
'%{method} accepts only valid date values in one of the following formats: %{formats}',
|
|
48
|
+
method: attribute,
|
|
49
|
+
formats: formats.join(', ')
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
raise InvalidArgumentError, error_message unless parsed_date
|
|
53
|
+
|
|
54
|
+
assign_instance_variable attribute.to_s.chomp, parsed_date
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Parses given value to_i and assign it to the given attribute
|
|
58
|
+
def parse_int(attribute:, value:, allow_empty: false)
|
|
59
|
+
return assign_instance_variable attribute, nil if allow_empty && value.to_s.empty?
|
|
60
|
+
|
|
61
|
+
assign_instance_variable attribute, value.to_i
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
private
|
|
65
|
+
|
|
66
|
+
# Helper for assigning a attribute to the class instance
|
|
67
|
+
def assign_instance_variable(attribute, value)
|
|
68
|
+
instance_variable_set "@#{attribute.to_s.chomp "="}", value
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
require 'genesis_ruby/utils/options/api_config'
|
|
2
|
+
require 'genesis_ruby/errors/endpoint_not_set_error'
|
|
3
|
+
require 'genesis_ruby/builder'
|
|
4
|
+
require 'genesis_ruby/utils/common'
|
|
5
|
+
require 'genesis_ruby/utils/money_format'
|
|
6
|
+
|
|
7
|
+
module GenesisRuby
|
|
8
|
+
module Api
|
|
9
|
+
# Base Request Class
|
|
10
|
+
class Request
|
|
11
|
+
|
|
12
|
+
PROTOCOL_HTTPS = 'https'.freeze
|
|
13
|
+
PORT_HTTPS = 443
|
|
14
|
+
|
|
15
|
+
METHOD_POST = 'POST'.freeze
|
|
16
|
+
METHOD_GET = 'GET'.freeze
|
|
17
|
+
METHOD_PUT = 'PUT'.freeze
|
|
18
|
+
|
|
19
|
+
attr_reader :api_config
|
|
20
|
+
|
|
21
|
+
def initialize(configuration, builder_interface = 'xml')
|
|
22
|
+
@configuration = configuration
|
|
23
|
+
@builder_interface = builder_interface
|
|
24
|
+
@api_config = GenesisRuby::Utils::Options::ApiConfig.new
|
|
25
|
+
|
|
26
|
+
init_configuration
|
|
27
|
+
init_required_fields
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Generate the Request Document based on the builder_interface
|
|
31
|
+
def build_document
|
|
32
|
+
process_request_parameters
|
|
33
|
+
|
|
34
|
+
if tree_structure.instance_of?(Hash)
|
|
35
|
+
@builder_context = GenesisRuby::Builder.new(builder_interface)
|
|
36
|
+
builder_context.parse_structure(tree_structure.clone)
|
|
37
|
+
|
|
38
|
+
return builder_context.document
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
nil
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
protected
|
|
45
|
+
|
|
46
|
+
attr_reader :configuration, :builder_interface, :builder_context
|
|
47
|
+
attr_accessor :tree_structure
|
|
48
|
+
|
|
49
|
+
# Request Configuration
|
|
50
|
+
def init_configuration; end
|
|
51
|
+
|
|
52
|
+
# Required fields for the request
|
|
53
|
+
def init_required_fields; end
|
|
54
|
+
|
|
55
|
+
# Pre-defined XML Request Configuration
|
|
56
|
+
def init_xml_configuration
|
|
57
|
+
@api_config.load_xml_config
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# Pre-defined JSON Request Configuration
|
|
61
|
+
def init_json_configuration
|
|
62
|
+
@api_config.load_json_config
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# Pre-defined FORM Request Configuration
|
|
66
|
+
def init_form_configuration
|
|
67
|
+
@api_config.load_form_config
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# Initializes Api EndPoint Url with request path & terminal token
|
|
71
|
+
def init_api_gateway_configuration(options = { request_path: 'process', include_token: true })
|
|
72
|
+
request_path = options.fetch :request_path, 'process'
|
|
73
|
+
include_token = options.fetch :include_token, true
|
|
74
|
+
|
|
75
|
+
api_config.url = build_request_url(
|
|
76
|
+
{
|
|
77
|
+
subdomain: 'gateway',
|
|
78
|
+
path: request_path,
|
|
79
|
+
token: include_token ? @configuration.token : ''
|
|
80
|
+
}
|
|
81
|
+
)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
# Initializes WPF EndPoint Url with internationalization
|
|
85
|
+
def init_api_wpf_configuration(options = { language: '' })
|
|
86
|
+
language = (options.fetch :language, '').to_s
|
|
87
|
+
|
|
88
|
+
api_config.url = build_request_url(
|
|
89
|
+
{
|
|
90
|
+
subdomain: 'wpf',
|
|
91
|
+
path: language.empty? ? 'wpf' : format('%{language}/wpf', { language: language })
|
|
92
|
+
}
|
|
93
|
+
)
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
# Process Everything the variables set previously
|
|
97
|
+
#
|
|
98
|
+
# Step 1: Execute per-field actions
|
|
99
|
+
# Step 2: Update the Tree structure
|
|
100
|
+
# Step 3: Clean the empty leafs
|
|
101
|
+
# Step 4: Check for Required Fields
|
|
102
|
+
def process_request_parameters
|
|
103
|
+
populate_structure
|
|
104
|
+
|
|
105
|
+
sanitize_structure
|
|
106
|
+
|
|
107
|
+
check_requirements
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
# Create the Tree structure and populate
|
|
111
|
+
# the fields with the set parameters.
|
|
112
|
+
# Every request defines the :tree_structure
|
|
113
|
+
def populate_structure
|
|
114
|
+
@tree_structure = {}
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
# Remove empty key values from the structure
|
|
118
|
+
def sanitize_structure
|
|
119
|
+
GenesisRuby::Utils::Common.deep_compact!(tree_structure) if tree_structure.instance_of?(Hash)
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
# Perform validation over the defined parameters
|
|
123
|
+
def check_requirements
|
|
124
|
+
# TODO: perform validation over the defined parameters
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
# Build the Genesis API endpoint
|
|
128
|
+
# Options:
|
|
129
|
+
# subdomain - the service /gateway, wpf, etc/
|
|
130
|
+
# path - the requested service /blacklists, threeds/threeds_method/<unique_id>, wpf/reconcile, etc/
|
|
131
|
+
# token - the MID configuration, appended to the end of the URL
|
|
132
|
+
def build_request_url(options = { subdomain: 'gateway', path: '', token: '' })
|
|
133
|
+
options = parse_request_parameters(options)
|
|
134
|
+
|
|
135
|
+
format('%{protocol}://%{sub}%{domain}:%{port}/%{path}', {
|
|
136
|
+
protocol: api_config.protocol || PROTOCOL_HTTPS,
|
|
137
|
+
sub: @configuration.sub_domain(options[:subdomain]),
|
|
138
|
+
domain: @configuration.endpoint,
|
|
139
|
+
port: api_config.port || PORT_HTTPS,
|
|
140
|
+
path: fetch_request_path(options)
|
|
141
|
+
})
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
# Transform amount to minor currency format
|
|
145
|
+
def transform_amount(amount, currency)
|
|
146
|
+
GenesisRuby::Utils::MoneyFormat.amount_to_exponent amount, currency
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
private
|
|
150
|
+
|
|
151
|
+
# Parse the Request URL options
|
|
152
|
+
def parse_request_parameters(options = { subdomain: 'gateway', token: '', path: '' })
|
|
153
|
+
raise EndpointNotSetError if @configuration.endpoint.empty?
|
|
154
|
+
|
|
155
|
+
{
|
|
156
|
+
subdomain: options.fetch(:subdomain, 'gateway'),
|
|
157
|
+
token: options.fetch(:token, ''),
|
|
158
|
+
path: options.fetch(:path, '')
|
|
159
|
+
}
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
# Fetch the request path by the given options
|
|
163
|
+
def fetch_request_path(options = { path: '', token: '' })
|
|
164
|
+
return options[:path] if options[:token].empty?
|
|
165
|
+
|
|
166
|
+
format('%{path}/%{token}/', { path: options[:path], token: options[:token] })
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
module GenesisRuby
|
|
2
|
+
module Api
|
|
3
|
+
module Requests
|
|
4
|
+
module Base
|
|
5
|
+
# Base class used by all Financial transaction requests
|
|
6
|
+
class Financial < Request
|
|
7
|
+
|
|
8
|
+
include Mixins::Requests::Financial::BaseAttributes
|
|
9
|
+
|
|
10
|
+
protected
|
|
11
|
+
|
|
12
|
+
# Returns the Request transaction type
|
|
13
|
+
def transaction_type
|
|
14
|
+
raise NotImplementedError, 'Transaction Type method must be implemented'
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Return additional request attributes
|
|
18
|
+
def payment_transaction_structure
|
|
19
|
+
raise NotImplementedError, 'Payment Transaction Structure method must be implemented'
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Request Configuration
|
|
23
|
+
def init_configuration
|
|
24
|
+
super
|
|
25
|
+
init_xml_configuration
|
|
26
|
+
init_api_gateway_configuration
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def populate_structure
|
|
30
|
+
self.tree_structure = {
|
|
31
|
+
payment_transaction: {
|
|
32
|
+
transaction_type: transaction_type,
|
|
33
|
+
transaction_id: transaction_id,
|
|
34
|
+
usage: usage,
|
|
35
|
+
remote_ip: remote_ip
|
|
36
|
+
}.merge(payment_transaction_structure)
|
|
37
|
+
}
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
require 'genesis_ruby/api/requests/base/financial'
|
|
2
|
+
|
|
3
|
+
module GenesisRuby
|
|
4
|
+
module Api
|
|
5
|
+
module Requests
|
|
6
|
+
module Base
|
|
7
|
+
module Financials
|
|
8
|
+
# Base Class used for all transaction request containing Credit Card data
|
|
9
|
+
class CreditCard < GenesisRuby::Api::Requests::Base::Financial
|
|
10
|
+
|
|
11
|
+
include Mixins::Requests::Financial::PaymentAttributes
|
|
12
|
+
include Mixins::Requests::Financial::Cards::CreditCardAttributes
|
|
13
|
+
include Mixins::Requests::Financial::Cards::TokenizationAttributes
|
|
14
|
+
|
|
15
|
+
protected
|
|
16
|
+
|
|
17
|
+
# Credit Card attributes
|
|
18
|
+
def payment_transaction_structure
|
|
19
|
+
payment_attributes_structure.merge credit_card_attributes_structure, tokenization_attributes_structure
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
require 'genesis_ruby/api/requests/base/financials/credit_card'
|
|
2
|
+
|
|
3
|
+
module GenesisRuby
|
|
4
|
+
module Api
|
|
5
|
+
module Requests
|
|
6
|
+
module Financial
|
|
7
|
+
module Cards
|
|
8
|
+
# With authorize transactions, you can confirm that a credit card is valid and
|
|
9
|
+
# reserve the desired amount on the card
|
|
10
|
+
class Authorize < Requests::Base::Financials::CreditCard
|
|
11
|
+
|
|
12
|
+
include Mixins::Requests::AddressInfoAttributes
|
|
13
|
+
include Mixins::Requests::DocumentAttributes
|
|
14
|
+
include Mixins::Requests::Financial::Business::BusinessAttributes
|
|
15
|
+
include Mixins::Requests::Financial::Cards::FxRateAttributes
|
|
16
|
+
include Mixins::Requests::Financial::Cards::Recurring::RecurringCategoryAttributes
|
|
17
|
+
include Mixins::Requests::Financial::Cards::Recurring::RecurringTypeAttributes
|
|
18
|
+
include Mixins::Requests::Financial::CryptoAttributes
|
|
19
|
+
include Mixins::Requests::Financial::DynamicDescriptorAttributes
|
|
20
|
+
include Mixins::Requests::Financial::GamingAttributes
|
|
21
|
+
include Mixins::Requests::Financial::MotoAttributes
|
|
22
|
+
include Mixins::Requests::Financial::ReferenceAttributes
|
|
23
|
+
include Mixins::Requests::Financial::RiskAttributes
|
|
24
|
+
include Mixins::Requests::Financial::ScaAttributes
|
|
25
|
+
include Mixins::Requests::RestrictedSetter
|
|
26
|
+
|
|
27
|
+
protected
|
|
28
|
+
|
|
29
|
+
# Authorize Transaction Type
|
|
30
|
+
def transaction_type
|
|
31
|
+
GenesisRuby::Api::Constants::Transactions::AUTHORIZE
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def payment_transaction_structure # rubocop:disable Metrics/MethodLength
|
|
35
|
+
super.merge(
|
|
36
|
+
gaming: gaming,
|
|
37
|
+
moto: moto,
|
|
38
|
+
crypto: crypto,
|
|
39
|
+
customer_email: customer_email,
|
|
40
|
+
customer_phone: customer_phone,
|
|
41
|
+
reference_id: reference_id,
|
|
42
|
+
document_id: document_id,
|
|
43
|
+
fx_rate_id: fx_rate_id,
|
|
44
|
+
billing_address: billing_address_parameters_structure,
|
|
45
|
+
shipping_address: shipping_address_parameters_structure,
|
|
46
|
+
risk_params: risk_parameters_structure,
|
|
47
|
+
dynamic_descriptor_params: dynamic_descriptor_structure,
|
|
48
|
+
business_attributes: business_attributes_structure,
|
|
49
|
+
recurring_type: recurring_type,
|
|
50
|
+
recurring_category: recurring_category,
|
|
51
|
+
sca_params: sca_attributes_structure
|
|
52
|
+
)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
require 'genesis_ruby/api/requests/base/financials/credit_card'
|
|
2
|
+
|
|
3
|
+
module GenesisRuby
|
|
4
|
+
module Api
|
|
5
|
+
module Requests
|
|
6
|
+
module Financial
|
|
7
|
+
module Cards
|
|
8
|
+
# Authorize 3D transactions, credit card based, can be synchronous or asynchronous based on the workflow and
|
|
9
|
+
# the additional parameters for card holder authentication
|
|
10
|
+
class Authorize3d < Requests::Base::Financials::CreditCard
|
|
11
|
+
|
|
12
|
+
include Mixins::Requests::AddressInfoAttributes
|
|
13
|
+
include Mixins::Requests::DocumentAttributes
|
|
14
|
+
include Mixins::Requests::Financial::AsyncAttributes
|
|
15
|
+
include Mixins::Requests::Financial::Business::BusinessAttributes
|
|
16
|
+
include Mixins::Requests::Financial::Cards::FxRateAttributes
|
|
17
|
+
include Mixins::Requests::Financial::Cards::Recurring::RecurringCategoryAttributes
|
|
18
|
+
include Mixins::Requests::Financial::Cards::Recurring::RecurringTypeAttributes
|
|
19
|
+
include Mixins::Requests::Financial::CryptoAttributes
|
|
20
|
+
include Mixins::Requests::Financial::DynamicDescriptorAttributes
|
|
21
|
+
include Mixins::Requests::Financial::GamingAttributes
|
|
22
|
+
include Mixins::Requests::Financial::MotoAttributes
|
|
23
|
+
include Mixins::Requests::Financial::NotificationAttributes
|
|
24
|
+
include Mixins::Requests::Financial::RiskAttributes
|
|
25
|
+
include Mixins::Requests::Financial::ScaAttributes
|
|
26
|
+
include Mixins::Requests::Financial::Threeds::Version2::CommonAttributes
|
|
27
|
+
include Mixins::Requests::RestrictedSetter
|
|
28
|
+
|
|
29
|
+
# Specifies the recurring type of transaction
|
|
30
|
+
def recurring_type=(value)
|
|
31
|
+
allowed_values = [
|
|
32
|
+
GenesisRuby::Api::Constants::Transactions::Parameters::Recurring::Types::INITIAL,
|
|
33
|
+
GenesisRuby::Api::Constants::Transactions::Parameters::Recurring::Types::MANAGED
|
|
34
|
+
]
|
|
35
|
+
|
|
36
|
+
allowed_options attribute: __method__, allowed: allowed_values, value: value, allow_empty: true
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
protected
|
|
40
|
+
|
|
41
|
+
# Authorize 3D Transaction Type
|
|
42
|
+
def transaction_type
|
|
43
|
+
GenesisRuby::Api::Constants::Transactions::AUTHORIZE_3D
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# Authorize 3D transaction request parameters
|
|
47
|
+
def payment_transaction_structure # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
|
48
|
+
super.merge(
|
|
49
|
+
notification_url: notification_url,
|
|
50
|
+
return_success_url: return_success_url,
|
|
51
|
+
return_failure_url: return_failure_url,
|
|
52
|
+
gaming: gaming,
|
|
53
|
+
moto: moto,
|
|
54
|
+
crypto: crypto,
|
|
55
|
+
customer_email: customer_email,
|
|
56
|
+
customer_phone: customer_phone,
|
|
57
|
+
document_id: document_id,
|
|
58
|
+
fx_rate_id: fx_rate_id,
|
|
59
|
+
billing_address: billing_address_parameters_structure,
|
|
60
|
+
shipping_address: shipping_address_parameters_structure,
|
|
61
|
+
risk_params: risk_parameters_structure,
|
|
62
|
+
dynamic_descriptor_params: dynamic_descriptor_structure,
|
|
63
|
+
business_attributes: business_attributes_structure,
|
|
64
|
+
recurring_type: recurring_type,
|
|
65
|
+
recurring_category: recurring_category,
|
|
66
|
+
sca_params: sca_attributes_structure,
|
|
67
|
+
threeds_v2_params: threeds_v2_common_attributes_structure
|
|
68
|
+
)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
require 'genesis_ruby/api/requests/base/financials/credit_card'
|
|
2
|
+
|
|
3
|
+
module GenesisRuby
|
|
4
|
+
module Api
|
|
5
|
+
module Requests
|
|
6
|
+
module Financial
|
|
7
|
+
module Cards
|
|
8
|
+
# Sale transactions combine authorize and capture into one step
|
|
9
|
+
class Sale < Requests::Base::Financials::CreditCard
|
|
10
|
+
|
|
11
|
+
include Mixins::Requests::AddressInfoAttributes
|
|
12
|
+
include Mixins::Requests::DocumentAttributes
|
|
13
|
+
include Mixins::Requests::Financial::Business::BusinessAttributes
|
|
14
|
+
include Mixins::Requests::Financial::Cards::FxRateAttributes
|
|
15
|
+
include Mixins::Requests::Financial::Cards::Recurring::RecurringCategoryAttributes
|
|
16
|
+
include Mixins::Requests::Financial::Cards::Recurring::RecurringTypeAttributes
|
|
17
|
+
include Mixins::Requests::Financial::CryptoAttributes
|
|
18
|
+
include Mixins::Requests::Financial::DynamicDescriptorAttributes
|
|
19
|
+
include Mixins::Requests::Financial::GamingAttributes
|
|
20
|
+
include Mixins::Requests::Financial::MotoAttributes
|
|
21
|
+
include Mixins::Requests::Financial::ReferenceAttributes
|
|
22
|
+
include Mixins::Requests::Financial::RiskAttributes
|
|
23
|
+
include Mixins::Requests::Financial::ScaAttributes
|
|
24
|
+
include Mixins::Requests::RestrictedSetter
|
|
25
|
+
|
|
26
|
+
protected
|
|
27
|
+
|
|
28
|
+
# Sale Transaction Type
|
|
29
|
+
def transaction_type
|
|
30
|
+
GenesisRuby::Api::Constants::Transactions::SALE
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def payment_transaction_structure # rubocop:disable Metrics/MethodLength
|
|
34
|
+
super.merge(
|
|
35
|
+
gaming: gaming,
|
|
36
|
+
moto: moto,
|
|
37
|
+
crypto: crypto,
|
|
38
|
+
customer_email: customer_email,
|
|
39
|
+
customer_phone: customer_phone,
|
|
40
|
+
reference_id: reference_id,
|
|
41
|
+
document_id: document_id,
|
|
42
|
+
fx_rate_id: fx_rate_id,
|
|
43
|
+
billing_address: billing_address_parameters_structure,
|
|
44
|
+
shipping_address: shipping_address_parameters_structure,
|
|
45
|
+
risk_params: risk_parameters_structure,
|
|
46
|
+
dynamic_descriptor_params: dynamic_descriptor_structure,
|
|
47
|
+
business_attributes: business_attributes_structure,
|
|
48
|
+
recurring_type: recurring_type,
|
|
49
|
+
recurring_category: recurring_category,
|
|
50
|
+
sca_params: sca_attributes_structure
|
|
51
|
+
)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
require 'genesis_ruby/api/requests/base/financials/credit_card'
|
|
2
|
+
|
|
3
|
+
module GenesisRuby
|
|
4
|
+
module Api
|
|
5
|
+
module Requests
|
|
6
|
+
module Financial
|
|
7
|
+
module Cards
|
|
8
|
+
# Sale3D combines a Sale transaction request by adding asynchronous processing
|
|
9
|
+
class Sale3d < Requests::Base::Financials::CreditCard
|
|
10
|
+
|
|
11
|
+
include Mixins::Requests::AddressInfoAttributes
|
|
12
|
+
include Mixins::Requests::DocumentAttributes
|
|
13
|
+
include Mixins::Requests::Financial::AsyncAttributes
|
|
14
|
+
include Mixins::Requests::Financial::Business::BusinessAttributes
|
|
15
|
+
include Mixins::Requests::Financial::Cards::FxRateAttributes
|
|
16
|
+
include Mixins::Requests::Financial::Cards::Recurring::RecurringCategoryAttributes
|
|
17
|
+
include Mixins::Requests::Financial::Cards::Recurring::RecurringTypeAttributes
|
|
18
|
+
include Mixins::Requests::Financial::CryptoAttributes
|
|
19
|
+
include Mixins::Requests::Financial::DynamicDescriptorAttributes
|
|
20
|
+
include Mixins::Requests::Financial::GamingAttributes
|
|
21
|
+
include Mixins::Requests::Financial::MotoAttributes
|
|
22
|
+
include Mixins::Requests::Financial::NotificationAttributes
|
|
23
|
+
include Mixins::Requests::Financial::RiskAttributes
|
|
24
|
+
include Mixins::Requests::Financial::ScaAttributes
|
|
25
|
+
include Mixins::Requests::Financial::Threeds::Version2::CommonAttributes
|
|
26
|
+
include Mixins::Requests::RestrictedSetter
|
|
27
|
+
|
|
28
|
+
# Specifies the recurring type of transaction
|
|
29
|
+
def recurring_type=(value)
|
|
30
|
+
allowed_values = [
|
|
31
|
+
GenesisRuby::Api::Constants::Transactions::Parameters::Recurring::Types::INITIAL,
|
|
32
|
+
GenesisRuby::Api::Constants::Transactions::Parameters::Recurring::Types::MANAGED
|
|
33
|
+
]
|
|
34
|
+
|
|
35
|
+
allowed_options attribute: __method__, allowed: allowed_values, value: value, allow_empty: true
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
protected
|
|
39
|
+
|
|
40
|
+
# Sale 3D Transaction Type
|
|
41
|
+
def transaction_type
|
|
42
|
+
GenesisRuby::Api::Constants::Transactions::SALE_3D
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Sale 3D transaction request parameters
|
|
46
|
+
def payment_transaction_structure # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
|
47
|
+
super.merge(
|
|
48
|
+
notification_url: notification_url,
|
|
49
|
+
return_success_url: return_success_url,
|
|
50
|
+
return_failure_url: return_failure_url,
|
|
51
|
+
gaming: gaming,
|
|
52
|
+
moto: moto,
|
|
53
|
+
crypto: crypto,
|
|
54
|
+
customer_email: customer_email,
|
|
55
|
+
customer_phone: customer_phone,
|
|
56
|
+
document_id: document_id,
|
|
57
|
+
fx_rate_id: fx_rate_id,
|
|
58
|
+
billing_address: billing_address_parameters_structure,
|
|
59
|
+
shipping_address: shipping_address_parameters_structure,
|
|
60
|
+
risk_params: risk_parameters_structure,
|
|
61
|
+
dynamic_descriptor_params: dynamic_descriptor_structure,
|
|
62
|
+
business_attributes: business_attributes_structure,
|
|
63
|
+
recurring_type: recurring_type,
|
|
64
|
+
recurring_category: recurring_category,
|
|
65
|
+
sca_params: sca_attributes_structure,
|
|
66
|
+
threeds_v2_params: threeds_v2_common_attributes_structure
|
|
67
|
+
)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|