genesis_ruby 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|