genesis_ruby 0.1.6 → 0.1.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +26 -0
- data/Gemfile.lock +42 -38
- data/README.md +305 -3
- data/VERSION +1 -1
- data/lib/genesis_ruby/api/constants/transactions/parameters/mobile/apple_pay/payment_subtypes.rb +29 -0
- data/lib/genesis_ruby/api/constants/transactions/parameters/mobile/google_pay/payment_subtypes.rb +29 -0
- data/lib/genesis_ruby/api/constants/transactions/parameters/mpi_protocol_sub_versions.rb +43 -0
- data/lib/genesis_ruby/api/constants/transactions/parameters/online_banking/bank_code_currencies.rb +128 -0
- data/lib/genesis_ruby/api/constants/transactions/parameters/online_banking/bank_codes.rb +600 -0
- data/lib/genesis_ruby/api/constants/transactions/parameters/online_banking/payment_types.rb +36 -0
- data/lib/genesis_ruby/api/constants/transactions/parameters/travel_data/ancillary_charges_types.rb +43 -0
- data/lib/genesis_ruby/api/constants/transactions.rb +1 -5
- data/lib/genesis_ruby/api/mixins/requests/attribute_validation.rb +138 -4
- data/lib/genesis_ruby/api/mixins/requests/birth_date_attributes.rb +22 -0
- data/lib/genesis_ruby/api/mixins/requests/customer_address/customer_info_attributes.rb +1 -1
- data/lib/genesis_ruby/api/mixins/requests/financial/cards/credit_card_attributes.rb +7 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/cards/mpi_attributes.rb +14 -4
- data/lib/genesis_ruby/api/mixins/requests/financial/cards/recurring/managed_recurring_attributes.rb +23 -20
- data/lib/genesis_ruby/api/mixins/requests/financial/cards/recurring/managed_recurring_indian_card_attributes.rb +19 -39
- data/lib/genesis_ruby/api/mixins/requests/financial/cards/recurring/recurring_type_attributes.rb +15 -9
- data/lib/genesis_ruby/api/mixins/requests/financial/cards/tokenization_attributes.rb +9 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/mobile/apple_pay_token_attributes.rb +51 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/mobile/google_pay_token_attributes.rb +50 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/online_banking_payments/virtual_payment_address_attributes.rb +27 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/threeds/version2/browser.rb +11 -22
- data/lib/genesis_ruby/api/mixins/requests/financial/threeds/version2/card_holder_account.rb +81 -49
- data/lib/genesis_ruby/api/mixins/requests/financial/threeds/version2/common_attributes.rb +23 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/threeds/version2/control.rb +13 -26
- data/lib/genesis_ruby/api/mixins/requests/financial/threeds/version2/merchant_risk.rb +21 -58
- data/lib/genesis_ruby/api/mixins/requests/financial/threeds/version2/purchase.rb +8 -11
- data/lib/genesis_ruby/api/mixins/requests/financial/threeds/version2/sdk.rb +10 -10
- data/lib/genesis_ruby/api/mixins/requests/financial/threeds/version2/wpf_attributes.rb +9 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/travel_data/airline_itinerary_attributes.rb +166 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/travel_data/car_rental_attributes.rb +119 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/travel_data/hotel_rental_attributes.rb +77 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/travel_data/reference_ticket_attributes.rb +75 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/travel_data/travel_attributes.rb +34 -0
- data/lib/genesis_ruby/api/request.rb +4 -2
- data/lib/genesis_ruby/api/requests/base/financials/credit_card.rb +6 -4
- data/lib/genesis_ruby/api/requests/base/reference.rb +3 -2
- data/lib/genesis_ruby/api/requests/financial/capture.rb +3 -1
- data/lib/genesis_ruby/api/requests/financial/cards/authorize.rb +13 -3
- data/lib/genesis_ruby/api/requests/financial/cards/authorize3d.rb +22 -11
- data/lib/genesis_ruby/api/requests/financial/cards/sale.rb +13 -3
- data/lib/genesis_ruby/api/requests/financial/cards/sale3d.rb +22 -11
- data/lib/genesis_ruby/api/requests/financial/cards/threeds/v2/method_continue.rb +2 -2
- data/lib/genesis_ruby/api/requests/financial/mobile/apple_pay.rb +91 -0
- data/lib/genesis_ruby/api/requests/financial/mobile/google_pay.rb +108 -0
- data/lib/genesis_ruby/api/requests/financial/online_banking_payments/online_banking/pay_in.rb +157 -0
- data/lib/genesis_ruby/api/requests/financial/void.rb +2 -2
- data/lib/genesis_ruby/api/requests/non_financial/reconcile/date_range.rb +2 -2
- data/lib/genesis_ruby/api/requests/wpf/create.rb +11 -15
- data/lib/genesis_ruby/api/requests/wpf/reconcile.rb +2 -2
- data/lib/genesis_ruby/builders/xml.rb +6 -0
- data/lib/genesis_ruby/utils/common.rb +26 -0
- data/lib/genesis_ruby/utils/transactions/financial_types.rb +1 -1
- data/lib/genesis_ruby/utils/transactions/references/refundable_types.rb +1 -1
- data/lib/genesis_ruby/utils/transactions/travel_data/airline_itinerary/base.rb +33 -0
- data/lib/genesis_ruby/utils/transactions/travel_data/airline_itinerary/leg.rb +97 -0
- data/lib/genesis_ruby/utils/transactions/travel_data/airline_itinerary/tax.rb +42 -0
- data/lib/genesis_ruby/utils/transactions/wpf_types.rb +1 -1
- data/lib/genesis_ruby/version.rb +1 -1
- metadata +24 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a4bea22025e527f7dacbc7289c230b6f28124b6535c471c267225b608660d40c
|
4
|
+
data.tar.gz: c437ee21a72d4d19686f908f59358245ec87356f84fa270e9a000c7a4f276d81
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 79f51dcf85135a053d6556b3fb4096ecae5d8bef785c42714e40a32a6b25f299d36ed98cc25c8cb3e7c7741d247724d7ceba997d5e86a4e8016846bc5f7c9940
|
7
|
+
data.tar.gz: 30030ba067499b12f280699ab2460840705c4b1fe24007047bfb3ebeba8e52b23f56a987ce094145db814425f6418384703b2bde54d967110bc78e4e38698109
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,29 @@
|
|
1
|
+
0.1.8
|
2
|
+
-----
|
3
|
+
**Features**:
|
4
|
+
|
5
|
+
* Added Apple Pay transaction request support
|
6
|
+
* Added Google Pay transaction request support
|
7
|
+
* Added Online Banking PayIn transaction request support
|
8
|
+
* Updated transform amount logic during request execution
|
9
|
+
* Added 3DSv2 parameters validations
|
10
|
+
|
11
|
+
0.1.7
|
12
|
+
-----
|
13
|
+
**Features**:
|
14
|
+
|
15
|
+
* Removed GiroPay transaction type support through the Web Payment Form
|
16
|
+
* Added Protocol Sub Version parameter support part of the MPI attributes
|
17
|
+
* Added Level 3 Travel Data attributes support to the following transaction requests:
|
18
|
+
* Sale
|
19
|
+
* Sale 3D
|
20
|
+
* Authorize
|
21
|
+
* Authorize 3D
|
22
|
+
* Init Recurring Sale
|
23
|
+
* Init Recurring Sale 3D
|
24
|
+
* RecurringSale
|
25
|
+
* Capture
|
26
|
+
|
1
27
|
0.1.6
|
2
28
|
-----
|
3
29
|
**Features**:
|
data/Gemfile.lock
CHANGED
@@ -1,22 +1,23 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
genesis_ruby (0.1.
|
4
|
+
genesis_ruby (0.1.8)
|
5
5
|
net-http (~> 0.3.2)
|
6
6
|
nokogiri (~> 1.14)
|
7
7
|
|
8
8
|
GEM
|
9
9
|
remote: https://rubygems.org/
|
10
10
|
specs:
|
11
|
-
addressable (2.8.
|
12
|
-
public_suffix (>= 2.0.2, <
|
11
|
+
addressable (2.8.7)
|
12
|
+
public_suffix (>= 2.0.2, < 7.0)
|
13
13
|
ast (2.4.2)
|
14
14
|
base64 (0.2.0)
|
15
|
-
bigdecimal (3.1.
|
16
|
-
concurrent-ruby (1.
|
15
|
+
bigdecimal (3.1.8)
|
16
|
+
concurrent-ruby (1.3.4)
|
17
17
|
crack (1.0.0)
|
18
18
|
bigdecimal
|
19
19
|
rexml
|
20
|
+
csv (3.3.0)
|
20
21
|
diff-lcs (1.5.1)
|
21
22
|
faker (2.23.0)
|
22
23
|
i18n (>= 1.8.11, < 2)
|
@@ -25,23 +26,24 @@ GEM
|
|
25
26
|
faraday-net_http (>= 2.0, < 3.1)
|
26
27
|
ruby2_keywords (>= 0.0.4)
|
27
28
|
faraday-net_http (3.0.2)
|
28
|
-
faraday-retry (2.2.
|
29
|
+
faraday-retry (2.2.1)
|
29
30
|
faraday (~> 2.0)
|
30
|
-
gitlab (4.
|
31
|
+
gitlab (4.20.1)
|
31
32
|
httparty (~> 0.20)
|
32
33
|
terminal-table (>= 1.5.1)
|
33
|
-
hashdiff (1.1.
|
34
|
-
httparty (0.
|
34
|
+
hashdiff (1.1.1)
|
35
|
+
httparty (0.22.0)
|
36
|
+
csv
|
35
37
|
mini_mime (>= 1.0.0)
|
36
38
|
multi_xml (>= 0.5.2)
|
37
|
-
i18n (1.14.
|
39
|
+
i18n (1.14.6)
|
38
40
|
concurrent-ruby (~> 1.0)
|
39
|
-
json (2.7.
|
41
|
+
json (2.7.2)
|
40
42
|
language_server-protocol (3.17.0.3)
|
41
43
|
mini_mime (1.1.5)
|
42
|
-
mini_portile2 (2.8.
|
44
|
+
mini_portile2 (2.8.7)
|
43
45
|
multi_xml (0.6.0)
|
44
|
-
mustermann (3.0.
|
46
|
+
mustermann (3.0.3)
|
45
47
|
ruby2_keywords (~> 0.0.1)
|
46
48
|
net-http (0.3.2)
|
47
49
|
uri
|
@@ -51,8 +53,8 @@ GEM
|
|
51
53
|
octokit (7.2.0)
|
52
54
|
faraday (>= 1, < 3)
|
53
55
|
sawyer (~> 0.9)
|
54
|
-
parallel (1.
|
55
|
-
parser (3.3.0
|
56
|
+
parallel (1.26.3)
|
57
|
+
parser (3.3.5.0)
|
56
58
|
ast (~> 2.4.1)
|
57
59
|
racc
|
58
60
|
pronto (0.11.2)
|
@@ -66,55 +68,57 @@ GEM
|
|
66
68
|
pronto-rubocop (0.11.5)
|
67
69
|
pronto (~> 0.11.0)
|
68
70
|
rubocop (>= 0.63.1, < 2.0)
|
69
|
-
public_suffix (5.
|
70
|
-
racc (1.
|
71
|
+
public_suffix (5.1.1)
|
72
|
+
racc (1.8.1)
|
71
73
|
rack (2.2.9)
|
72
74
|
rack-protection (3.2.0)
|
73
75
|
base64 (>= 0.1.0)
|
74
76
|
rack (~> 2.2, >= 2.2.4)
|
75
77
|
rainbow (3.1.1)
|
76
|
-
rake (13.1
|
77
|
-
regexp_parser (2.9.
|
78
|
-
rexml (3.
|
78
|
+
rake (13.2.1)
|
79
|
+
regexp_parser (2.9.2)
|
80
|
+
rexml (3.3.8)
|
79
81
|
rspec (3.13.0)
|
80
82
|
rspec-core (~> 3.13.0)
|
81
83
|
rspec-expectations (~> 3.13.0)
|
82
84
|
rspec-mocks (~> 3.13.0)
|
83
|
-
rspec-core (3.13.
|
85
|
+
rspec-core (3.13.1)
|
84
86
|
rspec-support (~> 3.13.0)
|
85
|
-
rspec-expectations (3.13.
|
87
|
+
rspec-expectations (3.13.3)
|
86
88
|
diff-lcs (>= 1.2.0, < 2.0)
|
87
89
|
rspec-support (~> 3.13.0)
|
88
|
-
rspec-mocks (3.13.
|
90
|
+
rspec-mocks (3.13.2)
|
89
91
|
diff-lcs (>= 1.2.0, < 2.0)
|
90
92
|
rspec-support (~> 3.13.0)
|
91
93
|
rspec-support (3.13.1)
|
92
94
|
rspec_junit_formatter (0.6.0)
|
93
95
|
rspec-core (>= 2, < 4, != 2.12.0)
|
94
|
-
rubocop (1.
|
96
|
+
rubocop (1.66.1)
|
95
97
|
json (~> 2.3)
|
96
98
|
language_server-protocol (>= 3.17.0)
|
97
99
|
parallel (~> 1.10)
|
98
100
|
parser (>= 3.3.0.2)
|
99
101
|
rainbow (>= 2.2.2, < 4.0)
|
100
|
-
regexp_parser (>=
|
101
|
-
|
102
|
-
rubocop-ast (>= 1.31.1, < 2.0)
|
102
|
+
regexp_parser (>= 2.4, < 3.0)
|
103
|
+
rubocop-ast (>= 1.32.2, < 2.0)
|
103
104
|
ruby-progressbar (~> 1.7)
|
104
105
|
unicode-display_width (>= 2.4.0, < 3.0)
|
105
|
-
rubocop-ast (1.
|
106
|
-
parser (>= 3.3.0
|
107
|
-
rubocop-capybara (2.
|
108
|
-
rubocop (~> 1.41)
|
109
|
-
rubocop-factory_bot (2.25.1)
|
106
|
+
rubocop-ast (1.32.3)
|
107
|
+
parser (>= 3.3.1.0)
|
108
|
+
rubocop-capybara (2.21.0)
|
110
109
|
rubocop (~> 1.41)
|
110
|
+
rubocop-factory_bot (2.26.1)
|
111
|
+
rubocop (~> 1.61)
|
111
112
|
rubocop-faker (1.1.0)
|
112
113
|
faker (>= 2.12.0)
|
113
114
|
rubocop (>= 0.82.0)
|
114
|
-
rubocop-rspec (2.
|
115
|
+
rubocop-rspec (2.31.0)
|
115
116
|
rubocop (~> 1.40)
|
116
117
|
rubocop-capybara (~> 2.17)
|
117
118
|
rubocop-factory_bot (~> 2.22)
|
119
|
+
rubocop-rspec_rails (~> 2.28)
|
120
|
+
rubocop-rspec_rails (2.29.1)
|
121
|
+
rubocop (~> 1.61)
|
118
122
|
ruby-progressbar (1.13.0)
|
119
123
|
ruby2_keywords (0.0.5)
|
120
124
|
rugged (1.7.2)
|
@@ -128,11 +132,11 @@ GEM
|
|
128
132
|
tilt (~> 2.0)
|
129
133
|
terminal-table (3.0.2)
|
130
134
|
unicode-display_width (>= 1.1.1, < 3)
|
131
|
-
thor (1.3.
|
132
|
-
tilt (2.
|
133
|
-
unicode-display_width (2.
|
134
|
-
uri (0.13.
|
135
|
-
webmock (3.
|
135
|
+
thor (1.3.2)
|
136
|
+
tilt (2.4.0)
|
137
|
+
unicode-display_width (2.6.0)
|
138
|
+
uri (0.13.1)
|
139
|
+
webmock (3.24.0)
|
136
140
|
addressable (>= 2.8.0)
|
137
141
|
crack (>= 0.3.2)
|
138
142
|
hashdiff (>= 0.4.0, < 2.0.0)
|
data/README.md
CHANGED
@@ -1,11 +1,13 @@
|
|
1
1
|
|
2
|
-
|
3
|
-
|
2
|
+
Genesis Ruby
|
3
|
+
========
|
4
|
+
[![Gem Version](https://badge.fury.io/rb/genesis_ruby.svg)](https://badge.fury.io/rb/genesis_ruby)
|
4
5
|
[![Software License](https://img.shields.io/badge/license-MIT-green.svg?style=flat)](LICENSE)
|
5
6
|
|
6
7
|
Ruby Client for Genesis Payment Processing Gateway
|
7
8
|
|
8
|
-
|
9
|
+
Overview
|
10
|
+
--------
|
9
11
|
|
10
12
|
Client Library for processing payments through Genesis Payment Processing Gateway. Its highly recommended to checkout "Genesis Payment Gateway API Documentation" first, in order to get an overview of Genesis's Payment Gateway API and functionality.
|
11
13
|
|
@@ -445,6 +447,214 @@ end
|
|
445
447
|
|
446
448
|
</details>
|
447
449
|
|
450
|
+
### Apple Pay Request
|
451
|
+
|
452
|
+
Apple Pay is a mobile payment solution available on iOS devices with Touch ID / Face ID support. Apple Pay allows shoppers to purchase with credit and debit cards linked to their devices.
|
453
|
+
|
454
|
+
<details>
|
455
|
+
<summary>Apple Pay Transaction Example</summary>
|
456
|
+
|
457
|
+
```ruby
|
458
|
+
require 'genesis_ruby'
|
459
|
+
|
460
|
+
begin
|
461
|
+
genesis = GenesisRuby::Genesis.for(config: configuration, request: GenesisRuby::Api::Requests::Financial::Mobile::ApplePay) do |request|
|
462
|
+
# Common Attributes
|
463
|
+
request.transaction_id = '12345-67890'
|
464
|
+
request.amount = '0.99'
|
465
|
+
request.currency = 'EUR'
|
466
|
+
request.usage = 'Example usage'
|
467
|
+
request.customer_email = 'travis@example.com'
|
468
|
+
request.customer_phone = '+1987987987987'
|
469
|
+
|
470
|
+
request.payment_subtype = GenesisRuby::Api::Constants::Transactions::Parameters::Mobile::ApplePay::PaymentSubtypes::SALE
|
471
|
+
|
472
|
+
# Billing Attributes
|
473
|
+
request.billing_first_name = 'Travis'
|
474
|
+
request.billing_last_name = 'Pastrana'
|
475
|
+
request.billing_address1 = 'Muster Str. 12'
|
476
|
+
request.billing_zip_code = '10178'
|
477
|
+
request.billing_city = 'Los Angeles'
|
478
|
+
request.billing_state = 'CA'
|
479
|
+
request.billing_country = 'US'
|
480
|
+
|
481
|
+
# Apple Pay Payment Token
|
482
|
+
json_token = '{"paymentData":{"version":"EC_v1","data":"MgcrhHr/uhfRy7zxMOvahhf5sp+ZfUsWADlG5OhvZ8vEAybEouyk4tT8oYaOqlfNTdkJZl2tmCgyLReibOjW2RiXzw5S9ZtA6ISnEBjNFla9Hju1KJnxQ+QFIdSlhEDOqN/Wk9kSFz2mnT8wajaG6mytpXhzCxvl5ElCp0gm0wMb82lvpf6my5TIu+CuANPZ2g/kslqKUGEjQHhO3FVqmiEj2YpkrlhXcvFu1GalTOWgjnLVCMz8l8DCQek/UIZQ3ZiJEoQTlEZRzXlwG8FlEp/QwbLiIlQfDLCtu3pBH0EaOeQ1OwupXs64EYfL+DEzYKdpi7dE9Y93zcXR6y2qsawBC8lCeI8zGc+kRFQJ5IrPd81BRZep3xsHwh1uki2dfx2taLyjxyCWWKaUWCzYI1p/u7YsypYEMj3np+MHfg==","signature":"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","header":{"wrappedKey": "wrapped key", "ephemeralPublicKey":"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJsaMBlzR3D0H7xKwDncLNGOEcsl6Jilx5d+MDI/1QFxuIf6a0fY5qgOwnuLgZepqc3AVeU1RV8enPCQSWfFKRg==","publicKeyHash":"QOmvMaoCNYk5tv+69KC1i2UCFQcOl6LYPIJfYAT+SLQ=","transactionId":"ccedaf3f32efcc971259694f0efd0dcaa0ed545e7a31a0f7ec8e1c110656c25b"}},"paymentMethod":{"displayName":"Visa 0225","network":"Visa","type":"debit"},"transactionIdentifier":"CCEDAF3F32EFCC971259694F0EFD0DCAA0ED545E7A31A0F7EC8E1C110656C25B"}'
|
483
|
+
|
484
|
+
# Set Apple Pay token from a JSON string
|
485
|
+
request.json_token = json_token
|
486
|
+
|
487
|
+
# Alternatively you can set every token attributes
|
488
|
+
# token = JSON.parse json_token
|
489
|
+
# request.token_version = token['paymentData']['version']
|
490
|
+
# request.token_data = token['paymentData']['data']
|
491
|
+
# request.token_signature = token['paymentData']['signature']
|
492
|
+
# request.token_ephemeral_public_key = token['paymentData']['header']['ephemeralPublicKey']
|
493
|
+
# request.token_public_key_hash = token['paymentData']['header']['publicKeyHash']
|
494
|
+
# request.token_transaction_id = token['paymentData']['header']['transactionId']
|
495
|
+
# request.token_display_name = token['paymentMethod']['displayName']
|
496
|
+
# request.token_network = token['paymentMethod']['network']
|
497
|
+
# request.token_type = token['paymentMethod']['type']
|
498
|
+
# request.token_transaction_identifier = token['transactionIdentifier']
|
499
|
+
end.execute
|
500
|
+
|
501
|
+
puts genesis.response.response_object
|
502
|
+
rescue GenesisRuby::Error => error
|
503
|
+
puts error.message
|
504
|
+
end
|
505
|
+
```
|
506
|
+
|
507
|
+
</details>
|
508
|
+
|
509
|
+
<details>
|
510
|
+
<summary>Apple Pay Web Payment Form Example</summary>
|
511
|
+
|
512
|
+
```ruby
|
513
|
+
require 'genesis_ruby'
|
514
|
+
|
515
|
+
begin
|
516
|
+
genesis = GenesisRuby::Genesis.for(config: configuration, request: GenesisRuby::Api::Requests::Wpf::Create) do |request|
|
517
|
+
# Common Attributes
|
518
|
+
request.transaction_id = '12345-67890'
|
519
|
+
request.amount = '0.99'
|
520
|
+
request.currency = 'EUR'
|
521
|
+
request.usage = 'Example usage'
|
522
|
+
request.description = 'You are about to complete you purchase'
|
523
|
+
request.customer_email = 'travis@example.com'
|
524
|
+
request.customer_phone = '+1987987987987'
|
525
|
+
request.notification_url = 'https://www.example.com/notification'
|
526
|
+
request.return_success_url = 'https://www.example.com/success'
|
527
|
+
request.return_cancel_url = 'https://www.example.com/failure'
|
528
|
+
request.return_failure_url = 'https://www.example.com/cancel.html'
|
529
|
+
request.return_pending_url = 'https://www.example.com/payment-pending.html'
|
530
|
+
|
531
|
+
# Transaction Types
|
532
|
+
request.add_transaction_type('apple_pay', { payment_subtype: GenesisRuby::Api::Constants::Transactions::Parameters::Mobile::ApplePay::PaymentSubtypes::AUTHORIZE })
|
533
|
+
|
534
|
+
# Billing Attributes
|
535
|
+
request.billing_first_name = 'Travis'
|
536
|
+
request.billing_last_name = 'Pastrana'
|
537
|
+
request.billing_address1 = 'Muster Str. 12'
|
538
|
+
request.billing_zip_code = '10178'
|
539
|
+
request.billing_city = 'Los Angeles'
|
540
|
+
request.billing_state = 'CA'
|
541
|
+
request.billing_country = 'US'
|
542
|
+
end.execute
|
543
|
+
|
544
|
+
puts genesis.response.response_object
|
545
|
+
|
546
|
+
rescue GenesisRuby::Error => error
|
547
|
+
puts error.message
|
548
|
+
end
|
549
|
+
```
|
550
|
+
|
551
|
+
</details>
|
552
|
+
|
553
|
+
### Google Pay Request
|
554
|
+
|
555
|
+
Google Pay allows shoppers to purchase with credit and debit cards linked to their Google account.
|
556
|
+
|
557
|
+
<details>
|
558
|
+
<summary>Google Pay Transaction Example</summary>
|
559
|
+
|
560
|
+
```ruby
|
561
|
+
require 'genesis_ruby'
|
562
|
+
|
563
|
+
begin
|
564
|
+
genesis = GenesisRuby::Genesis.for(config: configuration, request: GenesisRuby::Api::Requests::Financial::Mobile::GooglePay) do |request|
|
565
|
+
# Common Attributes
|
566
|
+
request.transaction_id = '12345-67890'
|
567
|
+
request.amount = '0.99'
|
568
|
+
request.currency = 'EUR'
|
569
|
+
request.usage = 'Example usage'
|
570
|
+
request.customer_email = 'travis@example.com'
|
571
|
+
request.customer_phone = '+1987987987987'
|
572
|
+
|
573
|
+
request.payment_subtype = GenesisRuby::Api::Constants::Transactions::Parameters::Mobile::GooglePay::PaymentSubtypes::SALE
|
574
|
+
|
575
|
+
# Billing Attributes
|
576
|
+
request.billing_first_name = 'Travis'
|
577
|
+
request.billing_last_name = 'Pastrana'
|
578
|
+
request.billing_address1 = 'Muster Str. 12'
|
579
|
+
request.billing_zip_code = '10178'
|
580
|
+
request.billing_city = 'Los Angeles'
|
581
|
+
request.billing_state = 'CA'
|
582
|
+
request.billing_country = 'US'
|
583
|
+
|
584
|
+
# Google Pay Payment Token
|
585
|
+
json_token = '{
|
586
|
+
"protocolVersion":"ECv2",
|
587
|
+
"signature":"MEQCIH6Q4OwQ0jAceFEkGF0JID6sJNXxOEi4r+mA7biRxqBQAiAondqoUpU/bdsrAOpZIsrHQS9nwiiNwOrr24RyPeHA0Q\u003d\u003d",
|
588
|
+
"intermediateSigningKey":{
|
589
|
+
"signedKey": "{\"keyExpiration\":\"1542323393147\",\"keyValue\":\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE/1+3HBVSbdv+j7NaArdgMyoSAM43yRydzqdg1TxodSzA96Dj4Mc1EiKroxxunavVIvdxGnJeFViTzFvzFRxyCw\\u003d\\u003d\"}",
|
590
|
+
"signatures": ["MEYCIQCO2EIi48s8VTH+ilMEpoXLFfkxAwHjfPSCVED/QDSHmQIhALLJmrUlNAY8hDQRV/y1iKZGsWpeNmIP+z+tCQHQxP0v"]
|
591
|
+
},
|
592
|
+
"signedMessage":"{\"tag\":\"jpGz1F1Bcoi/fCNxI9n7Qrsw7i7KHrGtTf3NrRclt+U\\u003d\",\"ephemeralPublicKey\":\"BJatyFvFPPD21l8/uLP46Ta1hsKHndf8Z+tAgk+DEPQgYTkhHy19cF3h/bXs0tWTmZtnNm+vlVrKbRU9K8+7cZs\\u003d\",\"encryptedMessage\":\"mKOoXwi8OavZ\"}"
|
593
|
+
}'
|
594
|
+
|
595
|
+
# Set Google Pay token from a JSON string
|
596
|
+
request.json_token = json_token
|
597
|
+
|
598
|
+
# Alternatively you can set every token attributes
|
599
|
+
# token = JSON.parse json_token
|
600
|
+
# request.token_protocol_version = token['protocolVersion']
|
601
|
+
# request.token_signature = token['signature']
|
602
|
+
# request.token_signed_key = token['intermediateSigningKey']['signedKey']
|
603
|
+
# request.token_signatures = token['intermediateSigningKey']['signatures']
|
604
|
+
# request.token_signed_message = token['signedMessage']
|
605
|
+
end.execute
|
606
|
+
|
607
|
+
puts genesis.response.response_object
|
608
|
+
rescue GenesisRuby::Error => error
|
609
|
+
puts error.message
|
610
|
+
end
|
611
|
+
```
|
612
|
+
|
613
|
+
</details>
|
614
|
+
|
615
|
+
<details>
|
616
|
+
<summary>Google Pay Web Payment Form Example</summary>
|
617
|
+
|
618
|
+
```ruby
|
619
|
+
require 'genesis_ruby'
|
620
|
+
|
621
|
+
begin
|
622
|
+
genesis = GenesisRuby::Genesis.for(config: configuration, request: GenesisRuby::Api::Requests::Wpf::Create) do |request|
|
623
|
+
# Common Attributes
|
624
|
+
request.transaction_id = '12345-67890'
|
625
|
+
request.amount = '0.99'
|
626
|
+
request.currency = 'EUR'
|
627
|
+
request.usage = 'Example usage'
|
628
|
+
request.description = 'You are about to complete you purchase'
|
629
|
+
request.customer_email = 'travis@example.com'
|
630
|
+
request.customer_phone = '+1987987987987'
|
631
|
+
request.notification_url = 'https://www.example.com/notification'
|
632
|
+
request.return_success_url = 'https://www.example.com/success'
|
633
|
+
request.return_cancel_url = 'https://www.example.com/failure'
|
634
|
+
request.return_failure_url = 'https://www.example.com/cancel.html'
|
635
|
+
request.return_pending_url = 'https://www.example.com/payment-pending.html'
|
636
|
+
|
637
|
+
# Transaction Types
|
638
|
+
request.add_transaction_type('google_pay', { payment_subtype: GenesisRuby::Api::Constants::Transactions::Parameters::Mobile::GooglePay::PaymentSubtypes::AUTHORIZE })
|
639
|
+
|
640
|
+
# Billing Attributes
|
641
|
+
request.billing_first_name = 'Travis'
|
642
|
+
request.billing_last_name = 'Pastrana'
|
643
|
+
request.billing_address1 = 'Muster Str. 12'
|
644
|
+
request.billing_zip_code = '10178'
|
645
|
+
request.billing_city = 'Los Angeles'
|
646
|
+
request.billing_state = 'CA'
|
647
|
+
request.billing_country = 'US'
|
648
|
+
end.execute
|
649
|
+
|
650
|
+
puts genesis.response.response_object
|
651
|
+
|
652
|
+
rescue GenesisRuby::Error => error
|
653
|
+
puts error.message
|
654
|
+
end
|
655
|
+
```
|
656
|
+
|
657
|
+
</details>
|
448
658
|
|
449
659
|
### Recurring
|
450
660
|
|
@@ -485,6 +695,89 @@ request.recurring_type = GenesisRuby::Api::Constants::Transactions::Parameters::
|
|
485
695
|
```
|
486
696
|
</details>
|
487
697
|
|
698
|
+
#### Level 3 Travel Data
|
699
|
+
Level 3 travel data is supplied as optional data to the standard API request. If the supplied is valid travel data then the transaction will be processed as a travel transaction and will qualify for the travel Incentive rates. Otherwise the transaction will be processed normally as a regular transaction. Note that the travel data will be stored as part of the transaction in all cases.
|
700
|
+
|
701
|
+
<details>
|
702
|
+
<summary>Example Leg Data</summary>
|
703
|
+
|
704
|
+
```ruby
|
705
|
+
GenesisRuby::Utils::Transactions::TravelData::AirlineItinerary::Leg.new departure_date: '2034-12-31',
|
706
|
+
arrival_date: '2034-12-31',
|
707
|
+
carrier_code: 12,
|
708
|
+
service_class: 1,
|
709
|
+
origin_city: 'VAR',
|
710
|
+
destination_city: 'FRA',
|
711
|
+
stopover_code: 0,
|
712
|
+
fare_basis_code: 1,
|
713
|
+
flight_number: 'W1234',
|
714
|
+
departure_time: '11:37',
|
715
|
+
departure_time_segment: 'P'
|
716
|
+
```
|
717
|
+
|
718
|
+
</details>
|
719
|
+
|
720
|
+
<details>
|
721
|
+
<summary>Example Tax Data</summary>
|
722
|
+
|
723
|
+
```ruby
|
724
|
+
GenesisRuby::Utils::Transactions::TravelData::AirlineItinerary::Tax.new fee_type: 'type',
|
725
|
+
fee_amount: 0.99 # will converted automatically to minor format based on the currency
|
726
|
+
```
|
727
|
+
|
728
|
+
</details>
|
729
|
+
|
730
|
+
<details>
|
731
|
+
<summary>Example Level 3 Travel Data</summary>
|
732
|
+
|
733
|
+
```ruby
|
734
|
+
# Ticket attributes
|
735
|
+
request.travel_aid_ticket_number = '123456789012345'
|
736
|
+
request.travel_aid_passenger_name = 'Test Example'
|
737
|
+
request.travel_aid_customer_code = 1
|
738
|
+
request.travel_aid_issuing_carrier = 'AAAA'
|
739
|
+
request.travel_aid_total_fare = '0.99' # will converted automatically to minor format based on the currency
|
740
|
+
request.travel_aid_agency_name = 'Agency'
|
741
|
+
request.travel_aid_agency_code = 'AG001'
|
742
|
+
request.travel_aid_date_of_issue = '2018-02-01'
|
743
|
+
request.travel_aid_restricted_ticket_indicator = 1
|
744
|
+
request.travel_aid_confirmation_information = 'Confirmation'
|
745
|
+
|
746
|
+
request.add_travel_aid_leg leg
|
747
|
+
request.add_travel_aid_tax tax
|
748
|
+
|
749
|
+
# Car rental
|
750
|
+
request.travel_car_rental_purchase_identifier = '12478'
|
751
|
+
request.travel_car_rental_class_id = 3
|
752
|
+
request.travel_car_rental_pickup_date = '2034-12-31'
|
753
|
+
request.travel_car_rental_renter_name = 'John Smith'
|
754
|
+
request.travel_car_rental_return_city = 'Varna'
|
755
|
+
request.travel_car_rental_return_state = 'VAR'
|
756
|
+
request.travel_car_rental_return_country = 'BGR'
|
757
|
+
request.travel_car_rental_return_date = '2034-12-31'
|
758
|
+
request.travel_car_rental_renter_return_location_id = '12478'
|
759
|
+
request.travel_car_rental_customer_code = 1
|
760
|
+
request.travel_car_rental_extra_charges = 2
|
761
|
+
request.travel_car_rental_no_show_indicator = 1
|
762
|
+
|
763
|
+
# Hotel Rental attributes
|
764
|
+
request.travel_hotel_rental_purchase_identifier = '12478'
|
765
|
+
request.travel_hotel_rental_arrival_date = '2034-12-31'
|
766
|
+
request.travel_hotel_rental_departure_date = '2034-12-31'
|
767
|
+
request.travel_hotel_rental_customer_code = '12478'
|
768
|
+
request.travel_hotel_rental_no_show_indicator = 1
|
769
|
+
|
770
|
+
# Reference Ticket Attributes
|
771
|
+
request.travel_ac_ticket_reference_id = '8b7e3575e5605ea7e1895707a3e92837'
|
772
|
+
request.travel_ac_ticket_document_number = '1111'
|
773
|
+
request.travel_ac_issued_with_ticket_number = '12321'
|
774
|
+
|
775
|
+
# Ancillary Charges
|
776
|
+
request.travel_ac_type = 'BF'
|
777
|
+
request.travel_ac_sub_type = 'BG'
|
778
|
+
```
|
779
|
+
|
780
|
+
</details>
|
488
781
|
|
489
782
|
## Response
|
490
783
|
|
@@ -704,11 +997,20 @@ GenesisRuby::Api::Requests::Financial::Cards::Authorize3d
|
|
704
997
|
GenesisRuby::Api::Requests::Financial::Cards::Sale
|
705
998
|
GenesisRuby::Api::Requests::Financial::Cards::Sale3d
|
706
999
|
|
1000
|
+
## Mobile
|
1001
|
+
GenesisRuby::Api::Requests::Financial::Mobile::ApplePay
|
1002
|
+
GenesisRuby::Api::Requests::Financial::Mobile::GooglePay
|
1003
|
+
|
707
1004
|
# Web Payment Form
|
708
1005
|
## Create
|
709
1006
|
GenesisRuby::Api::Requests::Wpf::Create
|
1007
|
+
## WPF Reconcile
|
710
1008
|
GenesisRuby::Api::Requests::Wpf::Reconcile
|
711
1009
|
|
1010
|
+
# Online Banking Payments
|
1011
|
+
# PayIn
|
1012
|
+
GenesisRuby::Api::Requests::Financial::OnlineBankingPayments::OnlineBanking::PayIn
|
1013
|
+
|
712
1014
|
# References
|
713
1015
|
GenesisRuby::Api::Requests::Financial::Capture
|
714
1016
|
GenesisRuby::Api::Requests::Financial::Void
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.8
|
data/lib/genesis_ruby/api/constants/transactions/parameters/mobile/apple_pay/payment_subtypes.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
module GenesisRuby
|
2
|
+
module Api
|
3
|
+
module Constants
|
4
|
+
module Transactions
|
5
|
+
module Parameters
|
6
|
+
module Mobile
|
7
|
+
module ApplePay
|
8
|
+
# Apple Pay Payment Subtypes allowed values
|
9
|
+
class PaymentSubtypes
|
10
|
+
|
11
|
+
extend Mixins::Constants::Common
|
12
|
+
|
13
|
+
# Apple Pay authorize payment subtype
|
14
|
+
AUTHORIZE = 'authorize'.freeze
|
15
|
+
|
16
|
+
# Apple Pay init_recurring_sale payment subtype
|
17
|
+
INIT_RECURRING_SALE = 'init_recurring_sale'.freeze
|
18
|
+
|
19
|
+
# Apple Pay sale payment subtype
|
20
|
+
SALE = 'sale'.freeze
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/lib/genesis_ruby/api/constants/transactions/parameters/mobile/google_pay/payment_subtypes.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
module GenesisRuby
|
2
|
+
module Api
|
3
|
+
module Constants
|
4
|
+
module Transactions
|
5
|
+
module Parameters
|
6
|
+
module Mobile
|
7
|
+
module GooglePay
|
8
|
+
# Payment Subtype allowed values
|
9
|
+
class PaymentSubtypes
|
10
|
+
|
11
|
+
extend Mixins::Constants::Common
|
12
|
+
|
13
|
+
# Google Pay authorize payment subtype
|
14
|
+
AUTHORIZE = 'authorize'.freeze
|
15
|
+
|
16
|
+
# Google Pay init_recurring_sale payment subtype
|
17
|
+
INIT_RECURRING_SALE = 'init_recurring_sale'.freeze
|
18
|
+
|
19
|
+
# Google Pay sale payment subtype
|
20
|
+
SALE = 'sale'.freeze
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module GenesisRuby
|
2
|
+
module Api
|
3
|
+
module Constants
|
4
|
+
module Transactions
|
5
|
+
module Parameters
|
6
|
+
# Mpi Protocol Versions allowed values
|
7
|
+
class MpiProtocolSubVersions
|
8
|
+
|
9
|
+
extend Mixins::Constants::Common
|
10
|
+
|
11
|
+
# Sub-protocol Version 1
|
12
|
+
PROTOCOL_SUB_VERSION_1 = 1
|
13
|
+
|
14
|
+
# Sub-protocol Version 2
|
15
|
+
PROTOCOL_SUB_VERSION_2 = 2
|
16
|
+
|
17
|
+
# Sub-protocol Version 3
|
18
|
+
PROTOCOL_SUB_VERSION_3 = 3
|
19
|
+
|
20
|
+
# Sub-protocol Version 4
|
21
|
+
PROTOCOL_SUB_VERSION_4 = 4
|
22
|
+
|
23
|
+
# Sub-protocol Version 5
|
24
|
+
PROTOCOL_SUB_VERSION_5 = 5
|
25
|
+
|
26
|
+
# Sub-protocol Version 6
|
27
|
+
PROTOCOL_SUB_VERSION_6 = 6
|
28
|
+
|
29
|
+
# Sub-protocol Version 7
|
30
|
+
PROTOCOL_SUB_VERSION_7 = 7
|
31
|
+
|
32
|
+
# Sub-protocol Version 8
|
33
|
+
PROTOCOL_SUB_VERSION_8 = 8
|
34
|
+
|
35
|
+
# Sub-protocol Version 9
|
36
|
+
PROTOCOL_SUB_VERSION_9 = 9
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|