From 7c5d9d4dc3f39a648edbedb13c0c0818d7655dcf Mon Sep 17 00:00:00 2001 From: devUniWork Date: Mon, 19 Jan 2026 21:18:07 +1000 Subject: [PATCH 01/12] add three d secure module --- lib/fat_zebra/three_d_secure.rb | 93 +++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 lib/fat_zebra/three_d_secure.rb diff --git a/lib/fat_zebra/three_d_secure.rb b/lib/fat_zebra/three_d_secure.rb new file mode 100644 index 0000000..ce80d56 --- /dev/null +++ b/lib/fat_zebra/three_d_secure.rb @@ -0,0 +1,93 @@ +# frozen_string_literal: true + +module FatZebra + ## + # == FatZebra \ThreeDSecure + # + # Manage 3DS2 authentication for the Cybersource REST API + # + # * setup + # * enrollment + # * validation + # + class ThreeDSecure < APIResource + @resource_name = 'three_d_secure' + + validates :card_token, required: true, on: :setup + validates :merchant_username, + :card_token, + :amount, + :currency, + :reference, + :verification, + :device_channel, + :reference_id, + :return_url, + :acs_window_size, + :browser_accept_content, + :browser_language, + :browser_java_enabled, + :browser_color_depth, + :browser_screen_height, + :browser_screen_width, + :browser_time_difference, + :browser_user_agent, + presence: true, + on: :check_enrollment + validates :merchant_username, + :card_token, + :amount, + :currency, + :authentication_transaction_id, + presence: true, + on: :validate_authentication + + class << self + ## + # Sets up a 3ds request + # + # @param [Hash] params + # @param [Hash] options for the request, and configurations (Optional) + # + # @return [FatZebra::ThreeDSecure] + def setup(params = {}, options = {}) + valid!(params, :setup) if respond_to?(:valid!) + + response = request(:post, "#{resource_path}/setup", params, options) + initialize_from(response) + end + + ## + # Enrols card + # + # @param [Hash] params + # @param [Hash] options for the request, and configurations (Optional) + # + # @return [FatZebra::ThreeDSecure] + + def check_enrollment(params = {}, options {}) + valid!(params, :check_enrollment) if respond_to?(:valid!) + + response = request(:post, "#{resource_path}/check_enrollment", params, options) + initialize_from(response) + end + + ## + # Validates card + # + # @param [Hash] params + # @param [Hash] options for the request, and configurations (Optional) + # + # @return [FatZebra::ThreeDSecure] + + def validate_authentication(params = {}, options {}) + valid!(params, :validate_authentication) if respond_to?(:valid!) + + response = request(:post, "#{resource_path}/validate_authentication", params, options) + initialize_from(response) + end + + end + + end +end From ef5cb9a45cadcb08fe73a5ba017606af829ca6e6 Mon Sep 17 00:00:00 2001 From: devUniWork Date: Mon, 19 Jan 2026 22:45:55 +1000 Subject: [PATCH 02/12] add specs --- Gemfile.lock | 80 +++++++ gemfiles/ruby3.4/Gemfile | 2 +- gemfiles/ruby3.4/Gemfile.lock | 2 +- lib/fat_zebra.rb | 1 + lib/fat_zebra/three_d_secure.rb | 83 ++++--- .../_check_enrollment/validations/1_2_3_1.yml | 89 +++++++ .../with_invalid_input/1_2_1_1.yml | 135 +++++++++++ .../with_invalid_input/1_2_1_2.yml | 135 +++++++++++ .../with_invalid_input/1_2_1_3.yml | 135 +++++++++++ .../with_invalid_input/1_2_1_4.yml | 135 +++++++++++ .../with_invalid_input/1_2_1_5.yml | 135 +++++++++++ .../with_invalid_input/1_2_1_6.yml | 135 +++++++++++ .../with_valid_input/1_2_2_1.yml | 135 +++++++++++ .../with_valid_input/1_2_2_3.yml | 135 +++++++++++ .../returns_expected_keys.yml | 135 +++++++++++ .../_setup/with_invalid_input/1_1_1_1.yml | 135 +++++++++++ .../_setup/with_invalid_input/1_1_1_2.yml | 135 +++++++++++ .../_setup/with_valid_input/1_1_2_1.yml | 135 +++++++++++ .../returns_expected_keys.yml | 135 +++++++++++ .../validations/1_3_3_1.yml | 89 +++++++ .../with_invalid_input/1_3_1_1.yml | 135 +++++++++++ .../with_invalid_input/1_3_1_2.yml | 135 +++++++++++ .../with_invalid_input/1_3_1_3.yml | 135 +++++++++++ .../with_valid_input/1_3_2_1.yml | 135 +++++++++++ .../returns_expected_keys.yml | 135 +++++++++++ spec/lib/fat_zebra/three_d_secure_spec.rb | 218 ++++++++++++++++++ 26 files changed, 2957 insertions(+), 37 deletions(-) create mode 100644 Gemfile.lock create mode 100644 spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/validations/1_2_3_1.yml create mode 100644 spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_invalid_input/1_2_1_1.yml create mode 100644 spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_invalid_input/1_2_1_2.yml create mode 100644 spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_invalid_input/1_2_1_3.yml create mode 100644 spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_invalid_input/1_2_1_4.yml create mode 100644 spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_invalid_input/1_2_1_5.yml create mode 100644 spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_invalid_input/1_2_1_6.yml create mode 100644 spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_valid_input/1_2_2_1.yml create mode 100644 spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_valid_input/1_2_2_3.yml create mode 100644 spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_valid_input/returns_expected_keys.yml create mode 100644 spec/cassettes/FatZebra_ThreeDSecure/_setup/with_invalid_input/1_1_1_1.yml create mode 100644 spec/cassettes/FatZebra_ThreeDSecure/_setup/with_invalid_input/1_1_1_2.yml create mode 100644 spec/cassettes/FatZebra_ThreeDSecure/_setup/with_valid_input/1_1_2_1.yml create mode 100644 spec/cassettes/FatZebra_ThreeDSecure/_setup/with_valid_input/returns_expected_keys.yml create mode 100644 spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/validations/1_3_3_1.yml create mode 100644 spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/with_invalid_input/1_3_1_1.yml create mode 100644 spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/with_invalid_input/1_3_1_2.yml create mode 100644 spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/with_invalid_input/1_3_1_3.yml create mode 100644 spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/with_valid_input/1_3_2_1.yml create mode 100644 spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/with_valid_input/returns_expected_keys.yml create mode 100644 spec/lib/fat_zebra/three_d_secure_spec.rb diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..478a45e --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,80 @@ +PATH + remote: . + specs: + fat_zebra (3.2.4) + +GEM + remote: http://rubygems.org/ + specs: + addressable (2.8.1) + public_suffix (>= 2.0.2, < 6.0) + ast (2.4.2) + byebug (11.1.3) + coderay (1.1.3) + crack (0.4.5) + rexml + diff-lcs (1.5.0) + hashdiff (1.0.1) + jaro_winkler (1.5.4) + method_source (1.0.0) + parallel (1.22.1) + parser (3.1.2.1) + ast (~> 2.4.1) + powerpack (0.1.3) + pry (0.14.1) + coderay (~> 1.1) + method_source (~> 1.0) + pry-byebug (3.10.1) + byebug (~> 11.0) + pry (>= 0.13, < 0.15) + pry-rails (0.3.9) + pry (>= 0.10.4) + public_suffix (5.0.0) + rainbow (3.1.1) + rake (13.0.6) + rexml (3.2.5) + rspec (3.11.0) + rspec-core (~> 3.11.0) + rspec-expectations (~> 3.11.0) + rspec-mocks (~> 3.11.0) + rspec-core (3.11.0) + rspec-support (~> 3.11.0) + rspec-expectations (3.11.1) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.11.0) + rspec-mocks (3.11.1) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.11.0) + rspec-support (3.11.1) + rubocop (0.58.2) + jaro_winkler (~> 1.5.1) + parallel (~> 1.10) + parser (>= 2.5, != 2.5.1.1) + powerpack (~> 0.1) + rainbow (>= 2.2.2, < 4.0) + ruby-progressbar (~> 1.7) + unicode-display_width (~> 1.0, >= 1.0.1) + ruby-progressbar (1.11.0) + unicode-display_width (1.8.0) + vcr (3.0.3) + webmock (3.18.1) + addressable (>= 2.8.0) + crack (>= 0.3.2) + hashdiff (>= 0.4.0, < 2.0.0) + +PLATFORMS + ruby + +DEPENDENCIES + byebug + fat_zebra! + pry-byebug + pry-rails + rake + rspec (~> 3.6) + rubocop (~> 0.58.1) + vcr (~> 3.0) + webmock (~> 3.0) + +BUNDLED WITH + 2.2.3 diff --git a/gemfiles/ruby3.4/Gemfile b/gemfiles/ruby3.4/Gemfile index e3dbe82..8fa7e43 100644 --- a/gemfiles/ruby3.4/Gemfile +++ b/gemfiles/ruby3.4/Gemfile @@ -2,7 +2,7 @@ source 'http://rubygems.org' -ruby '3.4.5' +ruby '3.4.7' # Specify your gem's dependencies in FatZebra.gemspec gemspec path: '../../' diff --git a/gemfiles/ruby3.4/Gemfile.lock b/gemfiles/ruby3.4/Gemfile.lock index ba579f1..c0890a6 100644 --- a/gemfiles/ruby3.4/Gemfile.lock +++ b/gemfiles/ruby3.4/Gemfile.lock @@ -84,7 +84,7 @@ DEPENDENCIES webmock RUBY VERSION - ruby 3.4.5p51 + ruby 3.4.7p58 BUNDLED WITH 2.6.9 diff --git a/lib/fat_zebra.rb b/lib/fat_zebra.rb index d52e85e..fd1212b 100644 --- a/lib/fat_zebra.rb +++ b/lib/fat_zebra.rb @@ -32,6 +32,7 @@ require 'fat_zebra/information' require 'fat_zebra/card' require 'fat_zebra/authenticate' +require 'fat_zebra/three_d_secure' require 'fat_zebra/refund' require 'fat_zebra/payment_plan' require 'fat_zebra/customer' diff --git a/lib/fat_zebra/three_d_secure.rb b/lib/fat_zebra/three_d_secure.rb index ce80d56..e854f49 100644 --- a/lib/fat_zebra/three_d_secure.rb +++ b/lib/fat_zebra/three_d_secure.rb @@ -11,38 +11,55 @@ module FatZebra # * validation # class ThreeDSecure < APIResource - @resource_name = 'three_d_secure' - validates :card_token, required: true, on: :setup - validates :merchant_username, - :card_token, - :amount, - :currency, - :reference, - :verification, - :device_channel, - :reference_id, - :return_url, - :acs_window_size, - :browser_accept_content, - :browser_language, - :browser_java_enabled, - :browser_color_depth, - :browser_screen_height, - :browser_screen_width, - :browser_time_difference, - :browser_user_agent, - presence: true, - on: :check_enrollment - validates :merchant_username, - :card_token, - :amount, - :currency, - :authentication_transaction_id, - presence: true, - on: :validate_authentication + + CHECK_ENROLLMENT_REQUIRED_FIELDS = %i[ + merchant_username + card_token + amount + currency + reference + verification + device_channel + reference_id + return_url + acs_window_size + browser_accept_content + browser_language + browser_java_enabled + browser_color_depth + browser_screen_height + browser_screen_width + browser_time_difference + browser_user_agent + ].freeze + + CHECK_ENROLLMENT_REQUIRED_FIELDS.each do |field| + validates field, required: true, on: :check_enrollment + end + + VALIDATE_AUTHENTICATION_REQUIRED_FIELDS = %i[ + merchant_username + card_token + amount + currency + authentication_transaction_id + ].freeze + + VALIDATE_AUTHENTICATION_REQUIRED_FIELDS.each do |field| + validates field, required: true, on: :validate_authentication + end class << self + + def resource_name + 'three_d_secure' + end + + def resource_path + "/sdk/#{resource_name}" + end + ## # Sets up a 3ds request # @@ -64,8 +81,7 @@ def setup(params = {}, options = {}) # @param [Hash] options for the request, and configurations (Optional) # # @return [FatZebra::ThreeDSecure] - - def check_enrollment(params = {}, options {}) + def check_enrollment(params = {}, options = {}) valid!(params, :check_enrollment) if respond_to?(:valid!) response = request(:post, "#{resource_path}/check_enrollment", params, options) @@ -79,15 +95,12 @@ def check_enrollment(params = {}, options {}) # @param [Hash] options for the request, and configurations (Optional) # # @return [FatZebra::ThreeDSecure] - - def validate_authentication(params = {}, options {}) + def validate_authentication(params = {}, options = {}) valid!(params, :validate_authentication) if respond_to?(:valid!) response = request(:post, "#{resource_path}/validate_authentication", params, options) initialize_from(response) end - end - end end diff --git a/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/validations/1_2_3_1.yml b/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/validations/1_2_3_1.yml new file mode 100644 index 0000000..20a5287 --- /dev/null +++ b/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/validations/1_2_3_1.yml @@ -0,0 +1,89 @@ +--- +http_interactions: +- request: + method: post + uri: https://gateway.sandbox.fatzebra.com.au/v1.0/credit_cards + body: + encoding: UTF-8 + string: '{"card_holder":"Matthew Savage","card_number":"5123456789012346","card_expiry":"02/2030","cvv":123,"test":true}' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - application/json + User-Agent: + - Ruby + Authorization: + - Basic VEVTVDpURVNU + Content-Type: + - application/json + response: + status: + code: 200 + message: OK + headers: + Date: + - Mon, 19 Jan 2026 12:44:06 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 200 OK + Cache-Control: + - no-store + Vary: + - Accept + X-Runtime: + - '0.076766' + Pragma: + - no-cache + X-Request-Id: + - 7d6209bc4c605af672f27528 + X-Backend: + - ip-10-100-34-142.ap-southeast-2.compute.internal + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + Content-Security-Policy-Report-Only: + - 'child-src ''self'' blob: *.cardinalcommerce.com fatzebra.statuspage.io; connect-src + ''self'' *.mastercard.com *.forter.com *.pmnts-staging.io *.rollbar.com *.nr-data.net + *.cardinalcommerce.com fatzebra.statuspage.io *.googleapis.com *.google-analytics.com + *.sdiapi.com *.sdiapi.net *.posthog.com; default-src ''self'' ''unsafe-eval'' + ''unsafe-inline'' *.forter.com *.nr-data.net blob: *.pmnts-sandbox.io *.rollbar.com + fatzebra.statuspage.io *.iovation.com data: *.googleapis.com *.gstatic.com + *.newrelic.com *.bootstrapcdn.com www.google.com pay.google.com *.google-analytics.com + *.gravatar.com; font-src ''self'' cdnjs.cloudflare.com data: *.gstatic.com + *.bootstrapcdn.com *.aexp-static.com; form-action ''self'' *.cardinalcommerce.com; + frame-ancestors ''self'' *.sdiapi.com *.sdiapi.net; frame-src ''self'' *.sdiapi.com + fatzebra.statuspage.io *.americanexpress.com www.google.com pay.google.com + *.masterpass.com *.visa.com *.mastercard.com *.recaptcha.net *.sdiapi.net; + img-src ''self'' *.visa.com data: *.googleapis.com *.gstatic.com masterpass.com + *.masterpass.com *.americanexpress.com *.google-analytics.com *.gravatar.com; + script-src ''self'' ''unsafe-eval'' ''unsafe-inline'' *.cdn-apple.com *.forter.com + *.nr-data.net *.pmnts-sandbox.io *.pmnts-staging.io *.rollbar.com fatzebra.statuspage.io + cdnjs.cloudflare.com *.iovation.com *.jquery.com *.newrelic.com *.googleapis.com + *.cardinalcommerce.com *.bootstrapcdn.com wasm-eval *.google-analytics.com + *.googletagmanager.com *.sdiapi.com *.sdiapi.net *.posthog.com; script-src-attr + ''unsafe-inline''; script-src-elem ''self'' ''unsafe-inline'' *.sdiapi.com + *.cdn-apple.com *.googletagmanager.com *.forter.com *.nr-data.net *.pmnts-sandbox.io + *.rollbar.com fatzebra.statuspage.io *.iovation.com *.jquery.com cdnjs.cloudflare.com + *.pmnts-staging.io *.aexp-static.com *.newrelic.com *.googleapis.com *.americanexpress.com + www.google.com pay.google.com *.visa.com *.masterpass.com *.mastercard.com + *.google-analytics.com *.gstatic.com *.bootstrapcdn.com *.sdiapi.net; style-src + ''self'' ''unsafe-eval'' ''unsafe-inline'' *.bootstrapcdn.com *.googleapis.com; + style-src-attr ''unsafe-inline''; style-src-elem ''unsafe-inline'' ''self'' + *.googleapis.com cdnjs.cloudflare.com *.bootstrapcdn.com *.mastercard.com; + worker-src blob: *.sdiapi.com *.sdiapi.net *.posthog.com; report-uri https://fatzebra.report-uri.com/r/d/csp/wizard' + Nel: + - '{"report_to":"default","max_age":31536000,"include_subdomains":true}' + Report-To: + - '{"group":"default","max_age":31536000,"endpoints":[{"url":"https://fatzebra.report-uri.com/a/d/g"}],"include_subdomains":true}' + body: + encoding: UTF-8 + string: '{"successful":true,"response":{"token":"02gg1kmaafmw92ah3mgo","card_holder":"Matthew + Savage","card_number":"512345XXXXXX2346","card_expiry":"2030-02-28","card_type":"MasterCard","card_category":"Debit","card_subcategory":"PrePaid","card_issuer":"Afriland + First Bank","card_country":"Liberia","authorized":true,"transaction_count":408,"alias":null},"errors":[],"test":true}' + recorded_at: Mon, 19 Jan 2026 12:44:06 GMT +recorded_with: VCR 6.3.1 diff --git a/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_invalid_input/1_2_1_1.yml b/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_invalid_input/1_2_1_1.yml new file mode 100644 index 0000000..732f57a --- /dev/null +++ b/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_invalid_input/1_2_1_1.yml @@ -0,0 +1,135 @@ +--- +http_interactions: +- request: + method: post + uri: https://gateway.sandbox.fatzebra.com.au/v1.0/credit_cards + body: + encoding: UTF-8 + string: '{"card_holder":"Matthew Savage","card_number":"5123456789012346","card_expiry":"02/2030","cvv":123,"test":true}' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - application/json + User-Agent: + - Ruby + Authorization: + - Basic VEVTVDpURVNU + Content-Type: + - application/json + response: + status: + code: 200 + message: OK + headers: + Date: + - Mon, 19 Jan 2026 12:44:04 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 200 OK + Cache-Control: + - no-store + Vary: + - Accept + Pragma: + - no-cache + X-Request-Id: + - 224d5e45050ff8786182813a + X-Runtime: + - '0.054673' + X-Backend: + - ip-10-100-34-142.ap-southeast-2.compute.internal + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + Content-Security-Policy-Report-Only: + - 'child-src ''self'' blob: *.cardinalcommerce.com fatzebra.statuspage.io; connect-src + ''self'' *.mastercard.com *.forter.com *.pmnts-staging.io *.rollbar.com *.nr-data.net + *.cardinalcommerce.com fatzebra.statuspage.io *.googleapis.com *.google-analytics.com + *.sdiapi.com *.sdiapi.net *.posthog.com; default-src ''self'' ''unsafe-eval'' + ''unsafe-inline'' *.forter.com *.nr-data.net blob: *.pmnts-sandbox.io *.rollbar.com + fatzebra.statuspage.io *.iovation.com data: *.googleapis.com *.gstatic.com + *.newrelic.com *.bootstrapcdn.com www.google.com pay.google.com *.google-analytics.com + *.gravatar.com; font-src ''self'' cdnjs.cloudflare.com data: *.gstatic.com + *.bootstrapcdn.com *.aexp-static.com; form-action ''self'' *.cardinalcommerce.com; + frame-ancestors ''self'' *.sdiapi.com *.sdiapi.net; frame-src ''self'' *.sdiapi.com + fatzebra.statuspage.io *.americanexpress.com www.google.com pay.google.com + *.masterpass.com *.visa.com *.mastercard.com *.recaptcha.net *.sdiapi.net; + img-src ''self'' *.visa.com data: *.googleapis.com *.gstatic.com masterpass.com + *.masterpass.com *.americanexpress.com *.google-analytics.com *.gravatar.com; + script-src ''self'' ''unsafe-eval'' ''unsafe-inline'' *.cdn-apple.com *.forter.com + *.nr-data.net *.pmnts-sandbox.io *.pmnts-staging.io *.rollbar.com fatzebra.statuspage.io + cdnjs.cloudflare.com *.iovation.com *.jquery.com *.newrelic.com *.googleapis.com + *.cardinalcommerce.com *.bootstrapcdn.com wasm-eval *.google-analytics.com + *.googletagmanager.com *.sdiapi.com *.sdiapi.net *.posthog.com; script-src-attr + ''unsafe-inline''; script-src-elem ''self'' ''unsafe-inline'' *.sdiapi.com + *.cdn-apple.com *.googletagmanager.com *.forter.com *.nr-data.net *.pmnts-sandbox.io + *.rollbar.com fatzebra.statuspage.io *.iovation.com *.jquery.com cdnjs.cloudflare.com + *.pmnts-staging.io *.aexp-static.com *.newrelic.com *.googleapis.com *.americanexpress.com + www.google.com pay.google.com *.visa.com *.masterpass.com *.mastercard.com + *.google-analytics.com *.gstatic.com *.bootstrapcdn.com *.sdiapi.net; style-src + ''self'' ''unsafe-eval'' ''unsafe-inline'' *.bootstrapcdn.com *.googleapis.com; + style-src-attr ''unsafe-inline''; style-src-elem ''unsafe-inline'' ''self'' + *.googleapis.com cdnjs.cloudflare.com *.bootstrapcdn.com *.mastercard.com; + worker-src blob: *.sdiapi.com *.sdiapi.net *.posthog.com; report-uri https://fatzebra.report-uri.com/r/d/csp/wizard' + Nel: + - '{"report_to":"default","max_age":31536000,"include_subdomains":true}' + Report-To: + - '{"group":"default","max_age":31536000,"endpoints":[{"url":"https://fatzebra.report-uri.com/a/d/g"}],"include_subdomains":true}' + body: + encoding: UTF-8 + string: '{"successful":true,"response":{"token":"02gg1kmaafmw92ah3mgo","card_holder":"Matthew + Savage","card_number":"512345XXXXXX2346","card_expiry":"2030-02-28","card_type":"MasterCard","card_category":"Debit","card_subcategory":"PrePaid","card_issuer":"Afriland + First Bank","card_country":"Liberia","authorized":true,"transaction_count":408,"alias":null},"errors":[],"test":true}' + recorded_at: Mon, 19 Jan 2026 12:44:04 GMT +- request: + method: post + uri: https://gateway.sandbox.fatzebra.com.au/sdk/three_d_secure/setup + body: + encoding: UTF-8 + string: '{"card_token":"02gg1kmaafmw92ah3mgo","test":true}' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - application/json + User-Agent: + - Ruby + Authorization: + - Basic VEVTVDpURVNU + Content-Type: + - application/json + response: + status: + code: 401 + message: Unauthorized + headers: + Date: + - Mon, 19 Jan 2026 12:44:04 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 401 Unauthorized + Vary: + - Accept, Origin + X-Request-Id: + - 6cd49d0b31d09f6c17e7631d + X-Runtime: + - '0.019497' + X-Backend: + - ip-10-100-34-142.ap-southeast-2.compute.internal + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: UTF-8 + string: '{"error":"Unauthorized"}' + recorded_at: Mon, 19 Jan 2026 12:44:04 GMT +recorded_with: VCR 6.3.1 diff --git a/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_invalid_input/1_2_1_2.yml b/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_invalid_input/1_2_1_2.yml new file mode 100644 index 0000000..cf2fac9 --- /dev/null +++ b/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_invalid_input/1_2_1_2.yml @@ -0,0 +1,135 @@ +--- +http_interactions: +- request: + method: post + uri: https://gateway.sandbox.fatzebra.com.au/v1.0/credit_cards + body: + encoding: UTF-8 + string: '{"card_holder":"Matthew Savage","card_number":"5123456789012346","card_expiry":"02/2030","cvv":123,"test":true}' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - application/json + User-Agent: + - Ruby + Authorization: + - Basic VEVTVDpURVNU + Content-Type: + - application/json + response: + status: + code: 200 + message: OK + headers: + Date: + - Mon, 19 Jan 2026 12:44:04 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 200 OK + Cache-Control: + - no-store + Vary: + - Accept + Pragma: + - no-cache + X-Request-Id: + - 10c272c9033cd00b2d7a3790 + X-Runtime: + - '0.049831' + X-Backend: + - ip-10-100-34-142.ap-southeast-2.compute.internal + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + Content-Security-Policy-Report-Only: + - 'child-src ''self'' blob: *.cardinalcommerce.com fatzebra.statuspage.io; connect-src + ''self'' *.mastercard.com *.forter.com *.pmnts-staging.io *.rollbar.com *.nr-data.net + *.cardinalcommerce.com fatzebra.statuspage.io *.googleapis.com *.google-analytics.com + *.sdiapi.com *.sdiapi.net *.posthog.com; default-src ''self'' ''unsafe-eval'' + ''unsafe-inline'' *.forter.com *.nr-data.net blob: *.pmnts-sandbox.io *.rollbar.com + fatzebra.statuspage.io *.iovation.com data: *.googleapis.com *.gstatic.com + *.newrelic.com *.bootstrapcdn.com www.google.com pay.google.com *.google-analytics.com + *.gravatar.com; font-src ''self'' cdnjs.cloudflare.com data: *.gstatic.com + *.bootstrapcdn.com *.aexp-static.com; form-action ''self'' *.cardinalcommerce.com; + frame-ancestors ''self'' *.sdiapi.com *.sdiapi.net; frame-src ''self'' *.sdiapi.com + fatzebra.statuspage.io *.americanexpress.com www.google.com pay.google.com + *.masterpass.com *.visa.com *.mastercard.com *.recaptcha.net *.sdiapi.net; + img-src ''self'' *.visa.com data: *.googleapis.com *.gstatic.com masterpass.com + *.masterpass.com *.americanexpress.com *.google-analytics.com *.gravatar.com; + script-src ''self'' ''unsafe-eval'' ''unsafe-inline'' *.cdn-apple.com *.forter.com + *.nr-data.net *.pmnts-sandbox.io *.pmnts-staging.io *.rollbar.com fatzebra.statuspage.io + cdnjs.cloudflare.com *.iovation.com *.jquery.com *.newrelic.com *.googleapis.com + *.cardinalcommerce.com *.bootstrapcdn.com wasm-eval *.google-analytics.com + *.googletagmanager.com *.sdiapi.com *.sdiapi.net *.posthog.com; script-src-attr + ''unsafe-inline''; script-src-elem ''self'' ''unsafe-inline'' *.sdiapi.com + *.cdn-apple.com *.googletagmanager.com *.forter.com *.nr-data.net *.pmnts-sandbox.io + *.rollbar.com fatzebra.statuspage.io *.iovation.com *.jquery.com cdnjs.cloudflare.com + *.pmnts-staging.io *.aexp-static.com *.newrelic.com *.googleapis.com *.americanexpress.com + www.google.com pay.google.com *.visa.com *.masterpass.com *.mastercard.com + *.google-analytics.com *.gstatic.com *.bootstrapcdn.com *.sdiapi.net; style-src + ''self'' ''unsafe-eval'' ''unsafe-inline'' *.bootstrapcdn.com *.googleapis.com; + style-src-attr ''unsafe-inline''; style-src-elem ''unsafe-inline'' ''self'' + *.googleapis.com cdnjs.cloudflare.com *.bootstrapcdn.com *.mastercard.com; + worker-src blob: *.sdiapi.com *.sdiapi.net *.posthog.com; report-uri https://fatzebra.report-uri.com/r/d/csp/wizard' + Nel: + - '{"report_to":"default","max_age":31536000,"include_subdomains":true}' + Report-To: + - '{"group":"default","max_age":31536000,"endpoints":[{"url":"https://fatzebra.report-uri.com/a/d/g"}],"include_subdomains":true}' + body: + encoding: UTF-8 + string: '{"successful":true,"response":{"token":"02gg1kmaafmw92ah3mgo","card_holder":"Matthew + Savage","card_number":"512345XXXXXX2346","card_expiry":"2030-02-28","card_type":"MasterCard","card_category":"Debit","card_subcategory":"PrePaid","card_issuer":"Afriland + First Bank","card_country":"Liberia","authorized":true,"transaction_count":408,"alias":null},"errors":[],"test":true}' + recorded_at: Mon, 19 Jan 2026 12:44:04 GMT +- request: + method: post + uri: https://gateway.sandbox.fatzebra.com.au/sdk/three_d_secure/setup + body: + encoding: UTF-8 + string: '{"card_token":"02gg1kmaafmw92ah3mgo","test":true}' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - application/json + User-Agent: + - Ruby + Authorization: + - Basic VEVTVDpURVNU + Content-Type: + - application/json + response: + status: + code: 401 + message: Unauthorized + headers: + Date: + - Mon, 19 Jan 2026 12:44:04 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 401 Unauthorized + Vary: + - Accept, Origin + X-Request-Id: + - 507956b460095d174ba46c9f + X-Runtime: + - '0.016566' + X-Backend: + - ip-10-100-34-142.ap-southeast-2.compute.internal + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: UTF-8 + string: '{"error":"Unauthorized"}' + recorded_at: Mon, 19 Jan 2026 12:44:04 GMT +recorded_with: VCR 6.3.1 diff --git a/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_invalid_input/1_2_1_3.yml b/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_invalid_input/1_2_1_3.yml new file mode 100644 index 0000000..933efa3 --- /dev/null +++ b/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_invalid_input/1_2_1_3.yml @@ -0,0 +1,135 @@ +--- +http_interactions: +- request: + method: post + uri: https://gateway.sandbox.fatzebra.com.au/v1.0/credit_cards + body: + encoding: UTF-8 + string: '{"card_holder":"Matthew Savage","card_number":"5123456789012346","card_expiry":"02/2030","cvv":123,"test":true}' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - application/json + User-Agent: + - Ruby + Authorization: + - Basic VEVTVDpURVNU + Content-Type: + - application/json + response: + status: + code: 200 + message: OK + headers: + Date: + - Mon, 19 Jan 2026 12:44:05 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 200 OK + Cache-Control: + - no-store + Vary: + - Accept + Pragma: + - no-cache + X-Request-Id: + - 657ff9072dfb07e31273b2b6 + X-Runtime: + - '0.063577' + X-Backend: + - ip-10-100-34-142.ap-southeast-2.compute.internal + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + Content-Security-Policy-Report-Only: + - 'child-src ''self'' blob: *.cardinalcommerce.com fatzebra.statuspage.io; connect-src + ''self'' *.mastercard.com *.forter.com *.pmnts-staging.io *.rollbar.com *.nr-data.net + *.cardinalcommerce.com fatzebra.statuspage.io *.googleapis.com *.google-analytics.com + *.sdiapi.com *.sdiapi.net *.posthog.com; default-src ''self'' ''unsafe-eval'' + ''unsafe-inline'' *.forter.com *.nr-data.net blob: *.pmnts-sandbox.io *.rollbar.com + fatzebra.statuspage.io *.iovation.com data: *.googleapis.com *.gstatic.com + *.newrelic.com *.bootstrapcdn.com www.google.com pay.google.com *.google-analytics.com + *.gravatar.com; font-src ''self'' cdnjs.cloudflare.com data: *.gstatic.com + *.bootstrapcdn.com *.aexp-static.com; form-action ''self'' *.cardinalcommerce.com; + frame-ancestors ''self'' *.sdiapi.com *.sdiapi.net; frame-src ''self'' *.sdiapi.com + fatzebra.statuspage.io *.americanexpress.com www.google.com pay.google.com + *.masterpass.com *.visa.com *.mastercard.com *.recaptcha.net *.sdiapi.net; + img-src ''self'' *.visa.com data: *.googleapis.com *.gstatic.com masterpass.com + *.masterpass.com *.americanexpress.com *.google-analytics.com *.gravatar.com; + script-src ''self'' ''unsafe-eval'' ''unsafe-inline'' *.cdn-apple.com *.forter.com + *.nr-data.net *.pmnts-sandbox.io *.pmnts-staging.io *.rollbar.com fatzebra.statuspage.io + cdnjs.cloudflare.com *.iovation.com *.jquery.com *.newrelic.com *.googleapis.com + *.cardinalcommerce.com *.bootstrapcdn.com wasm-eval *.google-analytics.com + *.googletagmanager.com *.sdiapi.com *.sdiapi.net *.posthog.com; script-src-attr + ''unsafe-inline''; script-src-elem ''self'' ''unsafe-inline'' *.sdiapi.com + *.cdn-apple.com *.googletagmanager.com *.forter.com *.nr-data.net *.pmnts-sandbox.io + *.rollbar.com fatzebra.statuspage.io *.iovation.com *.jquery.com cdnjs.cloudflare.com + *.pmnts-staging.io *.aexp-static.com *.newrelic.com *.googleapis.com *.americanexpress.com + www.google.com pay.google.com *.visa.com *.masterpass.com *.mastercard.com + *.google-analytics.com *.gstatic.com *.bootstrapcdn.com *.sdiapi.net; style-src + ''self'' ''unsafe-eval'' ''unsafe-inline'' *.bootstrapcdn.com *.googleapis.com; + style-src-attr ''unsafe-inline''; style-src-elem ''unsafe-inline'' ''self'' + *.googleapis.com cdnjs.cloudflare.com *.bootstrapcdn.com *.mastercard.com; + worker-src blob: *.sdiapi.com *.sdiapi.net *.posthog.com; report-uri https://fatzebra.report-uri.com/r/d/csp/wizard' + Nel: + - '{"report_to":"default","max_age":31536000,"include_subdomains":true}' + Report-To: + - '{"group":"default","max_age":31536000,"endpoints":[{"url":"https://fatzebra.report-uri.com/a/d/g"}],"include_subdomains":true}' + body: + encoding: UTF-8 + string: '{"successful":true,"response":{"token":"02gg1kmaafmw92ah3mgo","card_holder":"Matthew + Savage","card_number":"512345XXXXXX2346","card_expiry":"2030-02-28","card_type":"MasterCard","card_category":"Debit","card_subcategory":"PrePaid","card_issuer":"Afriland + First Bank","card_country":"Liberia","authorized":true,"transaction_count":408,"alias":null},"errors":[],"test":true}' + recorded_at: Mon, 19 Jan 2026 12:44:04 GMT +- request: + method: post + uri: https://gateway.sandbox.fatzebra.com.au/sdk/three_d_secure/setup + body: + encoding: UTF-8 + string: '{"card_token":"02gg1kmaafmw92ah3mgo","test":true}' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - application/json + User-Agent: + - Ruby + Authorization: + - Basic VEVTVDpURVNU + Content-Type: + - application/json + response: + status: + code: 401 + message: Unauthorized + headers: + Date: + - Mon, 19 Jan 2026 12:44:05 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 401 Unauthorized + Vary: + - Accept, Origin + X-Request-Id: + - 31785e046a59969439b1b212 + X-Runtime: + - '0.025101' + X-Backend: + - ip-10-100-34-142.ap-southeast-2.compute.internal + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: UTF-8 + string: '{"error":"Unauthorized"}' + recorded_at: Mon, 19 Jan 2026 12:44:05 GMT +recorded_with: VCR 6.3.1 diff --git a/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_invalid_input/1_2_1_4.yml b/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_invalid_input/1_2_1_4.yml new file mode 100644 index 0000000..fef7974 --- /dev/null +++ b/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_invalid_input/1_2_1_4.yml @@ -0,0 +1,135 @@ +--- +http_interactions: +- request: + method: post + uri: https://gateway.sandbox.fatzebra.com.au/v1.0/credit_cards + body: + encoding: UTF-8 + string: '{"card_holder":"Matthew Savage","card_number":"5123456789012346","card_expiry":"02/2030","cvv":123,"test":true}' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - application/json + User-Agent: + - Ruby + Authorization: + - Basic VEVTVDpURVNU + Content-Type: + - application/json + response: + status: + code: 200 + message: OK + headers: + Date: + - Mon, 19 Jan 2026 12:44:05 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 200 OK + Cache-Control: + - no-store + Vary: + - Accept + Pragma: + - no-cache + X-Request-Id: + - 421b34b416cfd83b501a8213 + X-Runtime: + - '0.051102' + X-Backend: + - ip-10-100-34-142.ap-southeast-2.compute.internal + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + Content-Security-Policy-Report-Only: + - 'child-src ''self'' blob: *.cardinalcommerce.com fatzebra.statuspage.io; connect-src + ''self'' *.mastercard.com *.forter.com *.pmnts-staging.io *.rollbar.com *.nr-data.net + *.cardinalcommerce.com fatzebra.statuspage.io *.googleapis.com *.google-analytics.com + *.sdiapi.com *.sdiapi.net *.posthog.com; default-src ''self'' ''unsafe-eval'' + ''unsafe-inline'' *.forter.com *.nr-data.net blob: *.pmnts-sandbox.io *.rollbar.com + fatzebra.statuspage.io *.iovation.com data: *.googleapis.com *.gstatic.com + *.newrelic.com *.bootstrapcdn.com www.google.com pay.google.com *.google-analytics.com + *.gravatar.com; font-src ''self'' cdnjs.cloudflare.com data: *.gstatic.com + *.bootstrapcdn.com *.aexp-static.com; form-action ''self'' *.cardinalcommerce.com; + frame-ancestors ''self'' *.sdiapi.com *.sdiapi.net; frame-src ''self'' *.sdiapi.com + fatzebra.statuspage.io *.americanexpress.com www.google.com pay.google.com + *.masterpass.com *.visa.com *.mastercard.com *.recaptcha.net *.sdiapi.net; + img-src ''self'' *.visa.com data: *.googleapis.com *.gstatic.com masterpass.com + *.masterpass.com *.americanexpress.com *.google-analytics.com *.gravatar.com; + script-src ''self'' ''unsafe-eval'' ''unsafe-inline'' *.cdn-apple.com *.forter.com + *.nr-data.net *.pmnts-sandbox.io *.pmnts-staging.io *.rollbar.com fatzebra.statuspage.io + cdnjs.cloudflare.com *.iovation.com *.jquery.com *.newrelic.com *.googleapis.com + *.cardinalcommerce.com *.bootstrapcdn.com wasm-eval *.google-analytics.com + *.googletagmanager.com *.sdiapi.com *.sdiapi.net *.posthog.com; script-src-attr + ''unsafe-inline''; script-src-elem ''self'' ''unsafe-inline'' *.sdiapi.com + *.cdn-apple.com *.googletagmanager.com *.forter.com *.nr-data.net *.pmnts-sandbox.io + *.rollbar.com fatzebra.statuspage.io *.iovation.com *.jquery.com cdnjs.cloudflare.com + *.pmnts-staging.io *.aexp-static.com *.newrelic.com *.googleapis.com *.americanexpress.com + www.google.com pay.google.com *.visa.com *.masterpass.com *.mastercard.com + *.google-analytics.com *.gstatic.com *.bootstrapcdn.com *.sdiapi.net; style-src + ''self'' ''unsafe-eval'' ''unsafe-inline'' *.bootstrapcdn.com *.googleapis.com; + style-src-attr ''unsafe-inline''; style-src-elem ''unsafe-inline'' ''self'' + *.googleapis.com cdnjs.cloudflare.com *.bootstrapcdn.com *.mastercard.com; + worker-src blob: *.sdiapi.com *.sdiapi.net *.posthog.com; report-uri https://fatzebra.report-uri.com/r/d/csp/wizard' + Nel: + - '{"report_to":"default","max_age":31536000,"include_subdomains":true}' + Report-To: + - '{"group":"default","max_age":31536000,"endpoints":[{"url":"https://fatzebra.report-uri.com/a/d/g"}],"include_subdomains":true}' + body: + encoding: UTF-8 + string: '{"successful":true,"response":{"token":"02gg1kmaafmw92ah3mgo","card_holder":"Matthew + Savage","card_number":"512345XXXXXX2346","card_expiry":"2030-02-28","card_type":"MasterCard","card_category":"Debit","card_subcategory":"PrePaid","card_issuer":"Afriland + First Bank","card_country":"Liberia","authorized":true,"transaction_count":408,"alias":null},"errors":[],"test":true}' + recorded_at: Mon, 19 Jan 2026 12:44:05 GMT +- request: + method: post + uri: https://gateway.sandbox.fatzebra.com.au/sdk/three_d_secure/setup + body: + encoding: UTF-8 + string: '{"card_token":"02gg1kmaafmw92ah3mgo","test":true}' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - application/json + User-Agent: + - Ruby + Authorization: + - Basic VEVTVDpURVNU + Content-Type: + - application/json + response: + status: + code: 401 + message: Unauthorized + headers: + Date: + - Mon, 19 Jan 2026 12:44:05 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 401 Unauthorized + Vary: + - Accept, Origin + X-Request-Id: + - 670de57b57d441c40ae87732 + X-Runtime: + - '0.040574' + X-Backend: + - ip-10-100-34-142.ap-southeast-2.compute.internal + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: UTF-8 + string: '{"error":"Unauthorized"}' + recorded_at: Mon, 19 Jan 2026 12:44:05 GMT +recorded_with: VCR 6.3.1 diff --git a/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_invalid_input/1_2_1_5.yml b/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_invalid_input/1_2_1_5.yml new file mode 100644 index 0000000..db34442 --- /dev/null +++ b/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_invalid_input/1_2_1_5.yml @@ -0,0 +1,135 @@ +--- +http_interactions: +- request: + method: post + uri: https://gateway.sandbox.fatzebra.com.au/v1.0/credit_cards + body: + encoding: UTF-8 + string: '{"card_holder":"Matthew Savage","card_number":"5123456789012346","card_expiry":"02/2030","cvv":123,"test":true}' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - application/json + User-Agent: + - Ruby + Authorization: + - Basic VEVTVDpURVNU + Content-Type: + - application/json + response: + status: + code: 200 + message: OK + headers: + Date: + - Mon, 19 Jan 2026 12:44:05 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 200 OK + Cache-Control: + - no-store + Vary: + - Accept + Pragma: + - no-cache + X-Request-Id: + - 6ccde61403c5b76756c9aecb + X-Runtime: + - '0.095471' + X-Backend: + - ip-10-100-34-142.ap-southeast-2.compute.internal + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + Content-Security-Policy-Report-Only: + - 'child-src ''self'' blob: *.cardinalcommerce.com fatzebra.statuspage.io; connect-src + ''self'' *.mastercard.com *.forter.com *.pmnts-staging.io *.rollbar.com *.nr-data.net + *.cardinalcommerce.com fatzebra.statuspage.io *.googleapis.com *.google-analytics.com + *.sdiapi.com *.sdiapi.net *.posthog.com; default-src ''self'' ''unsafe-eval'' + ''unsafe-inline'' *.forter.com *.nr-data.net blob: *.pmnts-sandbox.io *.rollbar.com + fatzebra.statuspage.io *.iovation.com data: *.googleapis.com *.gstatic.com + *.newrelic.com *.bootstrapcdn.com www.google.com pay.google.com *.google-analytics.com + *.gravatar.com; font-src ''self'' cdnjs.cloudflare.com data: *.gstatic.com + *.bootstrapcdn.com *.aexp-static.com; form-action ''self'' *.cardinalcommerce.com; + frame-ancestors ''self'' *.sdiapi.com *.sdiapi.net; frame-src ''self'' *.sdiapi.com + fatzebra.statuspage.io *.americanexpress.com www.google.com pay.google.com + *.masterpass.com *.visa.com *.mastercard.com *.recaptcha.net *.sdiapi.net; + img-src ''self'' *.visa.com data: *.googleapis.com *.gstatic.com masterpass.com + *.masterpass.com *.americanexpress.com *.google-analytics.com *.gravatar.com; + script-src ''self'' ''unsafe-eval'' ''unsafe-inline'' *.cdn-apple.com *.forter.com + *.nr-data.net *.pmnts-sandbox.io *.pmnts-staging.io *.rollbar.com fatzebra.statuspage.io + cdnjs.cloudflare.com *.iovation.com *.jquery.com *.newrelic.com *.googleapis.com + *.cardinalcommerce.com *.bootstrapcdn.com wasm-eval *.google-analytics.com + *.googletagmanager.com *.sdiapi.com *.sdiapi.net *.posthog.com; script-src-attr + ''unsafe-inline''; script-src-elem ''self'' ''unsafe-inline'' *.sdiapi.com + *.cdn-apple.com *.googletagmanager.com *.forter.com *.nr-data.net *.pmnts-sandbox.io + *.rollbar.com fatzebra.statuspage.io *.iovation.com *.jquery.com cdnjs.cloudflare.com + *.pmnts-staging.io *.aexp-static.com *.newrelic.com *.googleapis.com *.americanexpress.com + www.google.com pay.google.com *.visa.com *.masterpass.com *.mastercard.com + *.google-analytics.com *.gstatic.com *.bootstrapcdn.com *.sdiapi.net; style-src + ''self'' ''unsafe-eval'' ''unsafe-inline'' *.bootstrapcdn.com *.googleapis.com; + style-src-attr ''unsafe-inline''; style-src-elem ''unsafe-inline'' ''self'' + *.googleapis.com cdnjs.cloudflare.com *.bootstrapcdn.com *.mastercard.com; + worker-src blob: *.sdiapi.com *.sdiapi.net *.posthog.com; report-uri https://fatzebra.report-uri.com/r/d/csp/wizard' + Nel: + - '{"report_to":"default","max_age":31536000,"include_subdomains":true}' + Report-To: + - '{"group":"default","max_age":31536000,"endpoints":[{"url":"https://fatzebra.report-uri.com/a/d/g"}],"include_subdomains":true}' + body: + encoding: UTF-8 + string: '{"successful":true,"response":{"token":"02gg1kmaafmw92ah3mgo","card_holder":"Matthew + Savage","card_number":"512345XXXXXX2346","card_expiry":"2030-02-28","card_type":"MasterCard","card_category":"Debit","card_subcategory":"PrePaid","card_issuer":"Afriland + First Bank","card_country":"Liberia","authorized":true,"transaction_count":408,"alias":null},"errors":[],"test":true}' + recorded_at: Mon, 19 Jan 2026 12:44:05 GMT +- request: + method: post + uri: https://gateway.sandbox.fatzebra.com.au/sdk/three_d_secure/setup + body: + encoding: UTF-8 + string: '{"card_token":"02gg1kmaafmw92ah3mgo","test":true}' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - application/json + User-Agent: + - Ruby + Authorization: + - Basic VEVTVDpURVNU + Content-Type: + - application/json + response: + status: + code: 401 + message: Unauthorized + headers: + Date: + - Mon, 19 Jan 2026 12:44:05 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 401 Unauthorized + Vary: + - Accept, Origin + X-Request-Id: + - 1fb8a9a3502abf2331f573b1 + X-Runtime: + - '0.015464' + X-Backend: + - ip-10-100-34-142.ap-southeast-2.compute.internal + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: UTF-8 + string: '{"error":"Unauthorized"}' + recorded_at: Mon, 19 Jan 2026 12:44:05 GMT +recorded_with: VCR 6.3.1 diff --git a/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_invalid_input/1_2_1_6.yml b/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_invalid_input/1_2_1_6.yml new file mode 100644 index 0000000..b3d7687 --- /dev/null +++ b/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_invalid_input/1_2_1_6.yml @@ -0,0 +1,135 @@ +--- +http_interactions: +- request: + method: post + uri: https://gateway.sandbox.fatzebra.com.au/v1.0/credit_cards + body: + encoding: UTF-8 + string: '{"card_holder":"Matthew Savage","card_number":"5123456789012346","card_expiry":"02/2030","cvv":123,"test":true}' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - application/json + User-Agent: + - Ruby + Authorization: + - Basic VEVTVDpURVNU + Content-Type: + - application/json + response: + status: + code: 200 + message: OK + headers: + Date: + - Mon, 19 Jan 2026 12:44:05 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 200 OK + Cache-Control: + - no-store + Vary: + - Accept + X-Runtime: + - '0.049430' + Pragma: + - no-cache + X-Request-Id: + - 4cf6c4a32eba7fc973b3364a + X-Backend: + - ip-10-100-34-142.ap-southeast-2.compute.internal + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + Content-Security-Policy-Report-Only: + - 'child-src ''self'' blob: *.cardinalcommerce.com fatzebra.statuspage.io; connect-src + ''self'' *.mastercard.com *.forter.com *.pmnts-staging.io *.rollbar.com *.nr-data.net + *.cardinalcommerce.com fatzebra.statuspage.io *.googleapis.com *.google-analytics.com + *.sdiapi.com *.sdiapi.net *.posthog.com; default-src ''self'' ''unsafe-eval'' + ''unsafe-inline'' *.forter.com *.nr-data.net blob: *.pmnts-sandbox.io *.rollbar.com + fatzebra.statuspage.io *.iovation.com data: *.googleapis.com *.gstatic.com + *.newrelic.com *.bootstrapcdn.com www.google.com pay.google.com *.google-analytics.com + *.gravatar.com; font-src ''self'' cdnjs.cloudflare.com data: *.gstatic.com + *.bootstrapcdn.com *.aexp-static.com; form-action ''self'' *.cardinalcommerce.com; + frame-ancestors ''self'' *.sdiapi.com *.sdiapi.net; frame-src ''self'' *.sdiapi.com + fatzebra.statuspage.io *.americanexpress.com www.google.com pay.google.com + *.masterpass.com *.visa.com *.mastercard.com *.recaptcha.net *.sdiapi.net; + img-src ''self'' *.visa.com data: *.googleapis.com *.gstatic.com masterpass.com + *.masterpass.com *.americanexpress.com *.google-analytics.com *.gravatar.com; + script-src ''self'' ''unsafe-eval'' ''unsafe-inline'' *.cdn-apple.com *.forter.com + *.nr-data.net *.pmnts-sandbox.io *.pmnts-staging.io *.rollbar.com fatzebra.statuspage.io + cdnjs.cloudflare.com *.iovation.com *.jquery.com *.newrelic.com *.googleapis.com + *.cardinalcommerce.com *.bootstrapcdn.com wasm-eval *.google-analytics.com + *.googletagmanager.com *.sdiapi.com *.sdiapi.net *.posthog.com; script-src-attr + ''unsafe-inline''; script-src-elem ''self'' ''unsafe-inline'' *.sdiapi.com + *.cdn-apple.com *.googletagmanager.com *.forter.com *.nr-data.net *.pmnts-sandbox.io + *.rollbar.com fatzebra.statuspage.io *.iovation.com *.jquery.com cdnjs.cloudflare.com + *.pmnts-staging.io *.aexp-static.com *.newrelic.com *.googleapis.com *.americanexpress.com + www.google.com pay.google.com *.visa.com *.masterpass.com *.mastercard.com + *.google-analytics.com *.gstatic.com *.bootstrapcdn.com *.sdiapi.net; style-src + ''self'' ''unsafe-eval'' ''unsafe-inline'' *.bootstrapcdn.com *.googleapis.com; + style-src-attr ''unsafe-inline''; style-src-elem ''unsafe-inline'' ''self'' + *.googleapis.com cdnjs.cloudflare.com *.bootstrapcdn.com *.mastercard.com; + worker-src blob: *.sdiapi.com *.sdiapi.net *.posthog.com; report-uri https://fatzebra.report-uri.com/r/d/csp/wizard' + Nel: + - '{"report_to":"default","max_age":31536000,"include_subdomains":true}' + Report-To: + - '{"group":"default","max_age":31536000,"endpoints":[{"url":"https://fatzebra.report-uri.com/a/d/g"}],"include_subdomains":true}' + body: + encoding: UTF-8 + string: '{"successful":true,"response":{"token":"02gg1kmaafmw92ah3mgo","card_holder":"Matthew + Savage","card_number":"512345XXXXXX2346","card_expiry":"2030-02-28","card_type":"MasterCard","card_category":"Debit","card_subcategory":"PrePaid","card_issuer":"Afriland + First Bank","card_country":"Liberia","authorized":true,"transaction_count":408,"alias":null},"errors":[],"test":true}' + recorded_at: Mon, 19 Jan 2026 12:44:05 GMT +- request: + method: post + uri: https://gateway.sandbox.fatzebra.com.au/sdk/three_d_secure/setup + body: + encoding: UTF-8 + string: '{"card_token":"02gg1kmaafmw92ah3mgo","test":true}' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - application/json + User-Agent: + - Ruby + Authorization: + - Basic VEVTVDpURVNU + Content-Type: + - application/json + response: + status: + code: 401 + message: Unauthorized + headers: + Date: + - Mon, 19 Jan 2026 12:44:05 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 401 Unauthorized + Vary: + - Accept, Origin + X-Request-Id: + - 633bc600395285df2900d5b9 + X-Runtime: + - '0.033669' + X-Backend: + - ip-10-100-34-142.ap-southeast-2.compute.internal + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: UTF-8 + string: '{"error":"Unauthorized"}' + recorded_at: Mon, 19 Jan 2026 12:44:05 GMT +recorded_with: VCR 6.3.1 diff --git a/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_valid_input/1_2_2_1.yml b/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_valid_input/1_2_2_1.yml new file mode 100644 index 0000000..37db87c --- /dev/null +++ b/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_valid_input/1_2_2_1.yml @@ -0,0 +1,135 @@ +--- +http_interactions: +- request: + method: post + uri: https://gateway.sandbox.fatzebra.com.au/v1.0/credit_cards + body: + encoding: UTF-8 + string: '{"card_holder":"Matthew Savage","card_number":"5123456789012346","card_expiry":"02/2030","cvv":123,"test":true}' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - application/json + User-Agent: + - Ruby + Authorization: + - Basic VEVTVDpURVNU + Content-Type: + - application/json + response: + status: + code: 200 + message: OK + headers: + Date: + - Mon, 19 Jan 2026 12:44:06 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 200 OK + Cache-Control: + - no-store + Vary: + - Accept + Pragma: + - no-cache + X-Request-Id: + - 2ff2746014a5a79b7924262b + X-Runtime: + - '0.075172' + X-Backend: + - ip-10-100-34-142.ap-southeast-2.compute.internal + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + Content-Security-Policy-Report-Only: + - 'child-src ''self'' blob: *.cardinalcommerce.com fatzebra.statuspage.io; connect-src + ''self'' *.mastercard.com *.forter.com *.pmnts-staging.io *.rollbar.com *.nr-data.net + *.cardinalcommerce.com fatzebra.statuspage.io *.googleapis.com *.google-analytics.com + *.sdiapi.com *.sdiapi.net *.posthog.com; default-src ''self'' ''unsafe-eval'' + ''unsafe-inline'' *.forter.com *.nr-data.net blob: *.pmnts-sandbox.io *.rollbar.com + fatzebra.statuspage.io *.iovation.com data: *.googleapis.com *.gstatic.com + *.newrelic.com *.bootstrapcdn.com www.google.com pay.google.com *.google-analytics.com + *.gravatar.com; font-src ''self'' cdnjs.cloudflare.com data: *.gstatic.com + *.bootstrapcdn.com *.aexp-static.com; form-action ''self'' *.cardinalcommerce.com; + frame-ancestors ''self'' *.sdiapi.com *.sdiapi.net; frame-src ''self'' *.sdiapi.com + fatzebra.statuspage.io *.americanexpress.com www.google.com pay.google.com + *.masterpass.com *.visa.com *.mastercard.com *.recaptcha.net *.sdiapi.net; + img-src ''self'' *.visa.com data: *.googleapis.com *.gstatic.com masterpass.com + *.masterpass.com *.americanexpress.com *.google-analytics.com *.gravatar.com; + script-src ''self'' ''unsafe-eval'' ''unsafe-inline'' *.cdn-apple.com *.forter.com + *.nr-data.net *.pmnts-sandbox.io *.pmnts-staging.io *.rollbar.com fatzebra.statuspage.io + cdnjs.cloudflare.com *.iovation.com *.jquery.com *.newrelic.com *.googleapis.com + *.cardinalcommerce.com *.bootstrapcdn.com wasm-eval *.google-analytics.com + *.googletagmanager.com *.sdiapi.com *.sdiapi.net *.posthog.com; script-src-attr + ''unsafe-inline''; script-src-elem ''self'' ''unsafe-inline'' *.sdiapi.com + *.cdn-apple.com *.googletagmanager.com *.forter.com *.nr-data.net *.pmnts-sandbox.io + *.rollbar.com fatzebra.statuspage.io *.iovation.com *.jquery.com cdnjs.cloudflare.com + *.pmnts-staging.io *.aexp-static.com *.newrelic.com *.googleapis.com *.americanexpress.com + www.google.com pay.google.com *.visa.com *.masterpass.com *.mastercard.com + *.google-analytics.com *.gstatic.com *.bootstrapcdn.com *.sdiapi.net; style-src + ''self'' ''unsafe-eval'' ''unsafe-inline'' *.bootstrapcdn.com *.googleapis.com; + style-src-attr ''unsafe-inline''; style-src-elem ''unsafe-inline'' ''self'' + *.googleapis.com cdnjs.cloudflare.com *.bootstrapcdn.com *.mastercard.com; + worker-src blob: *.sdiapi.com *.sdiapi.net *.posthog.com; report-uri https://fatzebra.report-uri.com/r/d/csp/wizard' + Nel: + - '{"report_to":"default","max_age":31536000,"include_subdomains":true}' + Report-To: + - '{"group":"default","max_age":31536000,"endpoints":[{"url":"https://fatzebra.report-uri.com/a/d/g"}],"include_subdomains":true}' + body: + encoding: UTF-8 + string: '{"successful":true,"response":{"token":"02gg1kmaafmw92ah3mgo","card_holder":"Matthew + Savage","card_number":"512345XXXXXX2346","card_expiry":"2030-02-28","card_type":"MasterCard","card_category":"Debit","card_subcategory":"PrePaid","card_issuer":"Afriland + First Bank","card_country":"Liberia","authorized":true,"transaction_count":408,"alias":null},"errors":[],"test":true}' + recorded_at: Mon, 19 Jan 2026 12:44:05 GMT +- request: + method: post + uri: https://gateway.sandbox.fatzebra.com.au/sdk/three_d_secure/setup + body: + encoding: UTF-8 + string: '{"card_token":"02gg1kmaafmw92ah3mgo","test":true}' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - application/json + User-Agent: + - Ruby + Authorization: + - Basic VEVTVDpURVNU + Content-Type: + - application/json + response: + status: + code: 401 + message: Unauthorized + headers: + Date: + - Mon, 19 Jan 2026 12:44:06 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 401 Unauthorized + Vary: + - Accept, Origin + X-Request-Id: + - 1b8b0b526eb8402f110b7203 + X-Runtime: + - '0.050763' + X-Backend: + - ip-10-100-34-142.ap-southeast-2.compute.internal + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: UTF-8 + string: '{"error":"Unauthorized"}' + recorded_at: Mon, 19 Jan 2026 12:44:06 GMT +recorded_with: VCR 6.3.1 diff --git a/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_valid_input/1_2_2_3.yml b/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_valid_input/1_2_2_3.yml new file mode 100644 index 0000000..948fb90 --- /dev/null +++ b/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_valid_input/1_2_2_3.yml @@ -0,0 +1,135 @@ +--- +http_interactions: +- request: + method: post + uri: https://gateway.sandbox.fatzebra.com.au/v1.0/credit_cards + body: + encoding: UTF-8 + string: '{"card_holder":"Matthew Savage","card_number":"5123456789012346","card_expiry":"02/2030","cvv":123,"test":true}' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - application/json + User-Agent: + - Ruby + Authorization: + - Basic VEVTVDpURVNU + Content-Type: + - application/json + response: + status: + code: 200 + message: OK + headers: + Date: + - Mon, 19 Jan 2026 12:44:06 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 200 OK + Cache-Control: + - no-store + Vary: + - Accept + Pragma: + - no-cache + X-Request-Id: + - 0aee494732c7ac757d81e8aa + X-Runtime: + - '0.049828' + X-Backend: + - ip-10-100-34-142.ap-southeast-2.compute.internal + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + Content-Security-Policy-Report-Only: + - 'child-src ''self'' blob: *.cardinalcommerce.com fatzebra.statuspage.io; connect-src + ''self'' *.mastercard.com *.forter.com *.pmnts-staging.io *.rollbar.com *.nr-data.net + *.cardinalcommerce.com fatzebra.statuspage.io *.googleapis.com *.google-analytics.com + *.sdiapi.com *.sdiapi.net *.posthog.com; default-src ''self'' ''unsafe-eval'' + ''unsafe-inline'' *.forter.com *.nr-data.net blob: *.pmnts-sandbox.io *.rollbar.com + fatzebra.statuspage.io *.iovation.com data: *.googleapis.com *.gstatic.com + *.newrelic.com *.bootstrapcdn.com www.google.com pay.google.com *.google-analytics.com + *.gravatar.com; font-src ''self'' cdnjs.cloudflare.com data: *.gstatic.com + *.bootstrapcdn.com *.aexp-static.com; form-action ''self'' *.cardinalcommerce.com; + frame-ancestors ''self'' *.sdiapi.com *.sdiapi.net; frame-src ''self'' *.sdiapi.com + fatzebra.statuspage.io *.americanexpress.com www.google.com pay.google.com + *.masterpass.com *.visa.com *.mastercard.com *.recaptcha.net *.sdiapi.net; + img-src ''self'' *.visa.com data: *.googleapis.com *.gstatic.com masterpass.com + *.masterpass.com *.americanexpress.com *.google-analytics.com *.gravatar.com; + script-src ''self'' ''unsafe-eval'' ''unsafe-inline'' *.cdn-apple.com *.forter.com + *.nr-data.net *.pmnts-sandbox.io *.pmnts-staging.io *.rollbar.com fatzebra.statuspage.io + cdnjs.cloudflare.com *.iovation.com *.jquery.com *.newrelic.com *.googleapis.com + *.cardinalcommerce.com *.bootstrapcdn.com wasm-eval *.google-analytics.com + *.googletagmanager.com *.sdiapi.com *.sdiapi.net *.posthog.com; script-src-attr + ''unsafe-inline''; script-src-elem ''self'' ''unsafe-inline'' *.sdiapi.com + *.cdn-apple.com *.googletagmanager.com *.forter.com *.nr-data.net *.pmnts-sandbox.io + *.rollbar.com fatzebra.statuspage.io *.iovation.com *.jquery.com cdnjs.cloudflare.com + *.pmnts-staging.io *.aexp-static.com *.newrelic.com *.googleapis.com *.americanexpress.com + www.google.com pay.google.com *.visa.com *.masterpass.com *.mastercard.com + *.google-analytics.com *.gstatic.com *.bootstrapcdn.com *.sdiapi.net; style-src + ''self'' ''unsafe-eval'' ''unsafe-inline'' *.bootstrapcdn.com *.googleapis.com; + style-src-attr ''unsafe-inline''; style-src-elem ''unsafe-inline'' ''self'' + *.googleapis.com cdnjs.cloudflare.com *.bootstrapcdn.com *.mastercard.com; + worker-src blob: *.sdiapi.com *.sdiapi.net *.posthog.com; report-uri https://fatzebra.report-uri.com/r/d/csp/wizard' + Nel: + - '{"report_to":"default","max_age":31536000,"include_subdomains":true}' + Report-To: + - '{"group":"default","max_age":31536000,"endpoints":[{"url":"https://fatzebra.report-uri.com/a/d/g"}],"include_subdomains":true}' + body: + encoding: UTF-8 + string: '{"successful":true,"response":{"token":"02gg1kmaafmw92ah3mgo","card_holder":"Matthew + Savage","card_number":"512345XXXXXX2346","card_expiry":"2030-02-28","card_type":"MasterCard","card_category":"Debit","card_subcategory":"PrePaid","card_issuer":"Afriland + First Bank","card_country":"Liberia","authorized":true,"transaction_count":408,"alias":null},"errors":[],"test":true}' + recorded_at: Mon, 19 Jan 2026 12:44:06 GMT +- request: + method: post + uri: https://gateway.sandbox.fatzebra.com.au/sdk/three_d_secure/setup + body: + encoding: UTF-8 + string: '{"card_token":"02gg1kmaafmw92ah3mgo","test":true}' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - application/json + User-Agent: + - Ruby + Authorization: + - Basic VEVTVDpURVNU + Content-Type: + - application/json + response: + status: + code: 401 + message: Unauthorized + headers: + Date: + - Mon, 19 Jan 2026 12:44:06 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 401 Unauthorized + Vary: + - Accept, Origin + X-Request-Id: + - 1558228a478132fc2007277f + X-Runtime: + - '0.033322' + X-Backend: + - ip-10-100-34-142.ap-southeast-2.compute.internal + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: UTF-8 + string: '{"error":"Unauthorized"}' + recorded_at: Mon, 19 Jan 2026 12:44:06 GMT +recorded_with: VCR 6.3.1 diff --git a/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_valid_input/returns_expected_keys.yml b/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_valid_input/returns_expected_keys.yml new file mode 100644 index 0000000..18d6ece --- /dev/null +++ b/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_valid_input/returns_expected_keys.yml @@ -0,0 +1,135 @@ +--- +http_interactions: +- request: + method: post + uri: https://gateway.sandbox.fatzebra.com.au/v1.0/credit_cards + body: + encoding: UTF-8 + string: '{"card_holder":"Matthew Savage","card_number":"5123456789012346","card_expiry":"02/2030","cvv":123,"test":true}' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - application/json + User-Agent: + - Ruby + Authorization: + - Basic VEVTVDpURVNU + Content-Type: + - application/json + response: + status: + code: 200 + message: OK + headers: + Date: + - Mon, 19 Jan 2026 12:44:06 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 200 OK + Cache-Control: + - no-store + Vary: + - Accept + Pragma: + - no-cache + X-Request-Id: + - 528958e730b975005d0f5d9a + X-Runtime: + - '0.127738' + X-Backend: + - ip-10-100-34-142.ap-southeast-2.compute.internal + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + Content-Security-Policy-Report-Only: + - 'child-src ''self'' blob: *.cardinalcommerce.com fatzebra.statuspage.io; connect-src + ''self'' *.mastercard.com *.forter.com *.pmnts-staging.io *.rollbar.com *.nr-data.net + *.cardinalcommerce.com fatzebra.statuspage.io *.googleapis.com *.google-analytics.com + *.sdiapi.com *.sdiapi.net *.posthog.com; default-src ''self'' ''unsafe-eval'' + ''unsafe-inline'' *.forter.com *.nr-data.net blob: *.pmnts-sandbox.io *.rollbar.com + fatzebra.statuspage.io *.iovation.com data: *.googleapis.com *.gstatic.com + *.newrelic.com *.bootstrapcdn.com www.google.com pay.google.com *.google-analytics.com + *.gravatar.com; font-src ''self'' cdnjs.cloudflare.com data: *.gstatic.com + *.bootstrapcdn.com *.aexp-static.com; form-action ''self'' *.cardinalcommerce.com; + frame-ancestors ''self'' *.sdiapi.com *.sdiapi.net; frame-src ''self'' *.sdiapi.com + fatzebra.statuspage.io *.americanexpress.com www.google.com pay.google.com + *.masterpass.com *.visa.com *.mastercard.com *.recaptcha.net *.sdiapi.net; + img-src ''self'' *.visa.com data: *.googleapis.com *.gstatic.com masterpass.com + *.masterpass.com *.americanexpress.com *.google-analytics.com *.gravatar.com; + script-src ''self'' ''unsafe-eval'' ''unsafe-inline'' *.cdn-apple.com *.forter.com + *.nr-data.net *.pmnts-sandbox.io *.pmnts-staging.io *.rollbar.com fatzebra.statuspage.io + cdnjs.cloudflare.com *.iovation.com *.jquery.com *.newrelic.com *.googleapis.com + *.cardinalcommerce.com *.bootstrapcdn.com wasm-eval *.google-analytics.com + *.googletagmanager.com *.sdiapi.com *.sdiapi.net *.posthog.com; script-src-attr + ''unsafe-inline''; script-src-elem ''self'' ''unsafe-inline'' *.sdiapi.com + *.cdn-apple.com *.googletagmanager.com *.forter.com *.nr-data.net *.pmnts-sandbox.io + *.rollbar.com fatzebra.statuspage.io *.iovation.com *.jquery.com cdnjs.cloudflare.com + *.pmnts-staging.io *.aexp-static.com *.newrelic.com *.googleapis.com *.americanexpress.com + www.google.com pay.google.com *.visa.com *.masterpass.com *.mastercard.com + *.google-analytics.com *.gstatic.com *.bootstrapcdn.com *.sdiapi.net; style-src + ''self'' ''unsafe-eval'' ''unsafe-inline'' *.bootstrapcdn.com *.googleapis.com; + style-src-attr ''unsafe-inline''; style-src-elem ''unsafe-inline'' ''self'' + *.googleapis.com cdnjs.cloudflare.com *.bootstrapcdn.com *.mastercard.com; + worker-src blob: *.sdiapi.com *.sdiapi.net *.posthog.com; report-uri https://fatzebra.report-uri.com/r/d/csp/wizard' + Nel: + - '{"report_to":"default","max_age":31536000,"include_subdomains":true}' + Report-To: + - '{"group":"default","max_age":31536000,"endpoints":[{"url":"https://fatzebra.report-uri.com/a/d/g"}],"include_subdomains":true}' + body: + encoding: UTF-8 + string: '{"successful":true,"response":{"token":"02gg1kmaafmw92ah3mgo","card_holder":"Matthew + Savage","card_number":"512345XXXXXX2346","card_expiry":"2030-02-28","card_type":"MasterCard","card_category":"Debit","card_subcategory":"PrePaid","card_issuer":"Afriland + First Bank","card_country":"Liberia","authorized":true,"transaction_count":408,"alias":null},"errors":[],"test":true}' + recorded_at: Mon, 19 Jan 2026 12:44:06 GMT +- request: + method: post + uri: https://gateway.sandbox.fatzebra.com.au/sdk/three_d_secure/setup + body: + encoding: UTF-8 + string: '{"card_token":"02gg1kmaafmw92ah3mgo","test":true}' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - application/json + User-Agent: + - Ruby + Authorization: + - Basic VEVTVDpURVNU + Content-Type: + - application/json + response: + status: + code: 401 + message: Unauthorized + headers: + Date: + - Mon, 19 Jan 2026 12:44:06 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 401 Unauthorized + Vary: + - Accept, Origin + X-Runtime: + - '0.017668' + X-Request-Id: + - 41d7d91c47b4460f49619f10 + X-Backend: + - ip-10-100-34-142.ap-southeast-2.compute.internal + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: UTF-8 + string: '{"error":"Unauthorized"}' + recorded_at: Mon, 19 Jan 2026 12:44:06 GMT +recorded_with: VCR 6.3.1 diff --git a/spec/cassettes/FatZebra_ThreeDSecure/_setup/with_invalid_input/1_1_1_1.yml b/spec/cassettes/FatZebra_ThreeDSecure/_setup/with_invalid_input/1_1_1_1.yml new file mode 100644 index 0000000..4a643ef --- /dev/null +++ b/spec/cassettes/FatZebra_ThreeDSecure/_setup/with_invalid_input/1_1_1_1.yml @@ -0,0 +1,135 @@ +--- +http_interactions: +- request: + method: post + uri: https://gateway.sandbox.fatzebra.com.au/v1.0/credit_cards + body: + encoding: UTF-8 + string: '{"card_holder":"Matthew Savage","card_number":"5123456789012346","card_expiry":"02/2030","cvv":123,"test":true}' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - application/json + User-Agent: + - Ruby + Authorization: + - Basic VEVTVDpURVNU + Content-Type: + - application/json + response: + status: + code: 200 + message: OK + headers: + Date: + - Mon, 19 Jan 2026 12:44:03 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 200 OK + Cache-Control: + - no-store + Vary: + - Accept + Pragma: + - no-cache + X-Request-Id: + - 4c1e9a13210b42c547c15cde + X-Runtime: + - '0.056345' + X-Backend: + - ip-10-100-34-142.ap-southeast-2.compute.internal + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + Content-Security-Policy-Report-Only: + - 'child-src ''self'' blob: *.cardinalcommerce.com fatzebra.statuspage.io; connect-src + ''self'' *.mastercard.com *.forter.com *.pmnts-staging.io *.rollbar.com *.nr-data.net + *.cardinalcommerce.com fatzebra.statuspage.io *.googleapis.com *.google-analytics.com + *.sdiapi.com *.sdiapi.net *.posthog.com; default-src ''self'' ''unsafe-eval'' + ''unsafe-inline'' *.forter.com *.nr-data.net blob: *.pmnts-sandbox.io *.rollbar.com + fatzebra.statuspage.io *.iovation.com data: *.googleapis.com *.gstatic.com + *.newrelic.com *.bootstrapcdn.com www.google.com pay.google.com *.google-analytics.com + *.gravatar.com; font-src ''self'' cdnjs.cloudflare.com data: *.gstatic.com + *.bootstrapcdn.com *.aexp-static.com; form-action ''self'' *.cardinalcommerce.com; + frame-ancestors ''self'' *.sdiapi.com *.sdiapi.net; frame-src ''self'' *.sdiapi.com + fatzebra.statuspage.io *.americanexpress.com www.google.com pay.google.com + *.masterpass.com *.visa.com *.mastercard.com *.recaptcha.net *.sdiapi.net; + img-src ''self'' *.visa.com data: *.googleapis.com *.gstatic.com masterpass.com + *.masterpass.com *.americanexpress.com *.google-analytics.com *.gravatar.com; + script-src ''self'' ''unsafe-eval'' ''unsafe-inline'' *.cdn-apple.com *.forter.com + *.nr-data.net *.pmnts-sandbox.io *.pmnts-staging.io *.rollbar.com fatzebra.statuspage.io + cdnjs.cloudflare.com *.iovation.com *.jquery.com *.newrelic.com *.googleapis.com + *.cardinalcommerce.com *.bootstrapcdn.com wasm-eval *.google-analytics.com + *.googletagmanager.com *.sdiapi.com *.sdiapi.net *.posthog.com; script-src-attr + ''unsafe-inline''; script-src-elem ''self'' ''unsafe-inline'' *.sdiapi.com + *.cdn-apple.com *.googletagmanager.com *.forter.com *.nr-data.net *.pmnts-sandbox.io + *.rollbar.com fatzebra.statuspage.io *.iovation.com *.jquery.com cdnjs.cloudflare.com + *.pmnts-staging.io *.aexp-static.com *.newrelic.com *.googleapis.com *.americanexpress.com + www.google.com pay.google.com *.visa.com *.masterpass.com *.mastercard.com + *.google-analytics.com *.gstatic.com *.bootstrapcdn.com *.sdiapi.net; style-src + ''self'' ''unsafe-eval'' ''unsafe-inline'' *.bootstrapcdn.com *.googleapis.com; + style-src-attr ''unsafe-inline''; style-src-elem ''unsafe-inline'' ''self'' + *.googleapis.com cdnjs.cloudflare.com *.bootstrapcdn.com *.mastercard.com; + worker-src blob: *.sdiapi.com *.sdiapi.net *.posthog.com; report-uri https://fatzebra.report-uri.com/r/d/csp/wizard' + Nel: + - '{"report_to":"default","max_age":31536000,"include_subdomains":true}' + Report-To: + - '{"group":"default","max_age":31536000,"endpoints":[{"url":"https://fatzebra.report-uri.com/a/d/g"}],"include_subdomains":true}' + body: + encoding: UTF-8 + string: '{"successful":true,"response":{"token":"02gg1kmaafmw92ah3mgo","card_holder":"Matthew + Savage","card_number":"512345XXXXXX2346","card_expiry":"2030-02-28","card_type":"MasterCard","card_category":"Debit","card_subcategory":"PrePaid","card_issuer":"Afriland + First Bank","card_country":"Liberia","authorized":true,"transaction_count":408,"alias":null},"errors":[],"test":true}' + recorded_at: Mon, 19 Jan 2026 12:44:03 GMT +- request: + method: post + uri: https://gateway.sandbox.fatzebra.com.au/sdk/three_d_secure/setup + body: + encoding: UTF-8 + string: '{"card_token":"INVALID","test":true}' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - application/json + User-Agent: + - Ruby + Authorization: + - Basic VEVTVDpURVNU + Content-Type: + - application/json + response: + status: + code: 401 + message: Unauthorized + headers: + Date: + - Mon, 19 Jan 2026 12:44:03 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 401 Unauthorized + Vary: + - Accept, Origin + X-Request-Id: + - 1bf2a23a47230c6b545d5e95 + X-Runtime: + - '0.022954' + X-Backend: + - ip-10-100-34-142.ap-southeast-2.compute.internal + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: UTF-8 + string: '{"error":"Unauthorized"}' + recorded_at: Mon, 19 Jan 2026 12:44:03 GMT +recorded_with: VCR 6.3.1 diff --git a/spec/cassettes/FatZebra_ThreeDSecure/_setup/with_invalid_input/1_1_1_2.yml b/spec/cassettes/FatZebra_ThreeDSecure/_setup/with_invalid_input/1_1_1_2.yml new file mode 100644 index 0000000..1da66fd --- /dev/null +++ b/spec/cassettes/FatZebra_ThreeDSecure/_setup/with_invalid_input/1_1_1_2.yml @@ -0,0 +1,135 @@ +--- +http_interactions: +- request: + method: post + uri: https://gateway.sandbox.fatzebra.com.au/v1.0/credit_cards + body: + encoding: UTF-8 + string: '{"card_holder":"Matthew Savage","card_number":"5123456789012346","card_expiry":"02/2030","cvv":123,"test":true}' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - application/json + User-Agent: + - Ruby + Authorization: + - Basic VEVTVDpURVNU + Content-Type: + - application/json + response: + status: + code: 200 + message: OK + headers: + Date: + - Mon, 19 Jan 2026 12:44:03 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 200 OK + Cache-Control: + - no-store + Vary: + - Accept + Pragma: + - no-cache + X-Request-Id: + - 1242b3d3219b3b831acf7762 + X-Runtime: + - '0.048763' + X-Backend: + - ip-10-100-34-142.ap-southeast-2.compute.internal + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + Content-Security-Policy-Report-Only: + - 'child-src ''self'' blob: *.cardinalcommerce.com fatzebra.statuspage.io; connect-src + ''self'' *.mastercard.com *.forter.com *.pmnts-staging.io *.rollbar.com *.nr-data.net + *.cardinalcommerce.com fatzebra.statuspage.io *.googleapis.com *.google-analytics.com + *.sdiapi.com *.sdiapi.net *.posthog.com; default-src ''self'' ''unsafe-eval'' + ''unsafe-inline'' *.forter.com *.nr-data.net blob: *.pmnts-sandbox.io *.rollbar.com + fatzebra.statuspage.io *.iovation.com data: *.googleapis.com *.gstatic.com + *.newrelic.com *.bootstrapcdn.com www.google.com pay.google.com *.google-analytics.com + *.gravatar.com; font-src ''self'' cdnjs.cloudflare.com data: *.gstatic.com + *.bootstrapcdn.com *.aexp-static.com; form-action ''self'' *.cardinalcommerce.com; + frame-ancestors ''self'' *.sdiapi.com *.sdiapi.net; frame-src ''self'' *.sdiapi.com + fatzebra.statuspage.io *.americanexpress.com www.google.com pay.google.com + *.masterpass.com *.visa.com *.mastercard.com *.recaptcha.net *.sdiapi.net; + img-src ''self'' *.visa.com data: *.googleapis.com *.gstatic.com masterpass.com + *.masterpass.com *.americanexpress.com *.google-analytics.com *.gravatar.com; + script-src ''self'' ''unsafe-eval'' ''unsafe-inline'' *.cdn-apple.com *.forter.com + *.nr-data.net *.pmnts-sandbox.io *.pmnts-staging.io *.rollbar.com fatzebra.statuspage.io + cdnjs.cloudflare.com *.iovation.com *.jquery.com *.newrelic.com *.googleapis.com + *.cardinalcommerce.com *.bootstrapcdn.com wasm-eval *.google-analytics.com + *.googletagmanager.com *.sdiapi.com *.sdiapi.net *.posthog.com; script-src-attr + ''unsafe-inline''; script-src-elem ''self'' ''unsafe-inline'' *.sdiapi.com + *.cdn-apple.com *.googletagmanager.com *.forter.com *.nr-data.net *.pmnts-sandbox.io + *.rollbar.com fatzebra.statuspage.io *.iovation.com *.jquery.com cdnjs.cloudflare.com + *.pmnts-staging.io *.aexp-static.com *.newrelic.com *.googleapis.com *.americanexpress.com + www.google.com pay.google.com *.visa.com *.masterpass.com *.mastercard.com + *.google-analytics.com *.gstatic.com *.bootstrapcdn.com *.sdiapi.net; style-src + ''self'' ''unsafe-eval'' ''unsafe-inline'' *.bootstrapcdn.com *.googleapis.com; + style-src-attr ''unsafe-inline''; style-src-elem ''unsafe-inline'' ''self'' + *.googleapis.com cdnjs.cloudflare.com *.bootstrapcdn.com *.mastercard.com; + worker-src blob: *.sdiapi.com *.sdiapi.net *.posthog.com; report-uri https://fatzebra.report-uri.com/r/d/csp/wizard' + Nel: + - '{"report_to":"default","max_age":31536000,"include_subdomains":true}' + Report-To: + - '{"group":"default","max_age":31536000,"endpoints":[{"url":"https://fatzebra.report-uri.com/a/d/g"}],"include_subdomains":true}' + body: + encoding: UTF-8 + string: '{"successful":true,"response":{"token":"02gg1kmaafmw92ah3mgo","card_holder":"Matthew + Savage","card_number":"512345XXXXXX2346","card_expiry":"2030-02-28","card_type":"MasterCard","card_category":"Debit","card_subcategory":"PrePaid","card_issuer":"Afriland + First Bank","card_country":"Liberia","authorized":true,"transaction_count":408,"alias":null},"errors":[],"test":true}' + recorded_at: Mon, 19 Jan 2026 12:44:03 GMT +- request: + method: post + uri: https://gateway.sandbox.fatzebra.com.au/sdk/three_d_secure/setup + body: + encoding: UTF-8 + string: '{"test":true}' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - application/json + User-Agent: + - Ruby + Authorization: + - Basic VEVTVDpURVNU + Content-Type: + - application/json + response: + status: + code: 401 + message: Unauthorized + headers: + Date: + - Mon, 19 Jan 2026 12:44:03 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 401 Unauthorized + Vary: + - Accept, Origin + X-Request-Id: + - 34e6196e5c85834f7dca11e2 + X-Runtime: + - '0.017276' + X-Backend: + - ip-10-100-34-142.ap-southeast-2.compute.internal + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: UTF-8 + string: '{"error":"Unauthorized"}' + recorded_at: Mon, 19 Jan 2026 12:44:03 GMT +recorded_with: VCR 6.3.1 diff --git a/spec/cassettes/FatZebra_ThreeDSecure/_setup/with_valid_input/1_1_2_1.yml b/spec/cassettes/FatZebra_ThreeDSecure/_setup/with_valid_input/1_1_2_1.yml new file mode 100644 index 0000000..175dd14 --- /dev/null +++ b/spec/cassettes/FatZebra_ThreeDSecure/_setup/with_valid_input/1_1_2_1.yml @@ -0,0 +1,135 @@ +--- +http_interactions: +- request: + method: post + uri: https://gateway.sandbox.fatzebra.com.au/v1.0/credit_cards + body: + encoding: UTF-8 + string: '{"card_holder":"Matthew Savage","card_number":"5123456789012346","card_expiry":"02/2030","cvv":123,"test":true}' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - application/json + User-Agent: + - Ruby + Authorization: + - Basic VEVTVDpURVNU + Content-Type: + - application/json + response: + status: + code: 200 + message: OK + headers: + Date: + - Mon, 19 Jan 2026 12:44:03 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 200 OK + Cache-Control: + - no-store + Vary: + - Accept + Pragma: + - no-cache + X-Request-Id: + - 674e324e7fdbc2823ccbba46 + X-Runtime: + - '0.062175' + X-Backend: + - ip-10-100-34-142.ap-southeast-2.compute.internal + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + Content-Security-Policy-Report-Only: + - 'child-src ''self'' blob: *.cardinalcommerce.com fatzebra.statuspage.io; connect-src + ''self'' *.mastercard.com *.forter.com *.pmnts-staging.io *.rollbar.com *.nr-data.net + *.cardinalcommerce.com fatzebra.statuspage.io *.googleapis.com *.google-analytics.com + *.sdiapi.com *.sdiapi.net *.posthog.com; default-src ''self'' ''unsafe-eval'' + ''unsafe-inline'' *.forter.com *.nr-data.net blob: *.pmnts-sandbox.io *.rollbar.com + fatzebra.statuspage.io *.iovation.com data: *.googleapis.com *.gstatic.com + *.newrelic.com *.bootstrapcdn.com www.google.com pay.google.com *.google-analytics.com + *.gravatar.com; font-src ''self'' cdnjs.cloudflare.com data: *.gstatic.com + *.bootstrapcdn.com *.aexp-static.com; form-action ''self'' *.cardinalcommerce.com; + frame-ancestors ''self'' *.sdiapi.com *.sdiapi.net; frame-src ''self'' *.sdiapi.com + fatzebra.statuspage.io *.americanexpress.com www.google.com pay.google.com + *.masterpass.com *.visa.com *.mastercard.com *.recaptcha.net *.sdiapi.net; + img-src ''self'' *.visa.com data: *.googleapis.com *.gstatic.com masterpass.com + *.masterpass.com *.americanexpress.com *.google-analytics.com *.gravatar.com; + script-src ''self'' ''unsafe-eval'' ''unsafe-inline'' *.cdn-apple.com *.forter.com + *.nr-data.net *.pmnts-sandbox.io *.pmnts-staging.io *.rollbar.com fatzebra.statuspage.io + cdnjs.cloudflare.com *.iovation.com *.jquery.com *.newrelic.com *.googleapis.com + *.cardinalcommerce.com *.bootstrapcdn.com wasm-eval *.google-analytics.com + *.googletagmanager.com *.sdiapi.com *.sdiapi.net *.posthog.com; script-src-attr + ''unsafe-inline''; script-src-elem ''self'' ''unsafe-inline'' *.sdiapi.com + *.cdn-apple.com *.googletagmanager.com *.forter.com *.nr-data.net *.pmnts-sandbox.io + *.rollbar.com fatzebra.statuspage.io *.iovation.com *.jquery.com cdnjs.cloudflare.com + *.pmnts-staging.io *.aexp-static.com *.newrelic.com *.googleapis.com *.americanexpress.com + www.google.com pay.google.com *.visa.com *.masterpass.com *.mastercard.com + *.google-analytics.com *.gstatic.com *.bootstrapcdn.com *.sdiapi.net; style-src + ''self'' ''unsafe-eval'' ''unsafe-inline'' *.bootstrapcdn.com *.googleapis.com; + style-src-attr ''unsafe-inline''; style-src-elem ''unsafe-inline'' ''self'' + *.googleapis.com cdnjs.cloudflare.com *.bootstrapcdn.com *.mastercard.com; + worker-src blob: *.sdiapi.com *.sdiapi.net *.posthog.com; report-uri https://fatzebra.report-uri.com/r/d/csp/wizard' + Nel: + - '{"report_to":"default","max_age":31536000,"include_subdomains":true}' + Report-To: + - '{"group":"default","max_age":31536000,"endpoints":[{"url":"https://fatzebra.report-uri.com/a/d/g"}],"include_subdomains":true}' + body: + encoding: UTF-8 + string: '{"successful":true,"response":{"token":"02gg1kmaafmw92ah3mgo","card_holder":"Matthew + Savage","card_number":"512345XXXXXX2346","card_expiry":"2030-02-28","card_type":"MasterCard","card_category":"Debit","card_subcategory":"PrePaid","card_issuer":"Afriland + First Bank","card_country":"Liberia","authorized":true,"transaction_count":408,"alias":null},"errors":[],"test":true}' + recorded_at: Mon, 19 Jan 2026 12:44:03 GMT +- request: + method: post + uri: https://gateway.sandbox.fatzebra.com.au/sdk/three_d_secure/setup + body: + encoding: UTF-8 + string: '{"card_token":"02gg1kmaafmw92ah3mgo","test":true}' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - application/json + User-Agent: + - Ruby + Authorization: + - Basic VEVTVDpURVNU + Content-Type: + - application/json + response: + status: + code: 401 + message: Unauthorized + headers: + Date: + - Mon, 19 Jan 2026 12:44:04 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 401 Unauthorized + Vary: + - Accept, Origin + X-Request-Id: + - 105cf6245a297d1710977c99 + X-Runtime: + - '0.027701' + X-Backend: + - ip-10-100-34-142.ap-southeast-2.compute.internal + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: UTF-8 + string: '{"error":"Unauthorized"}' + recorded_at: Mon, 19 Jan 2026 12:44:04 GMT +recorded_with: VCR 6.3.1 diff --git a/spec/cassettes/FatZebra_ThreeDSecure/_setup/with_valid_input/returns_expected_keys.yml b/spec/cassettes/FatZebra_ThreeDSecure/_setup/with_valid_input/returns_expected_keys.yml new file mode 100644 index 0000000..5339742 --- /dev/null +++ b/spec/cassettes/FatZebra_ThreeDSecure/_setup/with_valid_input/returns_expected_keys.yml @@ -0,0 +1,135 @@ +--- +http_interactions: +- request: + method: post + uri: https://gateway.sandbox.fatzebra.com.au/v1.0/credit_cards + body: + encoding: UTF-8 + string: '{"card_holder":"Matthew Savage","card_number":"5123456789012346","card_expiry":"02/2030","cvv":123,"test":true}' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - application/json + User-Agent: + - Ruby + Authorization: + - Basic VEVTVDpURVNU + Content-Type: + - application/json + response: + status: + code: 200 + message: OK + headers: + Date: + - Mon, 19 Jan 2026 12:44:04 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 200 OK + Cache-Control: + - no-store + Vary: + - Accept + Pragma: + - no-cache + X-Request-Id: + - 7453a2c8458e0b796e055fdf + X-Runtime: + - '0.101311' + X-Backend: + - ip-10-100-34-142.ap-southeast-2.compute.internal + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + Content-Security-Policy-Report-Only: + - 'child-src ''self'' blob: *.cardinalcommerce.com fatzebra.statuspage.io; connect-src + ''self'' *.mastercard.com *.forter.com *.pmnts-staging.io *.rollbar.com *.nr-data.net + *.cardinalcommerce.com fatzebra.statuspage.io *.googleapis.com *.google-analytics.com + *.sdiapi.com *.sdiapi.net *.posthog.com; default-src ''self'' ''unsafe-eval'' + ''unsafe-inline'' *.forter.com *.nr-data.net blob: *.pmnts-sandbox.io *.rollbar.com + fatzebra.statuspage.io *.iovation.com data: *.googleapis.com *.gstatic.com + *.newrelic.com *.bootstrapcdn.com www.google.com pay.google.com *.google-analytics.com + *.gravatar.com; font-src ''self'' cdnjs.cloudflare.com data: *.gstatic.com + *.bootstrapcdn.com *.aexp-static.com; form-action ''self'' *.cardinalcommerce.com; + frame-ancestors ''self'' *.sdiapi.com *.sdiapi.net; frame-src ''self'' *.sdiapi.com + fatzebra.statuspage.io *.americanexpress.com www.google.com pay.google.com + *.masterpass.com *.visa.com *.mastercard.com *.recaptcha.net *.sdiapi.net; + img-src ''self'' *.visa.com data: *.googleapis.com *.gstatic.com masterpass.com + *.masterpass.com *.americanexpress.com *.google-analytics.com *.gravatar.com; + script-src ''self'' ''unsafe-eval'' ''unsafe-inline'' *.cdn-apple.com *.forter.com + *.nr-data.net *.pmnts-sandbox.io *.pmnts-staging.io *.rollbar.com fatzebra.statuspage.io + cdnjs.cloudflare.com *.iovation.com *.jquery.com *.newrelic.com *.googleapis.com + *.cardinalcommerce.com *.bootstrapcdn.com wasm-eval *.google-analytics.com + *.googletagmanager.com *.sdiapi.com *.sdiapi.net *.posthog.com; script-src-attr + ''unsafe-inline''; script-src-elem ''self'' ''unsafe-inline'' *.sdiapi.com + *.cdn-apple.com *.googletagmanager.com *.forter.com *.nr-data.net *.pmnts-sandbox.io + *.rollbar.com fatzebra.statuspage.io *.iovation.com *.jquery.com cdnjs.cloudflare.com + *.pmnts-staging.io *.aexp-static.com *.newrelic.com *.googleapis.com *.americanexpress.com + www.google.com pay.google.com *.visa.com *.masterpass.com *.mastercard.com + *.google-analytics.com *.gstatic.com *.bootstrapcdn.com *.sdiapi.net; style-src + ''self'' ''unsafe-eval'' ''unsafe-inline'' *.bootstrapcdn.com *.googleapis.com; + style-src-attr ''unsafe-inline''; style-src-elem ''unsafe-inline'' ''self'' + *.googleapis.com cdnjs.cloudflare.com *.bootstrapcdn.com *.mastercard.com; + worker-src blob: *.sdiapi.com *.sdiapi.net *.posthog.com; report-uri https://fatzebra.report-uri.com/r/d/csp/wizard' + Nel: + - '{"report_to":"default","max_age":31536000,"include_subdomains":true}' + Report-To: + - '{"group":"default","max_age":31536000,"endpoints":[{"url":"https://fatzebra.report-uri.com/a/d/g"}],"include_subdomains":true}' + body: + encoding: UTF-8 + string: '{"successful":true,"response":{"token":"02gg1kmaafmw92ah3mgo","card_holder":"Matthew + Savage","card_number":"512345XXXXXX2346","card_expiry":"2030-02-28","card_type":"MasterCard","card_category":"Debit","card_subcategory":"PrePaid","card_issuer":"Afriland + First Bank","card_country":"Liberia","authorized":true,"transaction_count":408,"alias":null},"errors":[],"test":true}' + recorded_at: Mon, 19 Jan 2026 12:44:04 GMT +- request: + method: post + uri: https://gateway.sandbox.fatzebra.com.au/sdk/three_d_secure/setup + body: + encoding: UTF-8 + string: '{"card_token":"02gg1kmaafmw92ah3mgo","test":true}' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - application/json + User-Agent: + - Ruby + Authorization: + - Basic VEVTVDpURVNU + Content-Type: + - application/json + response: + status: + code: 401 + message: Unauthorized + headers: + Date: + - Mon, 19 Jan 2026 12:44:04 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 401 Unauthorized + Vary: + - Accept, Origin + X-Request-Id: + - 44d3a1415cf9065a60f34d46 + X-Runtime: + - '0.040201' + X-Backend: + - ip-10-100-34-142.ap-southeast-2.compute.internal + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: UTF-8 + string: '{"error":"Unauthorized"}' + recorded_at: Mon, 19 Jan 2026 12:44:04 GMT +recorded_with: VCR 6.3.1 diff --git a/spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/validations/1_3_3_1.yml b/spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/validations/1_3_3_1.yml new file mode 100644 index 0000000..19acb12 --- /dev/null +++ b/spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/validations/1_3_3_1.yml @@ -0,0 +1,89 @@ +--- +http_interactions: +- request: + method: post + uri: https://gateway.sandbox.fatzebra.com.au/v1.0/credit_cards + body: + encoding: UTF-8 + string: '{"card_holder":"Matthew Savage","card_number":"5123456789012346","card_expiry":"02/2030","cvv":123,"test":true}' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - application/json + User-Agent: + - Ruby + Authorization: + - Basic VEVTVDpURVNU + Content-Type: + - application/json + response: + status: + code: 200 + message: OK + headers: + Date: + - Mon, 19 Jan 2026 12:44:08 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 200 OK + Cache-Control: + - no-store + Vary: + - Accept + Pragma: + - no-cache + X-Request-Id: + - 3778b8732ce0a68b634940b9 + X-Runtime: + - '0.079003' + X-Backend: + - ip-10-100-34-142.ap-southeast-2.compute.internal + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + Content-Security-Policy-Report-Only: + - 'child-src ''self'' blob: *.cardinalcommerce.com fatzebra.statuspage.io; connect-src + ''self'' *.mastercard.com *.forter.com *.pmnts-staging.io *.rollbar.com *.nr-data.net + *.cardinalcommerce.com fatzebra.statuspage.io *.googleapis.com *.google-analytics.com + *.sdiapi.com *.sdiapi.net *.posthog.com; default-src ''self'' ''unsafe-eval'' + ''unsafe-inline'' *.forter.com *.nr-data.net blob: *.pmnts-sandbox.io *.rollbar.com + fatzebra.statuspage.io *.iovation.com data: *.googleapis.com *.gstatic.com + *.newrelic.com *.bootstrapcdn.com www.google.com pay.google.com *.google-analytics.com + *.gravatar.com; font-src ''self'' cdnjs.cloudflare.com data: *.gstatic.com + *.bootstrapcdn.com *.aexp-static.com; form-action ''self'' *.cardinalcommerce.com; + frame-ancestors ''self'' *.sdiapi.com *.sdiapi.net; frame-src ''self'' *.sdiapi.com + fatzebra.statuspage.io *.americanexpress.com www.google.com pay.google.com + *.masterpass.com *.visa.com *.mastercard.com *.recaptcha.net *.sdiapi.net; + img-src ''self'' *.visa.com data: *.googleapis.com *.gstatic.com masterpass.com + *.masterpass.com *.americanexpress.com *.google-analytics.com *.gravatar.com; + script-src ''self'' ''unsafe-eval'' ''unsafe-inline'' *.cdn-apple.com *.forter.com + *.nr-data.net *.pmnts-sandbox.io *.pmnts-staging.io *.rollbar.com fatzebra.statuspage.io + cdnjs.cloudflare.com *.iovation.com *.jquery.com *.newrelic.com *.googleapis.com + *.cardinalcommerce.com *.bootstrapcdn.com wasm-eval *.google-analytics.com + *.googletagmanager.com *.sdiapi.com *.sdiapi.net *.posthog.com; script-src-attr + ''unsafe-inline''; script-src-elem ''self'' ''unsafe-inline'' *.sdiapi.com + *.cdn-apple.com *.googletagmanager.com *.forter.com *.nr-data.net *.pmnts-sandbox.io + *.rollbar.com fatzebra.statuspage.io *.iovation.com *.jquery.com cdnjs.cloudflare.com + *.pmnts-staging.io *.aexp-static.com *.newrelic.com *.googleapis.com *.americanexpress.com + www.google.com pay.google.com *.visa.com *.masterpass.com *.mastercard.com + *.google-analytics.com *.gstatic.com *.bootstrapcdn.com *.sdiapi.net; style-src + ''self'' ''unsafe-eval'' ''unsafe-inline'' *.bootstrapcdn.com *.googleapis.com; + style-src-attr ''unsafe-inline''; style-src-elem ''unsafe-inline'' ''self'' + *.googleapis.com cdnjs.cloudflare.com *.bootstrapcdn.com *.mastercard.com; + worker-src blob: *.sdiapi.com *.sdiapi.net *.posthog.com; report-uri https://fatzebra.report-uri.com/r/d/csp/wizard' + Nel: + - '{"report_to":"default","max_age":31536000,"include_subdomains":true}' + Report-To: + - '{"group":"default","max_age":31536000,"endpoints":[{"url":"https://fatzebra.report-uri.com/a/d/g"}],"include_subdomains":true}' + body: + encoding: UTF-8 + string: '{"successful":true,"response":{"token":"02gg1kmaafmw92ah3mgo","card_holder":"Matthew + Savage","card_number":"512345XXXXXX2346","card_expiry":"2030-02-28","card_type":"MasterCard","card_category":"Debit","card_subcategory":"PrePaid","card_issuer":"Afriland + First Bank","card_country":"Liberia","authorized":true,"transaction_count":408,"alias":null},"errors":[],"test":true}' + recorded_at: Mon, 19 Jan 2026 12:44:08 GMT +recorded_with: VCR 6.3.1 diff --git a/spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/with_invalid_input/1_3_1_1.yml b/spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/with_invalid_input/1_3_1_1.yml new file mode 100644 index 0000000..97310d1 --- /dev/null +++ b/spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/with_invalid_input/1_3_1_1.yml @@ -0,0 +1,135 @@ +--- +http_interactions: +- request: + method: post + uri: https://gateway.sandbox.fatzebra.com.au/v1.0/credit_cards + body: + encoding: UTF-8 + string: '{"card_holder":"Matthew Savage","card_number":"5123456789012346","card_expiry":"02/2030","cvv":123,"test":true}' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - application/json + User-Agent: + - Ruby + Authorization: + - Basic VEVTVDpURVNU + Content-Type: + - application/json + response: + status: + code: 200 + message: OK + headers: + Date: + - Mon, 19 Jan 2026 12:44:07 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 200 OK + Cache-Control: + - no-store + Vary: + - Accept + Pragma: + - no-cache + X-Request-Id: + - 53ece9f234a884ee0769e98b + X-Runtime: + - '0.091693' + X-Backend: + - ip-10-100-34-142.ap-southeast-2.compute.internal + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + Content-Security-Policy-Report-Only: + - 'child-src ''self'' blob: *.cardinalcommerce.com fatzebra.statuspage.io; connect-src + ''self'' *.mastercard.com *.forter.com *.pmnts-staging.io *.rollbar.com *.nr-data.net + *.cardinalcommerce.com fatzebra.statuspage.io *.googleapis.com *.google-analytics.com + *.sdiapi.com *.sdiapi.net *.posthog.com; default-src ''self'' ''unsafe-eval'' + ''unsafe-inline'' *.forter.com *.nr-data.net blob: *.pmnts-sandbox.io *.rollbar.com + fatzebra.statuspage.io *.iovation.com data: *.googleapis.com *.gstatic.com + *.newrelic.com *.bootstrapcdn.com www.google.com pay.google.com *.google-analytics.com + *.gravatar.com; font-src ''self'' cdnjs.cloudflare.com data: *.gstatic.com + *.bootstrapcdn.com *.aexp-static.com; form-action ''self'' *.cardinalcommerce.com; + frame-ancestors ''self'' *.sdiapi.com *.sdiapi.net; frame-src ''self'' *.sdiapi.com + fatzebra.statuspage.io *.americanexpress.com www.google.com pay.google.com + *.masterpass.com *.visa.com *.mastercard.com *.recaptcha.net *.sdiapi.net; + img-src ''self'' *.visa.com data: *.googleapis.com *.gstatic.com masterpass.com + *.masterpass.com *.americanexpress.com *.google-analytics.com *.gravatar.com; + script-src ''self'' ''unsafe-eval'' ''unsafe-inline'' *.cdn-apple.com *.forter.com + *.nr-data.net *.pmnts-sandbox.io *.pmnts-staging.io *.rollbar.com fatzebra.statuspage.io + cdnjs.cloudflare.com *.iovation.com *.jquery.com *.newrelic.com *.googleapis.com + *.cardinalcommerce.com *.bootstrapcdn.com wasm-eval *.google-analytics.com + *.googletagmanager.com *.sdiapi.com *.sdiapi.net *.posthog.com; script-src-attr + ''unsafe-inline''; script-src-elem ''self'' ''unsafe-inline'' *.sdiapi.com + *.cdn-apple.com *.googletagmanager.com *.forter.com *.nr-data.net *.pmnts-sandbox.io + *.rollbar.com fatzebra.statuspage.io *.iovation.com *.jquery.com cdnjs.cloudflare.com + *.pmnts-staging.io *.aexp-static.com *.newrelic.com *.googleapis.com *.americanexpress.com + www.google.com pay.google.com *.visa.com *.masterpass.com *.mastercard.com + *.google-analytics.com *.gstatic.com *.bootstrapcdn.com *.sdiapi.net; style-src + ''self'' ''unsafe-eval'' ''unsafe-inline'' *.bootstrapcdn.com *.googleapis.com; + style-src-attr ''unsafe-inline''; style-src-elem ''unsafe-inline'' ''self'' + *.googleapis.com cdnjs.cloudflare.com *.bootstrapcdn.com *.mastercard.com; + worker-src blob: *.sdiapi.com *.sdiapi.net *.posthog.com; report-uri https://fatzebra.report-uri.com/r/d/csp/wizard' + Nel: + - '{"report_to":"default","max_age":31536000,"include_subdomains":true}' + Report-To: + - '{"group":"default","max_age":31536000,"endpoints":[{"url":"https://fatzebra.report-uri.com/a/d/g"}],"include_subdomains":true}' + body: + encoding: UTF-8 + string: '{"successful":true,"response":{"token":"02gg1kmaafmw92ah3mgo","card_holder":"Matthew + Savage","card_number":"512345XXXXXX2346","card_expiry":"2030-02-28","card_type":"MasterCard","card_category":"Debit","card_subcategory":"PrePaid","card_issuer":"Afriland + First Bank","card_country":"Liberia","authorized":true,"transaction_count":408,"alias":null},"errors":[],"test":true}' + recorded_at: Mon, 19 Jan 2026 12:44:07 GMT +- request: + method: post + uri: https://gateway.sandbox.fatzebra.com.au/sdk/three_d_secure/setup + body: + encoding: UTF-8 + string: '{"card_token":"02gg1kmaafmw92ah3mgo","test":true}' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - application/json + User-Agent: + - Ruby + Authorization: + - Basic VEVTVDpURVNU + Content-Type: + - application/json + response: + status: + code: 401 + message: Unauthorized + headers: + Date: + - Mon, 19 Jan 2026 12:44:07 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 401 Unauthorized + Vary: + - Accept, Origin + X-Request-Id: + - 750ae3427e660743433f2191 + X-Runtime: + - '0.030219' + X-Backend: + - ip-10-100-34-142.ap-southeast-2.compute.internal + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: UTF-8 + string: '{"error":"Unauthorized"}' + recorded_at: Mon, 19 Jan 2026 12:44:07 GMT +recorded_with: VCR 6.3.1 diff --git a/spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/with_invalid_input/1_3_1_2.yml b/spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/with_invalid_input/1_3_1_2.yml new file mode 100644 index 0000000..0c67f2e --- /dev/null +++ b/spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/with_invalid_input/1_3_1_2.yml @@ -0,0 +1,135 @@ +--- +http_interactions: +- request: + method: post + uri: https://gateway.sandbox.fatzebra.com.au/v1.0/credit_cards + body: + encoding: UTF-8 + string: '{"card_holder":"Matthew Savage","card_number":"5123456789012346","card_expiry":"02/2030","cvv":123,"test":true}' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - application/json + User-Agent: + - Ruby + Authorization: + - Basic VEVTVDpURVNU + Content-Type: + - application/json + response: + status: + code: 200 + message: OK + headers: + Date: + - Mon, 19 Jan 2026 12:44:07 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 200 OK + Cache-Control: + - no-store + Vary: + - Accept + Pragma: + - no-cache + X-Request-Id: + - '061870676a451c224e257bea' + X-Runtime: + - '0.054680' + X-Backend: + - ip-10-100-34-142.ap-southeast-2.compute.internal + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + Content-Security-Policy-Report-Only: + - 'child-src ''self'' blob: *.cardinalcommerce.com fatzebra.statuspage.io; connect-src + ''self'' *.mastercard.com *.forter.com *.pmnts-staging.io *.rollbar.com *.nr-data.net + *.cardinalcommerce.com fatzebra.statuspage.io *.googleapis.com *.google-analytics.com + *.sdiapi.com *.sdiapi.net *.posthog.com; default-src ''self'' ''unsafe-eval'' + ''unsafe-inline'' *.forter.com *.nr-data.net blob: *.pmnts-sandbox.io *.rollbar.com + fatzebra.statuspage.io *.iovation.com data: *.googleapis.com *.gstatic.com + *.newrelic.com *.bootstrapcdn.com www.google.com pay.google.com *.google-analytics.com + *.gravatar.com; font-src ''self'' cdnjs.cloudflare.com data: *.gstatic.com + *.bootstrapcdn.com *.aexp-static.com; form-action ''self'' *.cardinalcommerce.com; + frame-ancestors ''self'' *.sdiapi.com *.sdiapi.net; frame-src ''self'' *.sdiapi.com + fatzebra.statuspage.io *.americanexpress.com www.google.com pay.google.com + *.masterpass.com *.visa.com *.mastercard.com *.recaptcha.net *.sdiapi.net; + img-src ''self'' *.visa.com data: *.googleapis.com *.gstatic.com masterpass.com + *.masterpass.com *.americanexpress.com *.google-analytics.com *.gravatar.com; + script-src ''self'' ''unsafe-eval'' ''unsafe-inline'' *.cdn-apple.com *.forter.com + *.nr-data.net *.pmnts-sandbox.io *.pmnts-staging.io *.rollbar.com fatzebra.statuspage.io + cdnjs.cloudflare.com *.iovation.com *.jquery.com *.newrelic.com *.googleapis.com + *.cardinalcommerce.com *.bootstrapcdn.com wasm-eval *.google-analytics.com + *.googletagmanager.com *.sdiapi.com *.sdiapi.net *.posthog.com; script-src-attr + ''unsafe-inline''; script-src-elem ''self'' ''unsafe-inline'' *.sdiapi.com + *.cdn-apple.com *.googletagmanager.com *.forter.com *.nr-data.net *.pmnts-sandbox.io + *.rollbar.com fatzebra.statuspage.io *.iovation.com *.jquery.com cdnjs.cloudflare.com + *.pmnts-staging.io *.aexp-static.com *.newrelic.com *.googleapis.com *.americanexpress.com + www.google.com pay.google.com *.visa.com *.masterpass.com *.mastercard.com + *.google-analytics.com *.gstatic.com *.bootstrapcdn.com *.sdiapi.net; style-src + ''self'' ''unsafe-eval'' ''unsafe-inline'' *.bootstrapcdn.com *.googleapis.com; + style-src-attr ''unsafe-inline''; style-src-elem ''unsafe-inline'' ''self'' + *.googleapis.com cdnjs.cloudflare.com *.bootstrapcdn.com *.mastercard.com; + worker-src blob: *.sdiapi.com *.sdiapi.net *.posthog.com; report-uri https://fatzebra.report-uri.com/r/d/csp/wizard' + Nel: + - '{"report_to":"default","max_age":31536000,"include_subdomains":true}' + Report-To: + - '{"group":"default","max_age":31536000,"endpoints":[{"url":"https://fatzebra.report-uri.com/a/d/g"}],"include_subdomains":true}' + body: + encoding: UTF-8 + string: '{"successful":true,"response":{"token":"02gg1kmaafmw92ah3mgo","card_holder":"Matthew + Savage","card_number":"512345XXXXXX2346","card_expiry":"2030-02-28","card_type":"MasterCard","card_category":"Debit","card_subcategory":"PrePaid","card_issuer":"Afriland + First Bank","card_country":"Liberia","authorized":true,"transaction_count":408,"alias":null},"errors":[],"test":true}' + recorded_at: Mon, 19 Jan 2026 12:44:07 GMT +- request: + method: post + uri: https://gateway.sandbox.fatzebra.com.au/sdk/three_d_secure/setup + body: + encoding: UTF-8 + string: '{"card_token":"02gg1kmaafmw92ah3mgo","test":true}' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - application/json + User-Agent: + - Ruby + Authorization: + - Basic VEVTVDpURVNU + Content-Type: + - application/json + response: + status: + code: 401 + message: Unauthorized + headers: + Date: + - Mon, 19 Jan 2026 12:44:07 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 401 Unauthorized + Vary: + - Accept, Origin + X-Request-Id: + - 3314ecfc3c01c6c7668b5299 + X-Runtime: + - '0.026552' + X-Backend: + - ip-10-100-34-142.ap-southeast-2.compute.internal + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: UTF-8 + string: '{"error":"Unauthorized"}' + recorded_at: Mon, 19 Jan 2026 12:44:07 GMT +recorded_with: VCR 6.3.1 diff --git a/spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/with_invalid_input/1_3_1_3.yml b/spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/with_invalid_input/1_3_1_3.yml new file mode 100644 index 0000000..be7f6d9 --- /dev/null +++ b/spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/with_invalid_input/1_3_1_3.yml @@ -0,0 +1,135 @@ +--- +http_interactions: +- request: + method: post + uri: https://gateway.sandbox.fatzebra.com.au/v1.0/credit_cards + body: + encoding: UTF-8 + string: '{"card_holder":"Matthew Savage","card_number":"5123456789012346","card_expiry":"02/2030","cvv":123,"test":true}' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - application/json + User-Agent: + - Ruby + Authorization: + - Basic VEVTVDpURVNU + Content-Type: + - application/json + response: + status: + code: 200 + message: OK + headers: + Date: + - Mon, 19 Jan 2026 12:44:07 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 200 OK + Cache-Control: + - no-store + Vary: + - Accept + Pragma: + - no-cache + X-Request-Id: + - 0a31a79056aca0e848d2f4af + X-Runtime: + - '0.050692' + X-Backend: + - ip-10-100-34-142.ap-southeast-2.compute.internal + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + Content-Security-Policy-Report-Only: + - 'child-src ''self'' blob: *.cardinalcommerce.com fatzebra.statuspage.io; connect-src + ''self'' *.mastercard.com *.forter.com *.pmnts-staging.io *.rollbar.com *.nr-data.net + *.cardinalcommerce.com fatzebra.statuspage.io *.googleapis.com *.google-analytics.com + *.sdiapi.com *.sdiapi.net *.posthog.com; default-src ''self'' ''unsafe-eval'' + ''unsafe-inline'' *.forter.com *.nr-data.net blob: *.pmnts-sandbox.io *.rollbar.com + fatzebra.statuspage.io *.iovation.com data: *.googleapis.com *.gstatic.com + *.newrelic.com *.bootstrapcdn.com www.google.com pay.google.com *.google-analytics.com + *.gravatar.com; font-src ''self'' cdnjs.cloudflare.com data: *.gstatic.com + *.bootstrapcdn.com *.aexp-static.com; form-action ''self'' *.cardinalcommerce.com; + frame-ancestors ''self'' *.sdiapi.com *.sdiapi.net; frame-src ''self'' *.sdiapi.com + fatzebra.statuspage.io *.americanexpress.com www.google.com pay.google.com + *.masterpass.com *.visa.com *.mastercard.com *.recaptcha.net *.sdiapi.net; + img-src ''self'' *.visa.com data: *.googleapis.com *.gstatic.com masterpass.com + *.masterpass.com *.americanexpress.com *.google-analytics.com *.gravatar.com; + script-src ''self'' ''unsafe-eval'' ''unsafe-inline'' *.cdn-apple.com *.forter.com + *.nr-data.net *.pmnts-sandbox.io *.pmnts-staging.io *.rollbar.com fatzebra.statuspage.io + cdnjs.cloudflare.com *.iovation.com *.jquery.com *.newrelic.com *.googleapis.com + *.cardinalcommerce.com *.bootstrapcdn.com wasm-eval *.google-analytics.com + *.googletagmanager.com *.sdiapi.com *.sdiapi.net *.posthog.com; script-src-attr + ''unsafe-inline''; script-src-elem ''self'' ''unsafe-inline'' *.sdiapi.com + *.cdn-apple.com *.googletagmanager.com *.forter.com *.nr-data.net *.pmnts-sandbox.io + *.rollbar.com fatzebra.statuspage.io *.iovation.com *.jquery.com cdnjs.cloudflare.com + *.pmnts-staging.io *.aexp-static.com *.newrelic.com *.googleapis.com *.americanexpress.com + www.google.com pay.google.com *.visa.com *.masterpass.com *.mastercard.com + *.google-analytics.com *.gstatic.com *.bootstrapcdn.com *.sdiapi.net; style-src + ''self'' ''unsafe-eval'' ''unsafe-inline'' *.bootstrapcdn.com *.googleapis.com; + style-src-attr ''unsafe-inline''; style-src-elem ''unsafe-inline'' ''self'' + *.googleapis.com cdnjs.cloudflare.com *.bootstrapcdn.com *.mastercard.com; + worker-src blob: *.sdiapi.com *.sdiapi.net *.posthog.com; report-uri https://fatzebra.report-uri.com/r/d/csp/wizard' + Nel: + - '{"report_to":"default","max_age":31536000,"include_subdomains":true}' + Report-To: + - '{"group":"default","max_age":31536000,"endpoints":[{"url":"https://fatzebra.report-uri.com/a/d/g"}],"include_subdomains":true}' + body: + encoding: UTF-8 + string: '{"successful":true,"response":{"token":"02gg1kmaafmw92ah3mgo","card_holder":"Matthew + Savage","card_number":"512345XXXXXX2346","card_expiry":"2030-02-28","card_type":"MasterCard","card_category":"Debit","card_subcategory":"PrePaid","card_issuer":"Afriland + First Bank","card_country":"Liberia","authorized":true,"transaction_count":408,"alias":null},"errors":[],"test":true}' + recorded_at: Mon, 19 Jan 2026 12:44:07 GMT +- request: + method: post + uri: https://gateway.sandbox.fatzebra.com.au/sdk/three_d_secure/setup + body: + encoding: UTF-8 + string: '{"card_token":"02gg1kmaafmw92ah3mgo","test":true}' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - application/json + User-Agent: + - Ruby + Authorization: + - Basic VEVTVDpURVNU + Content-Type: + - application/json + response: + status: + code: 401 + message: Unauthorized + headers: + Date: + - Mon, 19 Jan 2026 12:44:07 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 401 Unauthorized + Vary: + - Accept, Origin + X-Request-Id: + - 26f14d1e08d0400e7e0b7bfd + X-Runtime: + - '0.017749' + X-Backend: + - ip-10-100-34-142.ap-southeast-2.compute.internal + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: UTF-8 + string: '{"error":"Unauthorized"}' + recorded_at: Mon, 19 Jan 2026 12:44:07 GMT +recorded_with: VCR 6.3.1 diff --git a/spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/with_valid_input/1_3_2_1.yml b/spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/with_valid_input/1_3_2_1.yml new file mode 100644 index 0000000..636f3b0 --- /dev/null +++ b/spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/with_valid_input/1_3_2_1.yml @@ -0,0 +1,135 @@ +--- +http_interactions: +- request: + method: post + uri: https://gateway.sandbox.fatzebra.com.au/v1.0/credit_cards + body: + encoding: UTF-8 + string: '{"card_holder":"Matthew Savage","card_number":"5123456789012346","card_expiry":"02/2030","cvv":123,"test":true}' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - application/json + User-Agent: + - Ruby + Authorization: + - Basic VEVTVDpURVNU + Content-Type: + - application/json + response: + status: + code: 200 + message: OK + headers: + Date: + - Mon, 19 Jan 2026 12:44:07 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 200 OK + Cache-Control: + - no-store + Vary: + - Accept + Pragma: + - no-cache + X-Request-Id: + - 65e1d35d16ee0352435218af + X-Runtime: + - '0.062477' + X-Backend: + - ip-10-100-34-142.ap-southeast-2.compute.internal + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + Content-Security-Policy-Report-Only: + - 'child-src ''self'' blob: *.cardinalcommerce.com fatzebra.statuspage.io; connect-src + ''self'' *.mastercard.com *.forter.com *.pmnts-staging.io *.rollbar.com *.nr-data.net + *.cardinalcommerce.com fatzebra.statuspage.io *.googleapis.com *.google-analytics.com + *.sdiapi.com *.sdiapi.net *.posthog.com; default-src ''self'' ''unsafe-eval'' + ''unsafe-inline'' *.forter.com *.nr-data.net blob: *.pmnts-sandbox.io *.rollbar.com + fatzebra.statuspage.io *.iovation.com data: *.googleapis.com *.gstatic.com + *.newrelic.com *.bootstrapcdn.com www.google.com pay.google.com *.google-analytics.com + *.gravatar.com; font-src ''self'' cdnjs.cloudflare.com data: *.gstatic.com + *.bootstrapcdn.com *.aexp-static.com; form-action ''self'' *.cardinalcommerce.com; + frame-ancestors ''self'' *.sdiapi.com *.sdiapi.net; frame-src ''self'' *.sdiapi.com + fatzebra.statuspage.io *.americanexpress.com www.google.com pay.google.com + *.masterpass.com *.visa.com *.mastercard.com *.recaptcha.net *.sdiapi.net; + img-src ''self'' *.visa.com data: *.googleapis.com *.gstatic.com masterpass.com + *.masterpass.com *.americanexpress.com *.google-analytics.com *.gravatar.com; + script-src ''self'' ''unsafe-eval'' ''unsafe-inline'' *.cdn-apple.com *.forter.com + *.nr-data.net *.pmnts-sandbox.io *.pmnts-staging.io *.rollbar.com fatzebra.statuspage.io + cdnjs.cloudflare.com *.iovation.com *.jquery.com *.newrelic.com *.googleapis.com + *.cardinalcommerce.com *.bootstrapcdn.com wasm-eval *.google-analytics.com + *.googletagmanager.com *.sdiapi.com *.sdiapi.net *.posthog.com; script-src-attr + ''unsafe-inline''; script-src-elem ''self'' ''unsafe-inline'' *.sdiapi.com + *.cdn-apple.com *.googletagmanager.com *.forter.com *.nr-data.net *.pmnts-sandbox.io + *.rollbar.com fatzebra.statuspage.io *.iovation.com *.jquery.com cdnjs.cloudflare.com + *.pmnts-staging.io *.aexp-static.com *.newrelic.com *.googleapis.com *.americanexpress.com + www.google.com pay.google.com *.visa.com *.masterpass.com *.mastercard.com + *.google-analytics.com *.gstatic.com *.bootstrapcdn.com *.sdiapi.net; style-src + ''self'' ''unsafe-eval'' ''unsafe-inline'' *.bootstrapcdn.com *.googleapis.com; + style-src-attr ''unsafe-inline''; style-src-elem ''unsafe-inline'' ''self'' + *.googleapis.com cdnjs.cloudflare.com *.bootstrapcdn.com *.mastercard.com; + worker-src blob: *.sdiapi.com *.sdiapi.net *.posthog.com; report-uri https://fatzebra.report-uri.com/r/d/csp/wizard' + Nel: + - '{"report_to":"default","max_age":31536000,"include_subdomains":true}' + Report-To: + - '{"group":"default","max_age":31536000,"endpoints":[{"url":"https://fatzebra.report-uri.com/a/d/g"}],"include_subdomains":true}' + body: + encoding: UTF-8 + string: '{"successful":true,"response":{"token":"02gg1kmaafmw92ah3mgo","card_holder":"Matthew + Savage","card_number":"512345XXXXXX2346","card_expiry":"2030-02-28","card_type":"MasterCard","card_category":"Debit","card_subcategory":"PrePaid","card_issuer":"Afriland + First Bank","card_country":"Liberia","authorized":true,"transaction_count":408,"alias":null},"errors":[],"test":true}' + recorded_at: Mon, 19 Jan 2026 12:44:07 GMT +- request: + method: post + uri: https://gateway.sandbox.fatzebra.com.au/sdk/three_d_secure/setup + body: + encoding: UTF-8 + string: '{"card_token":"02gg1kmaafmw92ah3mgo","test":true}' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - application/json + User-Agent: + - Ruby + Authorization: + - Basic VEVTVDpURVNU + Content-Type: + - application/json + response: + status: + code: 401 + message: Unauthorized + headers: + Date: + - Mon, 19 Jan 2026 12:44:08 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 401 Unauthorized + Vary: + - Accept, Origin + X-Request-Id: + - 439d34f5768733a25002ca3d + X-Runtime: + - '0.022797' + X-Backend: + - ip-10-100-34-142.ap-southeast-2.compute.internal + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: UTF-8 + string: '{"error":"Unauthorized"}' + recorded_at: Mon, 19 Jan 2026 12:44:07 GMT +recorded_with: VCR 6.3.1 diff --git a/spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/with_valid_input/returns_expected_keys.yml b/spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/with_valid_input/returns_expected_keys.yml new file mode 100644 index 0000000..6b1526e --- /dev/null +++ b/spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/with_valid_input/returns_expected_keys.yml @@ -0,0 +1,135 @@ +--- +http_interactions: +- request: + method: post + uri: https://gateway.sandbox.fatzebra.com.au/v1.0/credit_cards + body: + encoding: UTF-8 + string: '{"card_holder":"Matthew Savage","card_number":"5123456789012346","card_expiry":"02/2030","cvv":123,"test":true}' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - application/json + User-Agent: + - Ruby + Authorization: + - Basic VEVTVDpURVNU + Content-Type: + - application/json + response: + status: + code: 200 + message: OK + headers: + Date: + - Mon, 19 Jan 2026 12:44:08 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 200 OK + Cache-Control: + - no-store + Vary: + - Accept + Pragma: + - no-cache + X-Request-Id: + - '08e2d0c729c5e766317dbbfa' + X-Runtime: + - '0.069241' + X-Backend: + - ip-10-100-34-142.ap-southeast-2.compute.internal + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + Content-Security-Policy-Report-Only: + - 'child-src ''self'' blob: *.cardinalcommerce.com fatzebra.statuspage.io; connect-src + ''self'' *.mastercard.com *.forter.com *.pmnts-staging.io *.rollbar.com *.nr-data.net + *.cardinalcommerce.com fatzebra.statuspage.io *.googleapis.com *.google-analytics.com + *.sdiapi.com *.sdiapi.net *.posthog.com; default-src ''self'' ''unsafe-eval'' + ''unsafe-inline'' *.forter.com *.nr-data.net blob: *.pmnts-sandbox.io *.rollbar.com + fatzebra.statuspage.io *.iovation.com data: *.googleapis.com *.gstatic.com + *.newrelic.com *.bootstrapcdn.com www.google.com pay.google.com *.google-analytics.com + *.gravatar.com; font-src ''self'' cdnjs.cloudflare.com data: *.gstatic.com + *.bootstrapcdn.com *.aexp-static.com; form-action ''self'' *.cardinalcommerce.com; + frame-ancestors ''self'' *.sdiapi.com *.sdiapi.net; frame-src ''self'' *.sdiapi.com + fatzebra.statuspage.io *.americanexpress.com www.google.com pay.google.com + *.masterpass.com *.visa.com *.mastercard.com *.recaptcha.net *.sdiapi.net; + img-src ''self'' *.visa.com data: *.googleapis.com *.gstatic.com masterpass.com + *.masterpass.com *.americanexpress.com *.google-analytics.com *.gravatar.com; + script-src ''self'' ''unsafe-eval'' ''unsafe-inline'' *.cdn-apple.com *.forter.com + *.nr-data.net *.pmnts-sandbox.io *.pmnts-staging.io *.rollbar.com fatzebra.statuspage.io + cdnjs.cloudflare.com *.iovation.com *.jquery.com *.newrelic.com *.googleapis.com + *.cardinalcommerce.com *.bootstrapcdn.com wasm-eval *.google-analytics.com + *.googletagmanager.com *.sdiapi.com *.sdiapi.net *.posthog.com; script-src-attr + ''unsafe-inline''; script-src-elem ''self'' ''unsafe-inline'' *.sdiapi.com + *.cdn-apple.com *.googletagmanager.com *.forter.com *.nr-data.net *.pmnts-sandbox.io + *.rollbar.com fatzebra.statuspage.io *.iovation.com *.jquery.com cdnjs.cloudflare.com + *.pmnts-staging.io *.aexp-static.com *.newrelic.com *.googleapis.com *.americanexpress.com + www.google.com pay.google.com *.visa.com *.masterpass.com *.mastercard.com + *.google-analytics.com *.gstatic.com *.bootstrapcdn.com *.sdiapi.net; style-src + ''self'' ''unsafe-eval'' ''unsafe-inline'' *.bootstrapcdn.com *.googleapis.com; + style-src-attr ''unsafe-inline''; style-src-elem ''unsafe-inline'' ''self'' + *.googleapis.com cdnjs.cloudflare.com *.bootstrapcdn.com *.mastercard.com; + worker-src blob: *.sdiapi.com *.sdiapi.net *.posthog.com; report-uri https://fatzebra.report-uri.com/r/d/csp/wizard' + Nel: + - '{"report_to":"default","max_age":31536000,"include_subdomains":true}' + Report-To: + - '{"group":"default","max_age":31536000,"endpoints":[{"url":"https://fatzebra.report-uri.com/a/d/g"}],"include_subdomains":true}' + body: + encoding: UTF-8 + string: '{"successful":true,"response":{"token":"02gg1kmaafmw92ah3mgo","card_holder":"Matthew + Savage","card_number":"512345XXXXXX2346","card_expiry":"2030-02-28","card_type":"MasterCard","card_category":"Debit","card_subcategory":"PrePaid","card_issuer":"Afriland + First Bank","card_country":"Liberia","authorized":true,"transaction_count":408,"alias":null},"errors":[],"test":true}' + recorded_at: Mon, 19 Jan 2026 12:44:08 GMT +- request: + method: post + uri: https://gateway.sandbox.fatzebra.com.au/sdk/three_d_secure/setup + body: + encoding: UTF-8 + string: '{"card_token":"02gg1kmaafmw92ah3mgo","test":true}' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - application/json + User-Agent: + - Ruby + Authorization: + - Basic VEVTVDpURVNU + Content-Type: + - application/json + response: + status: + code: 401 + message: Unauthorized + headers: + Date: + - Mon, 19 Jan 2026 12:44:08 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 401 Unauthorized + Vary: + - Accept, Origin + X-Request-Id: + - 567c47b52222afda41162111 + X-Runtime: + - '0.020576' + X-Backend: + - ip-10-100-34-142.ap-southeast-2.compute.internal + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + body: + encoding: UTF-8 + string: '{"error":"Unauthorized"}' + recorded_at: Mon, 19 Jan 2026 12:44:08 GMT +recorded_with: VCR 6.3.1 diff --git a/spec/lib/fat_zebra/three_d_secure_spec.rb b/spec/lib/fat_zebra/three_d_secure_spec.rb new file mode 100644 index 0000000..ec12f9d --- /dev/null +++ b/spec/lib/fat_zebra/three_d_secure_spec.rb @@ -0,0 +1,218 @@ +require 'spec_helper' + +describe FatZebra::ThreeDSecure do + describe '.setup', :vcr do + subject(:setup) { described_class.setup(valid_setup_payload) } + + let(:valid_setup_payload) {{ + card_token: card_token + }} + + let!(:credit_card) { FatZebra::Card.create(valid_credit_card_payload) } + let(:card_token) { credit_card.token } + + context 'with invalid input' do + + it do + valid_setup_payload[:card_token] = 'INVALID' + is_expected.not_to be_accepted + expect(setup.errors.join).to match(/Card not found|card_token/i) + end + + it do + valid_setup_payload.delete(:card_token) + expect { setup }.to raise_error(FatZebra::RequestValidationError) + end + end + + context 'with valid input' do + it do + is_expected.to be_accepted + expect(setup.errors).to be_empty + end + + it 'returns expected keys' do + is_expected.to be_accepted + expect(setup.keys).to include('reference_id') + expect(setup.reference_id).to be_truthy + end + end + end + + describe '.check_enrollment', :vcr do + subject(:enrollment) { described_class.check_enrollment(valid_enrollment_payload) } + + let!(:credit_card) { FatZebra::Card.create(valid_credit_card_payload) } + + let(:valid_enrollment_payload) {{ + merchant_username: merchant_username, + card_token: credit_card.token, + amount: 100, + currency: 'AUD', + reference: "ref-#{SecureRandom.hex(6)}", + verification: '123', + device_channel: 'browser', + reference_id: reference_id, + return_url: 'https://example.com/3ds/return', + acs_window_size: '05', + browser_accept_content: 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', + browser_language: 'en-AU', + browser_java_enabled: false, + browser_color_depth: 24, + browser_screen_height: 1080, + browser_screen_width: 1920, + browser_time_difference: 0, + browser_user_agent: 'RSpec' + }} + + # In the SDK these are usually configured; keep them as lets so projects can override via spec helpers. + let(:merchant_username) { ENV.fetch('FATZEBRA_MERCHANT_USERNAME', 'test') } + + # reference_id is returned from setup; for stability we call setup here. + let(:reference_id) do + described_class.setup(card_token: credit_card.token).reference_id + end + + context 'with invalid input' do + it do + valid_enrollment_payload[:card_token] = 'INVALID' + is_expected.not_to be_accepted + expect(enrollment.errors.join).to match(/Card not found|card_token/i) + end + + it do + valid_enrollment_payload[:currency] = 'INVALID' + is_expected.not_to be_accepted + expect(enrollment.errors.join).to match(/INVALID is not valid for this merchant|currency/i) + end + + it do + valid_enrollment_payload[:amount] = 'INVALID' + is_expected.not_to be_accepted + expect(enrollment.errors.join).to match(/Amount is invalid|amount/i) + end + + it do + valid_enrollment_payload.delete(:merchant_username) + expect { enrollment }.to raise_error(FatZebra::RequestValidationError) + end + + it do + valid_enrollment_payload.delete(:reference_id) + expect { enrollment }.to raise_error(FatZebra::RequestValidationError) + end + + it do + valid_enrollment_payload.delete(:return_url) + expect { enrollment }.to raise_error(FatZebra::RequestValidationError) + end + end + + context 'with valid input' do + it do + is_expected.to be_accepted + expect(enrollment.errors).to be_empty + end + + it 'returns expected keys' do + is_expected.to be_accepted + expect(enrollment.keys).to include('enrolled', 'version', 'card_bin') + end + + it do + expect(enrollment.enrolled).to be_truthy + expect(enrollment.version).to be_truthy + expect(enrollment.card_bin).to be_truthy + end + end + + context 'validations' do + let(:valid_enrollment_payload) {{}} + + it { expect { enrollment }.to raise_error(FatZebra::RequestValidationError) } + end + end + + describe '.validate_authentication', :vcr do + subject(:validation) { described_class.validate_authentication(valid_validation_payload) } + + let!(:credit_card) { FatZebra::Card.create(valid_credit_card_payload) } + + let(:merchant_username) { ENV.fetch('FATZEBRA_MERCHANT_USERNAME', 'test') } + + let(:reference_id) do + described_class.setup(card_token: credit_card.token).reference_id + end + + let(:authentication_transaction_id) do + described_class.check_enrollment(valid_enrollment_payload).authentication_transaction_id + end + + let(:valid_enrollment_payload) {{ + merchant_username: merchant_username, + card_token: credit_card.token, + amount: 100, + currency: 'AUD', + reference: "ref-#{SecureRandom.hex(6)}", + verification: '123', + device_channel: 'browser', + reference_id: reference_id, + return_url: 'https://example.com/3ds/return', + acs_window_size: '05', + browser_accept_content: 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', + browser_language: 'en-AU', + browser_java_enabled: false, + browser_color_depth: 24, + browser_screen_height: 1080, + browser_screen_width: 1920, + browser_time_difference: 0, + browser_user_agent: 'RSpec' + }} + + let(:valid_validation_payload) {{ + merchant_username: merchant_username, + card_token: credit_card.token, + amount: 100, + currency: 'AUD', + authentication_transaction_id: authentication_transaction_id + }} + + context 'with invalid input' do + it do + valid_validation_payload[:card_token] = 'INVALID' + is_expected.not_to be_accepted + expect(validation.errors.join).to match(/Card not found|card_token/i) + end + + it do + valid_validation_payload[:amount] = 'INVALID' + is_expected.not_to be_accepted + expect(validation.errors.join).to match(/Amount is invalid|amount/i) + end + + it do + valid_validation_payload[:authentication_transaction_id] = 'INVALID' + is_expected.not_to be_accepted + expect(validation.errors.join).to match(/authentication_transaction_id|transaction/i) + end + end + + context 'with valid input' do + it do + is_expected.to be_accepted + expect(validation.errors).to be_empty + end + + it 'returns expected keys' do + is_expected.to be_accepted + expect(validation.keys).to include('decision', 'authentication_transaction_id') + end + end + + context 'validations' do + let(:valid_validation_payload) {{}} + + it { expect { validation }.to raise_error(FatZebra::RequestValidationError) } + end + end +end From 3070f2ebc4b1ebc6a109b5a9f4ac67255cd2a827 Mon Sep 17 00:00:00 2001 From: devUniWork Date: Tue, 20 Jan 2026 21:47:08 +1000 Subject: [PATCH 03/12] specs running green --- .../validations/1_2_2_1.yml} | 66 +---- .../with_invalid_input/1_2_1_1.yml | 135 --------- .../with_invalid_input/1_2_1_2.yml | 135 --------- .../with_invalid_input/1_2_1_3.yml | 135 --------- .../with_invalid_input/1_2_1_4.yml | 135 --------- .../with_invalid_input/1_2_1_5.yml | 135 --------- .../with_invalid_input/1_2_1_6.yml | 135 --------- .../with_valid_input/1_2_1_1.yml | 257 ++++++++++++++++++ .../with_valid_input/1_2_1_3.yml | 257 ++++++++++++++++++ .../with_valid_input/1_2_2_1.yml | 135 --------- .../with_valid_input/1_2_2_3.yml | 135 --------- .../returns_expected_keys.yml | 160 +++++++++-- .../returns_expected_keys.yml | 76 ++++-- .../_setup/with_invalid_input/1_1_1_1.yml | 135 --------- .../_setup/with_valid_input/1_1_2_1.yml | 135 --------- .../validations/1_3_1_1.yml} | 12 +- .../1_3_2_1.yml | 58 +--- .../with_invalid_input/1_3_1_1.yml | 135 --------- .../with_invalid_input/1_3_1_2.yml | 135 --------- .../with_invalid_input/1_3_1_3.yml | 135 --------- .../1_3_1_1.yml} | 12 +- .../returns_expected_keys.yml | 58 +--- spec/lib/fat_zebra/three_d_secure_spec.rb | 129 ++------- spec/support/payloads.rb | 7 + 24 files changed, 778 insertions(+), 2069 deletions(-) rename spec/cassettes/FatZebra_ThreeDSecure/{_setup/with_invalid_input/1_1_1_2.yml => _check_enrollment/validations/1_2_2_1.yml} (67%) delete mode 100644 spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_invalid_input/1_2_1_1.yml delete mode 100644 spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_invalid_input/1_2_1_2.yml delete mode 100644 spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_invalid_input/1_2_1_3.yml delete mode 100644 spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_invalid_input/1_2_1_4.yml delete mode 100644 spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_invalid_input/1_2_1_5.yml delete mode 100644 spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_invalid_input/1_2_1_6.yml create mode 100644 spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_valid_input/1_2_1_1.yml create mode 100644 spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_valid_input/1_2_1_3.yml delete mode 100644 spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_valid_input/1_2_2_1.yml delete mode 100644 spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_valid_input/1_2_2_3.yml rename spec/cassettes/FatZebra_ThreeDSecure/_setup/{with_valid_input => valid_payload}/returns_expected_keys.yml (50%) delete mode 100644 spec/cassettes/FatZebra_ThreeDSecure/_setup/with_invalid_input/1_1_1_1.yml delete mode 100644 spec/cassettes/FatZebra_ThreeDSecure/_setup/with_valid_input/1_1_2_1.yml rename spec/cassettes/FatZebra_ThreeDSecure/{_check_enrollment/validations/1_2_3_1.yml => _validate_authentication/validations/1_3_1_1.yml} (94%) rename spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/{with_valid_input => validations}/1_3_2_1.yml (75%) delete mode 100644 spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/with_invalid_input/1_3_1_1.yml delete mode 100644 spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/with_invalid_input/1_3_1_2.yml delete mode 100644 spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/with_invalid_input/1_3_1_3.yml rename spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/{validations/1_3_3_1.yml => with_valid_input/1_3_1_1.yml} (94%) diff --git a/spec/cassettes/FatZebra_ThreeDSecure/_setup/with_invalid_input/1_1_1_2.yml b/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/validations/1_2_2_1.yml similarity index 67% rename from spec/cassettes/FatZebra_ThreeDSecure/_setup/with_invalid_input/1_1_1_2.yml rename to spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/validations/1_2_2_1.yml index 1da66fd..0e89749 100644 --- a/spec/cassettes/FatZebra_ThreeDSecure/_setup/with_invalid_input/1_1_1_2.yml +++ b/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/validations/1_2_2_1.yml @@ -5,7 +5,7 @@ http_interactions: uri: https://gateway.sandbox.fatzebra.com.au/v1.0/credit_cards body: encoding: UTF-8 - string: '{"card_holder":"Matthew Savage","card_number":"5123456789012346","card_expiry":"02/2030","cvv":123,"test":true}' + string: '{"card_holder":"Card Holder","card_number":"4000000000002503","card_expiry":"02/2045","cvv":123,"test":true}' headers: Accept-Encoding: - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 @@ -23,7 +23,7 @@ http_interactions: message: OK headers: Date: - - Mon, 19 Jan 2026 12:44:03 GMT + - Tue, 20 Jan 2026 11:42:43 GMT Content-Type: - application/json; charset=utf-8 Transfer-Encoding: @@ -36,14 +36,14 @@ http_interactions: - no-store Vary: - Accept + X-Runtime: + - '0.039104' Pragma: - no-cache X-Request-Id: - - 1242b3d3219b3b831acf7762 - X-Runtime: - - '0.048763' + - 1bb09cb74d3320807824a2e1 X-Backend: - - ip-10-100-34-142.ap-southeast-2.compute.internal + - ip-10-100-22-12.ap-southeast-2.compute.internal Strict-Transport-Security: - max-age=31536000; includeSubDomains Content-Security-Policy-Report-Only: @@ -82,54 +82,8 @@ http_interactions: - '{"group":"default","max_age":31536000,"endpoints":[{"url":"https://fatzebra.report-uri.com/a/d/g"}],"include_subdomains":true}' body: encoding: UTF-8 - string: '{"successful":true,"response":{"token":"02gg1kmaafmw92ah3mgo","card_holder":"Matthew - Savage","card_number":"512345XXXXXX2346","card_expiry":"2030-02-28","card_type":"MasterCard","card_category":"Debit","card_subcategory":"PrePaid","card_issuer":"Afriland - First Bank","card_country":"Liberia","authorized":true,"transaction_count":408,"alias":null},"errors":[],"test":true}' - recorded_at: Mon, 19 Jan 2026 12:44:03 GMT -- request: - method: post - uri: https://gateway.sandbox.fatzebra.com.au/sdk/three_d_secure/setup - body: - encoding: UTF-8 - string: '{"test":true}' - headers: - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - application/json - User-Agent: - - Ruby - Authorization: - - Basic VEVTVDpURVNU - Content-Type: - - application/json - response: - status: - code: 401 - message: Unauthorized - headers: - Date: - - Mon, 19 Jan 2026 12:44:03 GMT - Content-Type: - - application/json; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - keep-alive - Status: - - 401 Unauthorized - Vary: - - Accept, Origin - X-Request-Id: - - 34e6196e5c85834f7dca11e2 - X-Runtime: - - '0.017276' - X-Backend: - - ip-10-100-34-142.ap-southeast-2.compute.internal - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - body: - encoding: UTF-8 - string: '{"error":"Unauthorized"}' - recorded_at: Mon, 19 Jan 2026 12:44:03 GMT + string: '{"successful":true,"response":{"token":"9pdv7a4pkmod2ciuzshj","card_holder":"Card + Holder","card_number":"400000XXXXXX2503","card_expiry":"2045-02-28","card_type":"VISA","card_category":"Credit","card_subcategory":"Standard","card_issuer":"Intl + Hdqtrs Center Owned","card_country":"United States","authorized":true,"transaction_count":0,"alias":null},"errors":[],"test":true}' + recorded_at: Tue, 20 Jan 2026 11:42:43 GMT recorded_with: VCR 6.3.1 diff --git a/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_invalid_input/1_2_1_1.yml b/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_invalid_input/1_2_1_1.yml deleted file mode 100644 index 732f57a..0000000 --- a/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_invalid_input/1_2_1_1.yml +++ /dev/null @@ -1,135 +0,0 @@ ---- -http_interactions: -- request: - method: post - uri: https://gateway.sandbox.fatzebra.com.au/v1.0/credit_cards - body: - encoding: UTF-8 - string: '{"card_holder":"Matthew Savage","card_number":"5123456789012346","card_expiry":"02/2030","cvv":123,"test":true}' - headers: - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - application/json - User-Agent: - - Ruby - Authorization: - - Basic VEVTVDpURVNU - Content-Type: - - application/json - response: - status: - code: 200 - message: OK - headers: - Date: - - Mon, 19 Jan 2026 12:44:04 GMT - Content-Type: - - application/json; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - keep-alive - Status: - - 200 OK - Cache-Control: - - no-store - Vary: - - Accept - Pragma: - - no-cache - X-Request-Id: - - 224d5e45050ff8786182813a - X-Runtime: - - '0.054673' - X-Backend: - - ip-10-100-34-142.ap-southeast-2.compute.internal - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - Content-Security-Policy-Report-Only: - - 'child-src ''self'' blob: *.cardinalcommerce.com fatzebra.statuspage.io; connect-src - ''self'' *.mastercard.com *.forter.com *.pmnts-staging.io *.rollbar.com *.nr-data.net - *.cardinalcommerce.com fatzebra.statuspage.io *.googleapis.com *.google-analytics.com - *.sdiapi.com *.sdiapi.net *.posthog.com; default-src ''self'' ''unsafe-eval'' - ''unsafe-inline'' *.forter.com *.nr-data.net blob: *.pmnts-sandbox.io *.rollbar.com - fatzebra.statuspage.io *.iovation.com data: *.googleapis.com *.gstatic.com - *.newrelic.com *.bootstrapcdn.com www.google.com pay.google.com *.google-analytics.com - *.gravatar.com; font-src ''self'' cdnjs.cloudflare.com data: *.gstatic.com - *.bootstrapcdn.com *.aexp-static.com; form-action ''self'' *.cardinalcommerce.com; - frame-ancestors ''self'' *.sdiapi.com *.sdiapi.net; frame-src ''self'' *.sdiapi.com - fatzebra.statuspage.io *.americanexpress.com www.google.com pay.google.com - *.masterpass.com *.visa.com *.mastercard.com *.recaptcha.net *.sdiapi.net; - img-src ''self'' *.visa.com data: *.googleapis.com *.gstatic.com masterpass.com - *.masterpass.com *.americanexpress.com *.google-analytics.com *.gravatar.com; - script-src ''self'' ''unsafe-eval'' ''unsafe-inline'' *.cdn-apple.com *.forter.com - *.nr-data.net *.pmnts-sandbox.io *.pmnts-staging.io *.rollbar.com fatzebra.statuspage.io - cdnjs.cloudflare.com *.iovation.com *.jquery.com *.newrelic.com *.googleapis.com - *.cardinalcommerce.com *.bootstrapcdn.com wasm-eval *.google-analytics.com - *.googletagmanager.com *.sdiapi.com *.sdiapi.net *.posthog.com; script-src-attr - ''unsafe-inline''; script-src-elem ''self'' ''unsafe-inline'' *.sdiapi.com - *.cdn-apple.com *.googletagmanager.com *.forter.com *.nr-data.net *.pmnts-sandbox.io - *.rollbar.com fatzebra.statuspage.io *.iovation.com *.jquery.com cdnjs.cloudflare.com - *.pmnts-staging.io *.aexp-static.com *.newrelic.com *.googleapis.com *.americanexpress.com - www.google.com pay.google.com *.visa.com *.masterpass.com *.mastercard.com - *.google-analytics.com *.gstatic.com *.bootstrapcdn.com *.sdiapi.net; style-src - ''self'' ''unsafe-eval'' ''unsafe-inline'' *.bootstrapcdn.com *.googleapis.com; - style-src-attr ''unsafe-inline''; style-src-elem ''unsafe-inline'' ''self'' - *.googleapis.com cdnjs.cloudflare.com *.bootstrapcdn.com *.mastercard.com; - worker-src blob: *.sdiapi.com *.sdiapi.net *.posthog.com; report-uri https://fatzebra.report-uri.com/r/d/csp/wizard' - Nel: - - '{"report_to":"default","max_age":31536000,"include_subdomains":true}' - Report-To: - - '{"group":"default","max_age":31536000,"endpoints":[{"url":"https://fatzebra.report-uri.com/a/d/g"}],"include_subdomains":true}' - body: - encoding: UTF-8 - string: '{"successful":true,"response":{"token":"02gg1kmaafmw92ah3mgo","card_holder":"Matthew - Savage","card_number":"512345XXXXXX2346","card_expiry":"2030-02-28","card_type":"MasterCard","card_category":"Debit","card_subcategory":"PrePaid","card_issuer":"Afriland - First Bank","card_country":"Liberia","authorized":true,"transaction_count":408,"alias":null},"errors":[],"test":true}' - recorded_at: Mon, 19 Jan 2026 12:44:04 GMT -- request: - method: post - uri: https://gateway.sandbox.fatzebra.com.au/sdk/three_d_secure/setup - body: - encoding: UTF-8 - string: '{"card_token":"02gg1kmaafmw92ah3mgo","test":true}' - headers: - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - application/json - User-Agent: - - Ruby - Authorization: - - Basic VEVTVDpURVNU - Content-Type: - - application/json - response: - status: - code: 401 - message: Unauthorized - headers: - Date: - - Mon, 19 Jan 2026 12:44:04 GMT - Content-Type: - - application/json; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - keep-alive - Status: - - 401 Unauthorized - Vary: - - Accept, Origin - X-Request-Id: - - 6cd49d0b31d09f6c17e7631d - X-Runtime: - - '0.019497' - X-Backend: - - ip-10-100-34-142.ap-southeast-2.compute.internal - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - body: - encoding: UTF-8 - string: '{"error":"Unauthorized"}' - recorded_at: Mon, 19 Jan 2026 12:44:04 GMT -recorded_with: VCR 6.3.1 diff --git a/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_invalid_input/1_2_1_2.yml b/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_invalid_input/1_2_1_2.yml deleted file mode 100644 index cf2fac9..0000000 --- a/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_invalid_input/1_2_1_2.yml +++ /dev/null @@ -1,135 +0,0 @@ ---- -http_interactions: -- request: - method: post - uri: https://gateway.sandbox.fatzebra.com.au/v1.0/credit_cards - body: - encoding: UTF-8 - string: '{"card_holder":"Matthew Savage","card_number":"5123456789012346","card_expiry":"02/2030","cvv":123,"test":true}' - headers: - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - application/json - User-Agent: - - Ruby - Authorization: - - Basic VEVTVDpURVNU - Content-Type: - - application/json - response: - status: - code: 200 - message: OK - headers: - Date: - - Mon, 19 Jan 2026 12:44:04 GMT - Content-Type: - - application/json; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - keep-alive - Status: - - 200 OK - Cache-Control: - - no-store - Vary: - - Accept - Pragma: - - no-cache - X-Request-Id: - - 10c272c9033cd00b2d7a3790 - X-Runtime: - - '0.049831' - X-Backend: - - ip-10-100-34-142.ap-southeast-2.compute.internal - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - Content-Security-Policy-Report-Only: - - 'child-src ''self'' blob: *.cardinalcommerce.com fatzebra.statuspage.io; connect-src - ''self'' *.mastercard.com *.forter.com *.pmnts-staging.io *.rollbar.com *.nr-data.net - *.cardinalcommerce.com fatzebra.statuspage.io *.googleapis.com *.google-analytics.com - *.sdiapi.com *.sdiapi.net *.posthog.com; default-src ''self'' ''unsafe-eval'' - ''unsafe-inline'' *.forter.com *.nr-data.net blob: *.pmnts-sandbox.io *.rollbar.com - fatzebra.statuspage.io *.iovation.com data: *.googleapis.com *.gstatic.com - *.newrelic.com *.bootstrapcdn.com www.google.com pay.google.com *.google-analytics.com - *.gravatar.com; font-src ''self'' cdnjs.cloudflare.com data: *.gstatic.com - *.bootstrapcdn.com *.aexp-static.com; form-action ''self'' *.cardinalcommerce.com; - frame-ancestors ''self'' *.sdiapi.com *.sdiapi.net; frame-src ''self'' *.sdiapi.com - fatzebra.statuspage.io *.americanexpress.com www.google.com pay.google.com - *.masterpass.com *.visa.com *.mastercard.com *.recaptcha.net *.sdiapi.net; - img-src ''self'' *.visa.com data: *.googleapis.com *.gstatic.com masterpass.com - *.masterpass.com *.americanexpress.com *.google-analytics.com *.gravatar.com; - script-src ''self'' ''unsafe-eval'' ''unsafe-inline'' *.cdn-apple.com *.forter.com - *.nr-data.net *.pmnts-sandbox.io *.pmnts-staging.io *.rollbar.com fatzebra.statuspage.io - cdnjs.cloudflare.com *.iovation.com *.jquery.com *.newrelic.com *.googleapis.com - *.cardinalcommerce.com *.bootstrapcdn.com wasm-eval *.google-analytics.com - *.googletagmanager.com *.sdiapi.com *.sdiapi.net *.posthog.com; script-src-attr - ''unsafe-inline''; script-src-elem ''self'' ''unsafe-inline'' *.sdiapi.com - *.cdn-apple.com *.googletagmanager.com *.forter.com *.nr-data.net *.pmnts-sandbox.io - *.rollbar.com fatzebra.statuspage.io *.iovation.com *.jquery.com cdnjs.cloudflare.com - *.pmnts-staging.io *.aexp-static.com *.newrelic.com *.googleapis.com *.americanexpress.com - www.google.com pay.google.com *.visa.com *.masterpass.com *.mastercard.com - *.google-analytics.com *.gstatic.com *.bootstrapcdn.com *.sdiapi.net; style-src - ''self'' ''unsafe-eval'' ''unsafe-inline'' *.bootstrapcdn.com *.googleapis.com; - style-src-attr ''unsafe-inline''; style-src-elem ''unsafe-inline'' ''self'' - *.googleapis.com cdnjs.cloudflare.com *.bootstrapcdn.com *.mastercard.com; - worker-src blob: *.sdiapi.com *.sdiapi.net *.posthog.com; report-uri https://fatzebra.report-uri.com/r/d/csp/wizard' - Nel: - - '{"report_to":"default","max_age":31536000,"include_subdomains":true}' - Report-To: - - '{"group":"default","max_age":31536000,"endpoints":[{"url":"https://fatzebra.report-uri.com/a/d/g"}],"include_subdomains":true}' - body: - encoding: UTF-8 - string: '{"successful":true,"response":{"token":"02gg1kmaafmw92ah3mgo","card_holder":"Matthew - Savage","card_number":"512345XXXXXX2346","card_expiry":"2030-02-28","card_type":"MasterCard","card_category":"Debit","card_subcategory":"PrePaid","card_issuer":"Afriland - First Bank","card_country":"Liberia","authorized":true,"transaction_count":408,"alias":null},"errors":[],"test":true}' - recorded_at: Mon, 19 Jan 2026 12:44:04 GMT -- request: - method: post - uri: https://gateway.sandbox.fatzebra.com.au/sdk/three_d_secure/setup - body: - encoding: UTF-8 - string: '{"card_token":"02gg1kmaafmw92ah3mgo","test":true}' - headers: - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - application/json - User-Agent: - - Ruby - Authorization: - - Basic VEVTVDpURVNU - Content-Type: - - application/json - response: - status: - code: 401 - message: Unauthorized - headers: - Date: - - Mon, 19 Jan 2026 12:44:04 GMT - Content-Type: - - application/json; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - keep-alive - Status: - - 401 Unauthorized - Vary: - - Accept, Origin - X-Request-Id: - - 507956b460095d174ba46c9f - X-Runtime: - - '0.016566' - X-Backend: - - ip-10-100-34-142.ap-southeast-2.compute.internal - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - body: - encoding: UTF-8 - string: '{"error":"Unauthorized"}' - recorded_at: Mon, 19 Jan 2026 12:44:04 GMT -recorded_with: VCR 6.3.1 diff --git a/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_invalid_input/1_2_1_3.yml b/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_invalid_input/1_2_1_3.yml deleted file mode 100644 index 933efa3..0000000 --- a/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_invalid_input/1_2_1_3.yml +++ /dev/null @@ -1,135 +0,0 @@ ---- -http_interactions: -- request: - method: post - uri: https://gateway.sandbox.fatzebra.com.au/v1.0/credit_cards - body: - encoding: UTF-8 - string: '{"card_holder":"Matthew Savage","card_number":"5123456789012346","card_expiry":"02/2030","cvv":123,"test":true}' - headers: - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - application/json - User-Agent: - - Ruby - Authorization: - - Basic VEVTVDpURVNU - Content-Type: - - application/json - response: - status: - code: 200 - message: OK - headers: - Date: - - Mon, 19 Jan 2026 12:44:05 GMT - Content-Type: - - application/json; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - keep-alive - Status: - - 200 OK - Cache-Control: - - no-store - Vary: - - Accept - Pragma: - - no-cache - X-Request-Id: - - 657ff9072dfb07e31273b2b6 - X-Runtime: - - '0.063577' - X-Backend: - - ip-10-100-34-142.ap-southeast-2.compute.internal - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - Content-Security-Policy-Report-Only: - - 'child-src ''self'' blob: *.cardinalcommerce.com fatzebra.statuspage.io; connect-src - ''self'' *.mastercard.com *.forter.com *.pmnts-staging.io *.rollbar.com *.nr-data.net - *.cardinalcommerce.com fatzebra.statuspage.io *.googleapis.com *.google-analytics.com - *.sdiapi.com *.sdiapi.net *.posthog.com; default-src ''self'' ''unsafe-eval'' - ''unsafe-inline'' *.forter.com *.nr-data.net blob: *.pmnts-sandbox.io *.rollbar.com - fatzebra.statuspage.io *.iovation.com data: *.googleapis.com *.gstatic.com - *.newrelic.com *.bootstrapcdn.com www.google.com pay.google.com *.google-analytics.com - *.gravatar.com; font-src ''self'' cdnjs.cloudflare.com data: *.gstatic.com - *.bootstrapcdn.com *.aexp-static.com; form-action ''self'' *.cardinalcommerce.com; - frame-ancestors ''self'' *.sdiapi.com *.sdiapi.net; frame-src ''self'' *.sdiapi.com - fatzebra.statuspage.io *.americanexpress.com www.google.com pay.google.com - *.masterpass.com *.visa.com *.mastercard.com *.recaptcha.net *.sdiapi.net; - img-src ''self'' *.visa.com data: *.googleapis.com *.gstatic.com masterpass.com - *.masterpass.com *.americanexpress.com *.google-analytics.com *.gravatar.com; - script-src ''self'' ''unsafe-eval'' ''unsafe-inline'' *.cdn-apple.com *.forter.com - *.nr-data.net *.pmnts-sandbox.io *.pmnts-staging.io *.rollbar.com fatzebra.statuspage.io - cdnjs.cloudflare.com *.iovation.com *.jquery.com *.newrelic.com *.googleapis.com - *.cardinalcommerce.com *.bootstrapcdn.com wasm-eval *.google-analytics.com - *.googletagmanager.com *.sdiapi.com *.sdiapi.net *.posthog.com; script-src-attr - ''unsafe-inline''; script-src-elem ''self'' ''unsafe-inline'' *.sdiapi.com - *.cdn-apple.com *.googletagmanager.com *.forter.com *.nr-data.net *.pmnts-sandbox.io - *.rollbar.com fatzebra.statuspage.io *.iovation.com *.jquery.com cdnjs.cloudflare.com - *.pmnts-staging.io *.aexp-static.com *.newrelic.com *.googleapis.com *.americanexpress.com - www.google.com pay.google.com *.visa.com *.masterpass.com *.mastercard.com - *.google-analytics.com *.gstatic.com *.bootstrapcdn.com *.sdiapi.net; style-src - ''self'' ''unsafe-eval'' ''unsafe-inline'' *.bootstrapcdn.com *.googleapis.com; - style-src-attr ''unsafe-inline''; style-src-elem ''unsafe-inline'' ''self'' - *.googleapis.com cdnjs.cloudflare.com *.bootstrapcdn.com *.mastercard.com; - worker-src blob: *.sdiapi.com *.sdiapi.net *.posthog.com; report-uri https://fatzebra.report-uri.com/r/d/csp/wizard' - Nel: - - '{"report_to":"default","max_age":31536000,"include_subdomains":true}' - Report-To: - - '{"group":"default","max_age":31536000,"endpoints":[{"url":"https://fatzebra.report-uri.com/a/d/g"}],"include_subdomains":true}' - body: - encoding: UTF-8 - string: '{"successful":true,"response":{"token":"02gg1kmaafmw92ah3mgo","card_holder":"Matthew - Savage","card_number":"512345XXXXXX2346","card_expiry":"2030-02-28","card_type":"MasterCard","card_category":"Debit","card_subcategory":"PrePaid","card_issuer":"Afriland - First Bank","card_country":"Liberia","authorized":true,"transaction_count":408,"alias":null},"errors":[],"test":true}' - recorded_at: Mon, 19 Jan 2026 12:44:04 GMT -- request: - method: post - uri: https://gateway.sandbox.fatzebra.com.au/sdk/three_d_secure/setup - body: - encoding: UTF-8 - string: '{"card_token":"02gg1kmaafmw92ah3mgo","test":true}' - headers: - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - application/json - User-Agent: - - Ruby - Authorization: - - Basic VEVTVDpURVNU - Content-Type: - - application/json - response: - status: - code: 401 - message: Unauthorized - headers: - Date: - - Mon, 19 Jan 2026 12:44:05 GMT - Content-Type: - - application/json; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - keep-alive - Status: - - 401 Unauthorized - Vary: - - Accept, Origin - X-Request-Id: - - 31785e046a59969439b1b212 - X-Runtime: - - '0.025101' - X-Backend: - - ip-10-100-34-142.ap-southeast-2.compute.internal - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - body: - encoding: UTF-8 - string: '{"error":"Unauthorized"}' - recorded_at: Mon, 19 Jan 2026 12:44:05 GMT -recorded_with: VCR 6.3.1 diff --git a/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_invalid_input/1_2_1_4.yml b/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_invalid_input/1_2_1_4.yml deleted file mode 100644 index fef7974..0000000 --- a/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_invalid_input/1_2_1_4.yml +++ /dev/null @@ -1,135 +0,0 @@ ---- -http_interactions: -- request: - method: post - uri: https://gateway.sandbox.fatzebra.com.au/v1.0/credit_cards - body: - encoding: UTF-8 - string: '{"card_holder":"Matthew Savage","card_number":"5123456789012346","card_expiry":"02/2030","cvv":123,"test":true}' - headers: - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - application/json - User-Agent: - - Ruby - Authorization: - - Basic VEVTVDpURVNU - Content-Type: - - application/json - response: - status: - code: 200 - message: OK - headers: - Date: - - Mon, 19 Jan 2026 12:44:05 GMT - Content-Type: - - application/json; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - keep-alive - Status: - - 200 OK - Cache-Control: - - no-store - Vary: - - Accept - Pragma: - - no-cache - X-Request-Id: - - 421b34b416cfd83b501a8213 - X-Runtime: - - '0.051102' - X-Backend: - - ip-10-100-34-142.ap-southeast-2.compute.internal - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - Content-Security-Policy-Report-Only: - - 'child-src ''self'' blob: *.cardinalcommerce.com fatzebra.statuspage.io; connect-src - ''self'' *.mastercard.com *.forter.com *.pmnts-staging.io *.rollbar.com *.nr-data.net - *.cardinalcommerce.com fatzebra.statuspage.io *.googleapis.com *.google-analytics.com - *.sdiapi.com *.sdiapi.net *.posthog.com; default-src ''self'' ''unsafe-eval'' - ''unsafe-inline'' *.forter.com *.nr-data.net blob: *.pmnts-sandbox.io *.rollbar.com - fatzebra.statuspage.io *.iovation.com data: *.googleapis.com *.gstatic.com - *.newrelic.com *.bootstrapcdn.com www.google.com pay.google.com *.google-analytics.com - *.gravatar.com; font-src ''self'' cdnjs.cloudflare.com data: *.gstatic.com - *.bootstrapcdn.com *.aexp-static.com; form-action ''self'' *.cardinalcommerce.com; - frame-ancestors ''self'' *.sdiapi.com *.sdiapi.net; frame-src ''self'' *.sdiapi.com - fatzebra.statuspage.io *.americanexpress.com www.google.com pay.google.com - *.masterpass.com *.visa.com *.mastercard.com *.recaptcha.net *.sdiapi.net; - img-src ''self'' *.visa.com data: *.googleapis.com *.gstatic.com masterpass.com - *.masterpass.com *.americanexpress.com *.google-analytics.com *.gravatar.com; - script-src ''self'' ''unsafe-eval'' ''unsafe-inline'' *.cdn-apple.com *.forter.com - *.nr-data.net *.pmnts-sandbox.io *.pmnts-staging.io *.rollbar.com fatzebra.statuspage.io - cdnjs.cloudflare.com *.iovation.com *.jquery.com *.newrelic.com *.googleapis.com - *.cardinalcommerce.com *.bootstrapcdn.com wasm-eval *.google-analytics.com - *.googletagmanager.com *.sdiapi.com *.sdiapi.net *.posthog.com; script-src-attr - ''unsafe-inline''; script-src-elem ''self'' ''unsafe-inline'' *.sdiapi.com - *.cdn-apple.com *.googletagmanager.com *.forter.com *.nr-data.net *.pmnts-sandbox.io - *.rollbar.com fatzebra.statuspage.io *.iovation.com *.jquery.com cdnjs.cloudflare.com - *.pmnts-staging.io *.aexp-static.com *.newrelic.com *.googleapis.com *.americanexpress.com - www.google.com pay.google.com *.visa.com *.masterpass.com *.mastercard.com - *.google-analytics.com *.gstatic.com *.bootstrapcdn.com *.sdiapi.net; style-src - ''self'' ''unsafe-eval'' ''unsafe-inline'' *.bootstrapcdn.com *.googleapis.com; - style-src-attr ''unsafe-inline''; style-src-elem ''unsafe-inline'' ''self'' - *.googleapis.com cdnjs.cloudflare.com *.bootstrapcdn.com *.mastercard.com; - worker-src blob: *.sdiapi.com *.sdiapi.net *.posthog.com; report-uri https://fatzebra.report-uri.com/r/d/csp/wizard' - Nel: - - '{"report_to":"default","max_age":31536000,"include_subdomains":true}' - Report-To: - - '{"group":"default","max_age":31536000,"endpoints":[{"url":"https://fatzebra.report-uri.com/a/d/g"}],"include_subdomains":true}' - body: - encoding: UTF-8 - string: '{"successful":true,"response":{"token":"02gg1kmaafmw92ah3mgo","card_holder":"Matthew - Savage","card_number":"512345XXXXXX2346","card_expiry":"2030-02-28","card_type":"MasterCard","card_category":"Debit","card_subcategory":"PrePaid","card_issuer":"Afriland - First Bank","card_country":"Liberia","authorized":true,"transaction_count":408,"alias":null},"errors":[],"test":true}' - recorded_at: Mon, 19 Jan 2026 12:44:05 GMT -- request: - method: post - uri: https://gateway.sandbox.fatzebra.com.au/sdk/three_d_secure/setup - body: - encoding: UTF-8 - string: '{"card_token":"02gg1kmaafmw92ah3mgo","test":true}' - headers: - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - application/json - User-Agent: - - Ruby - Authorization: - - Basic VEVTVDpURVNU - Content-Type: - - application/json - response: - status: - code: 401 - message: Unauthorized - headers: - Date: - - Mon, 19 Jan 2026 12:44:05 GMT - Content-Type: - - application/json; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - keep-alive - Status: - - 401 Unauthorized - Vary: - - Accept, Origin - X-Request-Id: - - 670de57b57d441c40ae87732 - X-Runtime: - - '0.040574' - X-Backend: - - ip-10-100-34-142.ap-southeast-2.compute.internal - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - body: - encoding: UTF-8 - string: '{"error":"Unauthorized"}' - recorded_at: Mon, 19 Jan 2026 12:44:05 GMT -recorded_with: VCR 6.3.1 diff --git a/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_invalid_input/1_2_1_5.yml b/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_invalid_input/1_2_1_5.yml deleted file mode 100644 index db34442..0000000 --- a/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_invalid_input/1_2_1_5.yml +++ /dev/null @@ -1,135 +0,0 @@ ---- -http_interactions: -- request: - method: post - uri: https://gateway.sandbox.fatzebra.com.au/v1.0/credit_cards - body: - encoding: UTF-8 - string: '{"card_holder":"Matthew Savage","card_number":"5123456789012346","card_expiry":"02/2030","cvv":123,"test":true}' - headers: - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - application/json - User-Agent: - - Ruby - Authorization: - - Basic VEVTVDpURVNU - Content-Type: - - application/json - response: - status: - code: 200 - message: OK - headers: - Date: - - Mon, 19 Jan 2026 12:44:05 GMT - Content-Type: - - application/json; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - keep-alive - Status: - - 200 OK - Cache-Control: - - no-store - Vary: - - Accept - Pragma: - - no-cache - X-Request-Id: - - 6ccde61403c5b76756c9aecb - X-Runtime: - - '0.095471' - X-Backend: - - ip-10-100-34-142.ap-southeast-2.compute.internal - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - Content-Security-Policy-Report-Only: - - 'child-src ''self'' blob: *.cardinalcommerce.com fatzebra.statuspage.io; connect-src - ''self'' *.mastercard.com *.forter.com *.pmnts-staging.io *.rollbar.com *.nr-data.net - *.cardinalcommerce.com fatzebra.statuspage.io *.googleapis.com *.google-analytics.com - *.sdiapi.com *.sdiapi.net *.posthog.com; default-src ''self'' ''unsafe-eval'' - ''unsafe-inline'' *.forter.com *.nr-data.net blob: *.pmnts-sandbox.io *.rollbar.com - fatzebra.statuspage.io *.iovation.com data: *.googleapis.com *.gstatic.com - *.newrelic.com *.bootstrapcdn.com www.google.com pay.google.com *.google-analytics.com - *.gravatar.com; font-src ''self'' cdnjs.cloudflare.com data: *.gstatic.com - *.bootstrapcdn.com *.aexp-static.com; form-action ''self'' *.cardinalcommerce.com; - frame-ancestors ''self'' *.sdiapi.com *.sdiapi.net; frame-src ''self'' *.sdiapi.com - fatzebra.statuspage.io *.americanexpress.com www.google.com pay.google.com - *.masterpass.com *.visa.com *.mastercard.com *.recaptcha.net *.sdiapi.net; - img-src ''self'' *.visa.com data: *.googleapis.com *.gstatic.com masterpass.com - *.masterpass.com *.americanexpress.com *.google-analytics.com *.gravatar.com; - script-src ''self'' ''unsafe-eval'' ''unsafe-inline'' *.cdn-apple.com *.forter.com - *.nr-data.net *.pmnts-sandbox.io *.pmnts-staging.io *.rollbar.com fatzebra.statuspage.io - cdnjs.cloudflare.com *.iovation.com *.jquery.com *.newrelic.com *.googleapis.com - *.cardinalcommerce.com *.bootstrapcdn.com wasm-eval *.google-analytics.com - *.googletagmanager.com *.sdiapi.com *.sdiapi.net *.posthog.com; script-src-attr - ''unsafe-inline''; script-src-elem ''self'' ''unsafe-inline'' *.sdiapi.com - *.cdn-apple.com *.googletagmanager.com *.forter.com *.nr-data.net *.pmnts-sandbox.io - *.rollbar.com fatzebra.statuspage.io *.iovation.com *.jquery.com cdnjs.cloudflare.com - *.pmnts-staging.io *.aexp-static.com *.newrelic.com *.googleapis.com *.americanexpress.com - www.google.com pay.google.com *.visa.com *.masterpass.com *.mastercard.com - *.google-analytics.com *.gstatic.com *.bootstrapcdn.com *.sdiapi.net; style-src - ''self'' ''unsafe-eval'' ''unsafe-inline'' *.bootstrapcdn.com *.googleapis.com; - style-src-attr ''unsafe-inline''; style-src-elem ''unsafe-inline'' ''self'' - *.googleapis.com cdnjs.cloudflare.com *.bootstrapcdn.com *.mastercard.com; - worker-src blob: *.sdiapi.com *.sdiapi.net *.posthog.com; report-uri https://fatzebra.report-uri.com/r/d/csp/wizard' - Nel: - - '{"report_to":"default","max_age":31536000,"include_subdomains":true}' - Report-To: - - '{"group":"default","max_age":31536000,"endpoints":[{"url":"https://fatzebra.report-uri.com/a/d/g"}],"include_subdomains":true}' - body: - encoding: UTF-8 - string: '{"successful":true,"response":{"token":"02gg1kmaafmw92ah3mgo","card_holder":"Matthew - Savage","card_number":"512345XXXXXX2346","card_expiry":"2030-02-28","card_type":"MasterCard","card_category":"Debit","card_subcategory":"PrePaid","card_issuer":"Afriland - First Bank","card_country":"Liberia","authorized":true,"transaction_count":408,"alias":null},"errors":[],"test":true}' - recorded_at: Mon, 19 Jan 2026 12:44:05 GMT -- request: - method: post - uri: https://gateway.sandbox.fatzebra.com.au/sdk/three_d_secure/setup - body: - encoding: UTF-8 - string: '{"card_token":"02gg1kmaafmw92ah3mgo","test":true}' - headers: - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - application/json - User-Agent: - - Ruby - Authorization: - - Basic VEVTVDpURVNU - Content-Type: - - application/json - response: - status: - code: 401 - message: Unauthorized - headers: - Date: - - Mon, 19 Jan 2026 12:44:05 GMT - Content-Type: - - application/json; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - keep-alive - Status: - - 401 Unauthorized - Vary: - - Accept, Origin - X-Request-Id: - - 1fb8a9a3502abf2331f573b1 - X-Runtime: - - '0.015464' - X-Backend: - - ip-10-100-34-142.ap-southeast-2.compute.internal - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - body: - encoding: UTF-8 - string: '{"error":"Unauthorized"}' - recorded_at: Mon, 19 Jan 2026 12:44:05 GMT -recorded_with: VCR 6.3.1 diff --git a/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_invalid_input/1_2_1_6.yml b/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_invalid_input/1_2_1_6.yml deleted file mode 100644 index b3d7687..0000000 --- a/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_invalid_input/1_2_1_6.yml +++ /dev/null @@ -1,135 +0,0 @@ ---- -http_interactions: -- request: - method: post - uri: https://gateway.sandbox.fatzebra.com.au/v1.0/credit_cards - body: - encoding: UTF-8 - string: '{"card_holder":"Matthew Savage","card_number":"5123456789012346","card_expiry":"02/2030","cvv":123,"test":true}' - headers: - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - application/json - User-Agent: - - Ruby - Authorization: - - Basic VEVTVDpURVNU - Content-Type: - - application/json - response: - status: - code: 200 - message: OK - headers: - Date: - - Mon, 19 Jan 2026 12:44:05 GMT - Content-Type: - - application/json; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - keep-alive - Status: - - 200 OK - Cache-Control: - - no-store - Vary: - - Accept - X-Runtime: - - '0.049430' - Pragma: - - no-cache - X-Request-Id: - - 4cf6c4a32eba7fc973b3364a - X-Backend: - - ip-10-100-34-142.ap-southeast-2.compute.internal - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - Content-Security-Policy-Report-Only: - - 'child-src ''self'' blob: *.cardinalcommerce.com fatzebra.statuspage.io; connect-src - ''self'' *.mastercard.com *.forter.com *.pmnts-staging.io *.rollbar.com *.nr-data.net - *.cardinalcommerce.com fatzebra.statuspage.io *.googleapis.com *.google-analytics.com - *.sdiapi.com *.sdiapi.net *.posthog.com; default-src ''self'' ''unsafe-eval'' - ''unsafe-inline'' *.forter.com *.nr-data.net blob: *.pmnts-sandbox.io *.rollbar.com - fatzebra.statuspage.io *.iovation.com data: *.googleapis.com *.gstatic.com - *.newrelic.com *.bootstrapcdn.com www.google.com pay.google.com *.google-analytics.com - *.gravatar.com; font-src ''self'' cdnjs.cloudflare.com data: *.gstatic.com - *.bootstrapcdn.com *.aexp-static.com; form-action ''self'' *.cardinalcommerce.com; - frame-ancestors ''self'' *.sdiapi.com *.sdiapi.net; frame-src ''self'' *.sdiapi.com - fatzebra.statuspage.io *.americanexpress.com www.google.com pay.google.com - *.masterpass.com *.visa.com *.mastercard.com *.recaptcha.net *.sdiapi.net; - img-src ''self'' *.visa.com data: *.googleapis.com *.gstatic.com masterpass.com - *.masterpass.com *.americanexpress.com *.google-analytics.com *.gravatar.com; - script-src ''self'' ''unsafe-eval'' ''unsafe-inline'' *.cdn-apple.com *.forter.com - *.nr-data.net *.pmnts-sandbox.io *.pmnts-staging.io *.rollbar.com fatzebra.statuspage.io - cdnjs.cloudflare.com *.iovation.com *.jquery.com *.newrelic.com *.googleapis.com - *.cardinalcommerce.com *.bootstrapcdn.com wasm-eval *.google-analytics.com - *.googletagmanager.com *.sdiapi.com *.sdiapi.net *.posthog.com; script-src-attr - ''unsafe-inline''; script-src-elem ''self'' ''unsafe-inline'' *.sdiapi.com - *.cdn-apple.com *.googletagmanager.com *.forter.com *.nr-data.net *.pmnts-sandbox.io - *.rollbar.com fatzebra.statuspage.io *.iovation.com *.jquery.com cdnjs.cloudflare.com - *.pmnts-staging.io *.aexp-static.com *.newrelic.com *.googleapis.com *.americanexpress.com - www.google.com pay.google.com *.visa.com *.masterpass.com *.mastercard.com - *.google-analytics.com *.gstatic.com *.bootstrapcdn.com *.sdiapi.net; style-src - ''self'' ''unsafe-eval'' ''unsafe-inline'' *.bootstrapcdn.com *.googleapis.com; - style-src-attr ''unsafe-inline''; style-src-elem ''unsafe-inline'' ''self'' - *.googleapis.com cdnjs.cloudflare.com *.bootstrapcdn.com *.mastercard.com; - worker-src blob: *.sdiapi.com *.sdiapi.net *.posthog.com; report-uri https://fatzebra.report-uri.com/r/d/csp/wizard' - Nel: - - '{"report_to":"default","max_age":31536000,"include_subdomains":true}' - Report-To: - - '{"group":"default","max_age":31536000,"endpoints":[{"url":"https://fatzebra.report-uri.com/a/d/g"}],"include_subdomains":true}' - body: - encoding: UTF-8 - string: '{"successful":true,"response":{"token":"02gg1kmaafmw92ah3mgo","card_holder":"Matthew - Savage","card_number":"512345XXXXXX2346","card_expiry":"2030-02-28","card_type":"MasterCard","card_category":"Debit","card_subcategory":"PrePaid","card_issuer":"Afriland - First Bank","card_country":"Liberia","authorized":true,"transaction_count":408,"alias":null},"errors":[],"test":true}' - recorded_at: Mon, 19 Jan 2026 12:44:05 GMT -- request: - method: post - uri: https://gateway.sandbox.fatzebra.com.au/sdk/three_d_secure/setup - body: - encoding: UTF-8 - string: '{"card_token":"02gg1kmaafmw92ah3mgo","test":true}' - headers: - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - application/json - User-Agent: - - Ruby - Authorization: - - Basic VEVTVDpURVNU - Content-Type: - - application/json - response: - status: - code: 401 - message: Unauthorized - headers: - Date: - - Mon, 19 Jan 2026 12:44:05 GMT - Content-Type: - - application/json; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - keep-alive - Status: - - 401 Unauthorized - Vary: - - Accept, Origin - X-Request-Id: - - 633bc600395285df2900d5b9 - X-Runtime: - - '0.033669' - X-Backend: - - ip-10-100-34-142.ap-southeast-2.compute.internal - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - body: - encoding: UTF-8 - string: '{"error":"Unauthorized"}' - recorded_at: Mon, 19 Jan 2026 12:44:05 GMT -recorded_with: VCR 6.3.1 diff --git a/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_valid_input/1_2_1_1.yml b/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_valid_input/1_2_1_1.yml new file mode 100644 index 0000000..1e204f4 --- /dev/null +++ b/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_valid_input/1_2_1_1.yml @@ -0,0 +1,257 @@ +--- +http_interactions: +- request: + method: post + uri: https://gateway.sandbox.fatzebra.com.au/v1.0/credit_cards + body: + encoding: UTF-8 + string: '{"card_holder":"Card Holder","card_number":"4000000000002503","card_expiry":"02/2045","cvv":123,"test":true}' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - application/json + User-Agent: + - Ruby + Authorization: + - Basic VEVTVDpURVNU + Content-Type: + - application/json + response: + status: + code: 200 + message: OK + headers: + Date: + - Tue, 20 Jan 2026 11:42:39 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 200 OK + Cache-Control: + - no-store + Vary: + - Accept + Pragma: + - no-cache + X-Request-Id: + - 322a058b06dfda0607a40967 + X-Runtime: + - '0.030946' + X-Backend: + - ip-10-100-22-12.ap-southeast-2.compute.internal + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + Content-Security-Policy-Report-Only: + - 'child-src ''self'' blob: *.cardinalcommerce.com fatzebra.statuspage.io; connect-src + ''self'' *.mastercard.com *.forter.com *.pmnts-staging.io *.rollbar.com *.nr-data.net + *.cardinalcommerce.com fatzebra.statuspage.io *.googleapis.com *.google-analytics.com + *.sdiapi.com *.sdiapi.net *.posthog.com; default-src ''self'' ''unsafe-eval'' + ''unsafe-inline'' *.forter.com *.nr-data.net blob: *.pmnts-sandbox.io *.rollbar.com + fatzebra.statuspage.io *.iovation.com data: *.googleapis.com *.gstatic.com + *.newrelic.com *.bootstrapcdn.com www.google.com pay.google.com *.google-analytics.com + *.gravatar.com; font-src ''self'' cdnjs.cloudflare.com data: *.gstatic.com + *.bootstrapcdn.com *.aexp-static.com; form-action ''self'' *.cardinalcommerce.com; + frame-ancestors ''self'' *.sdiapi.com *.sdiapi.net; frame-src ''self'' *.sdiapi.com + fatzebra.statuspage.io *.americanexpress.com www.google.com pay.google.com + *.masterpass.com *.visa.com *.mastercard.com *.recaptcha.net *.sdiapi.net; + img-src ''self'' *.visa.com data: *.googleapis.com *.gstatic.com masterpass.com + *.masterpass.com *.americanexpress.com *.google-analytics.com *.gravatar.com; + script-src ''self'' ''unsafe-eval'' ''unsafe-inline'' *.cdn-apple.com *.forter.com + *.nr-data.net *.pmnts-sandbox.io *.pmnts-staging.io *.rollbar.com fatzebra.statuspage.io + cdnjs.cloudflare.com *.iovation.com *.jquery.com *.newrelic.com *.googleapis.com + *.cardinalcommerce.com *.bootstrapcdn.com wasm-eval *.google-analytics.com + *.googletagmanager.com *.sdiapi.com *.sdiapi.net *.posthog.com; script-src-attr + ''unsafe-inline''; script-src-elem ''self'' ''unsafe-inline'' *.sdiapi.com + *.cdn-apple.com *.googletagmanager.com *.forter.com *.nr-data.net *.pmnts-sandbox.io + *.rollbar.com fatzebra.statuspage.io *.iovation.com *.jquery.com cdnjs.cloudflare.com + *.pmnts-staging.io *.aexp-static.com *.newrelic.com *.googleapis.com *.americanexpress.com + www.google.com pay.google.com *.visa.com *.masterpass.com *.mastercard.com + *.google-analytics.com *.gstatic.com *.bootstrapcdn.com *.sdiapi.net; style-src + ''self'' ''unsafe-eval'' ''unsafe-inline'' *.bootstrapcdn.com *.googleapis.com; + style-src-attr ''unsafe-inline''; style-src-elem ''unsafe-inline'' ''self'' + *.googleapis.com cdnjs.cloudflare.com *.bootstrapcdn.com *.mastercard.com; + worker-src blob: *.sdiapi.com *.sdiapi.net *.posthog.com; report-uri https://fatzebra.report-uri.com/r/d/csp/wizard' + Nel: + - '{"report_to":"default","max_age":31536000,"include_subdomains":true}' + Report-To: + - '{"group":"default","max_age":31536000,"endpoints":[{"url":"https://fatzebra.report-uri.com/a/d/g"}],"include_subdomains":true}' + body: + encoding: UTF-8 + string: '{"successful":true,"response":{"token":"9pdv7a4pkmod2ciuzshj","card_holder":"Card + Holder","card_number":"400000XXXXXX2503","card_expiry":"2045-02-28","card_type":"VISA","card_category":"Credit","card_subcategory":"Standard","card_issuer":"Intl + Hdqtrs Center Owned","card_country":"United States","authorized":true,"transaction_count":0,"alias":null},"errors":[],"test":true}' + recorded_at: Tue, 20 Jan 2026 11:42:39 GMT +- request: + method: post + uri: https://gateway.sandbox.fatzebra.com.au/sdk/three_d_secure/setup + body: + encoding: UTF-8 + string: '{"card_token":"9pdv7a4pkmod2ciuzshj","test":true}' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - application/json + User-Agent: + - Ruby + Authorization: + - Basic VEVTVDpURVNU + Content-Type: + - application/json + response: + status: + code: 200 + message: OK + headers: + Date: + - Tue, 20 Jan 2026 11:42:40 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 200 OK + Cache-Control: + - no-store + Vary: + - Accept, Origin + Pragma: + - no-cache + X-Request-Id: + - 106a5bfe1f7ea67a0b8269dc + X-Runtime: + - '0.594266' + X-Backend: + - ip-10-100-22-12.ap-southeast-2.compute.internal + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + Content-Security-Policy-Report-Only: + - 'child-src ''self'' blob: *.cardinalcommerce.com fatzebra.statuspage.io; connect-src + ''self'' *.mastercard.com *.forter.com *.pmnts-staging.io *.rollbar.com *.nr-data.net + *.cardinalcommerce.com fatzebra.statuspage.io *.googleapis.com *.google-analytics.com + *.sdiapi.com *.sdiapi.net *.posthog.com; default-src ''self'' ''unsafe-eval'' + ''unsafe-inline'' *.forter.com *.nr-data.net blob: *.pmnts-sandbox.io *.rollbar.com + fatzebra.statuspage.io *.iovation.com data: *.googleapis.com *.gstatic.com + *.newrelic.com *.bootstrapcdn.com www.google.com pay.google.com *.google-analytics.com + *.gravatar.com; font-src ''self'' cdnjs.cloudflare.com data: *.gstatic.com + *.bootstrapcdn.com *.aexp-static.com; form-action ''self'' *.cardinalcommerce.com; + frame-ancestors ''self'' *.sdiapi.com *.sdiapi.net; frame-src ''self'' *.sdiapi.com + fatzebra.statuspage.io *.americanexpress.com www.google.com pay.google.com + *.masterpass.com *.visa.com *.mastercard.com *.recaptcha.net *.sdiapi.net; + img-src ''self'' *.visa.com data: *.googleapis.com *.gstatic.com masterpass.com + *.masterpass.com *.americanexpress.com *.google-analytics.com *.gravatar.com; + script-src ''self'' ''unsafe-eval'' ''unsafe-inline'' *.cdn-apple.com *.forter.com + *.nr-data.net *.pmnts-sandbox.io *.pmnts-staging.io *.rollbar.com fatzebra.statuspage.io + cdnjs.cloudflare.com *.iovation.com *.jquery.com *.newrelic.com *.googleapis.com + *.cardinalcommerce.com *.bootstrapcdn.com wasm-eval *.google-analytics.com + *.googletagmanager.com *.sdiapi.com *.sdiapi.net *.posthog.com; script-src-attr + ''unsafe-inline''; script-src-elem ''self'' ''unsafe-inline'' *.sdiapi.com + *.cdn-apple.com *.googletagmanager.com *.forter.com *.nr-data.net *.pmnts-sandbox.io + *.rollbar.com fatzebra.statuspage.io *.iovation.com *.jquery.com cdnjs.cloudflare.com + *.pmnts-staging.io *.aexp-static.com *.newrelic.com *.googleapis.com *.americanexpress.com + www.google.com pay.google.com *.visa.com *.masterpass.com *.mastercard.com + *.google-analytics.com *.gstatic.com *.bootstrapcdn.com *.sdiapi.net; style-src + ''self'' ''unsafe-eval'' ''unsafe-inline'' *.bootstrapcdn.com *.googleapis.com; + style-src-attr ''unsafe-inline''; style-src-elem ''unsafe-inline'' ''self'' + *.googleapis.com cdnjs.cloudflare.com *.bootstrapcdn.com *.mastercard.com; + worker-src blob: *.sdiapi.com *.sdiapi.net *.posthog.com; report-uri https://fatzebra.report-uri.com/r/d/csp/wizard' + Nel: + - '{"report_to":"default","max_age":31536000,"include_subdomains":true}' + Report-To: + - '{"group":"default","max_age":31536000,"endpoints":[{"url":"https://fatzebra.report-uri.com/a/d/g"}],"include_subdomains":true}' + body: + encoding: UTF-8 + string: '{"access_token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIwN2I3MzczMS1kNTY1LTQyNzUtYjM1Yi0zN2Y4NWNlOTJlNjkiLCJpYXQiOjE3Njg5MDkzNjAsImlzcyI6IjVkZDgzYmYwMGU0MjNkMTQ5OGRjYmFjYSIsImV4cCI6MTc2ODkxMjk2MCwiT3JnVW5pdElkIjoiNjE5ZDU1OTVlNGMxZGE1NTAzNmFjMTViIiwiUmVmZXJlbmNlSWQiOiJjNzdlNjkxMS1kZDhmLTQ4NmUtOTdjNS1jN2JlZGQ3ZjIzZDQifQ.Wo5yr-JSXYT80Cx2RHKhIJrLw5rsKhktvi6zEuoLQAw","device_data_collection_url":"https://centinelapistag.cardinalcommerce.com/V1/Cruise/Collect","reference_id":"c77e6911-dd8f-486e-97c5-c7bedd7f23d4"}' + recorded_at: Tue, 20 Jan 2026 11:42:40 GMT +- request: + method: post + uri: https://gateway.sandbox.fatzebra.com.au/sdk/three_d_secure/check_enrollment + body: + encoding: UTF-8 + string: '{"merchant_username":"TEST ","card_token":"9pdv7a4pkmod2ciuzshj","amount":100,"currency":"AUD","reference":"ref-cbc06c715840","verification":"123","device_channel":"BROWSER","reference_id":"c77e6911-dd8f-486e-97c5-c7bedd7f23d4","return_url":"https://example.com/3ds/return","acs_window_size":"05","browser_accept_content":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8","browser_language":"en-AU","browser_java_enabled":false,"browser_color_depth":24,"browser_screen_height":1080,"browser_screen_width":1920,"browser_time_difference":0,"browser_user_agent":"RSpec","test":true}' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - application/json + User-Agent: + - Ruby + Authorization: + - Basic VEVTVDpURVNU + Content-Type: + - application/json + response: + status: + code: 200 + message: OK + headers: + Date: + - Tue, 20 Jan 2026 11:42:41 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 200 OK + Cache-Control: + - no-store + Vary: + - Accept, Origin + Pragma: + - no-cache + X-Request-Id: + - 50bdd1637ccaee20423e95e0 + X-Runtime: + - '0.579820' + X-Backend: + - ip-10-100-22-12.ap-southeast-2.compute.internal + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + Content-Security-Policy-Report-Only: + - 'child-src ''self'' blob: *.cardinalcommerce.com fatzebra.statuspage.io; connect-src + ''self'' *.mastercard.com *.forter.com *.pmnts-staging.io *.rollbar.com *.nr-data.net + *.cardinalcommerce.com fatzebra.statuspage.io *.googleapis.com *.google-analytics.com + *.sdiapi.com *.sdiapi.net *.posthog.com; default-src ''self'' ''unsafe-eval'' + ''unsafe-inline'' *.forter.com *.nr-data.net blob: *.pmnts-sandbox.io *.rollbar.com + fatzebra.statuspage.io *.iovation.com data: *.googleapis.com *.gstatic.com + *.newrelic.com *.bootstrapcdn.com www.google.com pay.google.com *.google-analytics.com + *.gravatar.com; font-src ''self'' cdnjs.cloudflare.com data: *.gstatic.com + *.bootstrapcdn.com *.aexp-static.com; form-action ''self'' *.cardinalcommerce.com; + frame-ancestors ''self'' *.sdiapi.com *.sdiapi.net; frame-src ''self'' *.sdiapi.com + fatzebra.statuspage.io *.americanexpress.com www.google.com pay.google.com + *.masterpass.com *.visa.com *.mastercard.com *.recaptcha.net *.sdiapi.net; + img-src ''self'' *.visa.com data: *.googleapis.com *.gstatic.com masterpass.com + *.masterpass.com *.americanexpress.com *.google-analytics.com *.gravatar.com; + script-src ''self'' ''unsafe-eval'' ''unsafe-inline'' *.cdn-apple.com *.forter.com + *.nr-data.net *.pmnts-sandbox.io *.pmnts-staging.io *.rollbar.com fatzebra.statuspage.io + cdnjs.cloudflare.com *.iovation.com *.jquery.com *.newrelic.com *.googleapis.com + *.cardinalcommerce.com *.bootstrapcdn.com wasm-eval *.google-analytics.com + *.googletagmanager.com *.sdiapi.com *.sdiapi.net *.posthog.com; script-src-attr + ''unsafe-inline''; script-src-elem ''self'' ''unsafe-inline'' *.sdiapi.com + *.cdn-apple.com *.googletagmanager.com *.forter.com *.nr-data.net *.pmnts-sandbox.io + *.rollbar.com fatzebra.statuspage.io *.iovation.com *.jquery.com cdnjs.cloudflare.com + *.pmnts-staging.io *.aexp-static.com *.newrelic.com *.googleapis.com *.americanexpress.com + www.google.com pay.google.com *.visa.com *.masterpass.com *.mastercard.com + *.google-analytics.com *.gstatic.com *.bootstrapcdn.com *.sdiapi.net; style-src + ''self'' ''unsafe-eval'' ''unsafe-inline'' *.bootstrapcdn.com *.googleapis.com; + style-src-attr ''unsafe-inline''; style-src-elem ''unsafe-inline'' ''self'' + *.googleapis.com cdnjs.cloudflare.com *.bootstrapcdn.com *.mastercard.com; + worker-src blob: *.sdiapi.com *.sdiapi.net *.posthog.com; report-uri https://fatzebra.report-uri.com/r/d/csp/wizard' + Nel: + - '{"report_to":"default","max_age":31536000,"include_subdomains":true}' + Report-To: + - '{"group":"default","max_age":31536000,"endpoints":[{"url":"https://fatzebra.report-uri.com/a/d/g"}],"include_subdomains":true}' + body: + encoding: UTF-8 + string: '{"veres":"Y","pares":"C","eci":null,"cavv":null,"xid":null,"directory_server_transaction_id":"f774ae83-2520-4cee-8d67-793d193a1b73","specification_version":"2.2.0","step_up_url":"https://centinelapistag.cardinalcommerce.com/V2/Cruise/StepUp","access_token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI1OGFlNDdkOS01NjMxLTRmOTMtOTYzOC1kOWQyYzczYTc5YzIiLCJpYXQiOjE3Njg5MDkzNjAsImlzcyI6IjVkZDgzYmYwMGU0MjNkMTQ5OGRjYmFjYSIsImV4cCI6MTc2ODkxMjk2MCwiT3JnVW5pdElkIjoiNjE5ZDU1OTVlNGMxZGE1NTAzNmFjMTViIiwiUGF5bG9hZCI6eyJBQ1NVcmwiOiJodHRwczovLzBtZXJjaGFudGFjc3N0YWcuY2FyZGluYWxjb21tZXJjZS5jb20vTWVyY2hhbnRBQ1NXZWIvY3JlcS5qc3AiLCJQYXlsb2FkIjoiZXlKdFpYTnpZV2RsVkhsd1pTSTZJa05TWlhFaUxDSnRaWE56WVdkbFZtVnljMmx2YmlJNklqSXVNaTR3SWl3aWRHaHlaV1ZFVTFObGNuWmxjbFJ5WVc1elNVUWlPaUl6TmprME5tWmxOUzFpWWpGbExUUTNNall0WW1RNE1TMHdNRGhpTmpJeFptUTRaV0VpTENKaFkzTlVjbUZ1YzBsRUlqb2lNekUxWVdZNFlUSXRZV0UzTWkwME1HSmlMV0U1TldVdE9XSmtZV0k0T0dabVpESXlJaXdpWTJoaGJHeGxibWRsVjJsdVpHOTNVMmw2WlNJNklqQTFJbjAiLCJUcmFuc2FjdGlvbklkIjoiMDNlUzdwQVptUlRhQ29zSlVVdzAifSwiT2JqZWN0aWZ5UGF5bG9hZCI6dHJ1ZSwiUmV0dXJuVXJsIjoiaHR0cHM6Ly9leGFtcGxlLmNvbS8zZHMvcmV0dXJuIn0.okPtreuFNQtc83pjbsSlpgUgc_-phGcWKF80be8b6Fo"}' + recorded_at: Tue, 20 Jan 2026 11:42:41 GMT +recorded_with: VCR 6.3.1 diff --git a/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_valid_input/1_2_1_3.yml b/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_valid_input/1_2_1_3.yml new file mode 100644 index 0000000..1717f91 --- /dev/null +++ b/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_valid_input/1_2_1_3.yml @@ -0,0 +1,257 @@ +--- +http_interactions: +- request: + method: post + uri: https://gateway.sandbox.fatzebra.com.au/v1.0/credit_cards + body: + encoding: UTF-8 + string: '{"card_holder":"Card Holder","card_number":"4000000000002503","card_expiry":"02/2045","cvv":123,"test":true}' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - application/json + User-Agent: + - Ruby + Authorization: + - Basic VEVTVDpURVNU + Content-Type: + - application/json + response: + status: + code: 200 + message: OK + headers: + Date: + - Tue, 20 Jan 2026 11:42:42 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 200 OK + Cache-Control: + - no-store + Vary: + - Accept + Pragma: + - no-cache + X-Request-Id: + - 2f836b0529122a9259464a2b + X-Runtime: + - '0.024410' + X-Backend: + - ip-10-100-22-12.ap-southeast-2.compute.internal + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + Content-Security-Policy-Report-Only: + - 'child-src ''self'' blob: *.cardinalcommerce.com fatzebra.statuspage.io; connect-src + ''self'' *.mastercard.com *.forter.com *.pmnts-staging.io *.rollbar.com *.nr-data.net + *.cardinalcommerce.com fatzebra.statuspage.io *.googleapis.com *.google-analytics.com + *.sdiapi.com *.sdiapi.net *.posthog.com; default-src ''self'' ''unsafe-eval'' + ''unsafe-inline'' *.forter.com *.nr-data.net blob: *.pmnts-sandbox.io *.rollbar.com + fatzebra.statuspage.io *.iovation.com data: *.googleapis.com *.gstatic.com + *.newrelic.com *.bootstrapcdn.com www.google.com pay.google.com *.google-analytics.com + *.gravatar.com; font-src ''self'' cdnjs.cloudflare.com data: *.gstatic.com + *.bootstrapcdn.com *.aexp-static.com; form-action ''self'' *.cardinalcommerce.com; + frame-ancestors ''self'' *.sdiapi.com *.sdiapi.net; frame-src ''self'' *.sdiapi.com + fatzebra.statuspage.io *.americanexpress.com www.google.com pay.google.com + *.masterpass.com *.visa.com *.mastercard.com *.recaptcha.net *.sdiapi.net; + img-src ''self'' *.visa.com data: *.googleapis.com *.gstatic.com masterpass.com + *.masterpass.com *.americanexpress.com *.google-analytics.com *.gravatar.com; + script-src ''self'' ''unsafe-eval'' ''unsafe-inline'' *.cdn-apple.com *.forter.com + *.nr-data.net *.pmnts-sandbox.io *.pmnts-staging.io *.rollbar.com fatzebra.statuspage.io + cdnjs.cloudflare.com *.iovation.com *.jquery.com *.newrelic.com *.googleapis.com + *.cardinalcommerce.com *.bootstrapcdn.com wasm-eval *.google-analytics.com + *.googletagmanager.com *.sdiapi.com *.sdiapi.net *.posthog.com; script-src-attr + ''unsafe-inline''; script-src-elem ''self'' ''unsafe-inline'' *.sdiapi.com + *.cdn-apple.com *.googletagmanager.com *.forter.com *.nr-data.net *.pmnts-sandbox.io + *.rollbar.com fatzebra.statuspage.io *.iovation.com *.jquery.com cdnjs.cloudflare.com + *.pmnts-staging.io *.aexp-static.com *.newrelic.com *.googleapis.com *.americanexpress.com + www.google.com pay.google.com *.visa.com *.masterpass.com *.mastercard.com + *.google-analytics.com *.gstatic.com *.bootstrapcdn.com *.sdiapi.net; style-src + ''self'' ''unsafe-eval'' ''unsafe-inline'' *.bootstrapcdn.com *.googleapis.com; + style-src-attr ''unsafe-inline''; style-src-elem ''unsafe-inline'' ''self'' + *.googleapis.com cdnjs.cloudflare.com *.bootstrapcdn.com *.mastercard.com; + worker-src blob: *.sdiapi.com *.sdiapi.net *.posthog.com; report-uri https://fatzebra.report-uri.com/r/d/csp/wizard' + Nel: + - '{"report_to":"default","max_age":31536000,"include_subdomains":true}' + Report-To: + - '{"group":"default","max_age":31536000,"endpoints":[{"url":"https://fatzebra.report-uri.com/a/d/g"}],"include_subdomains":true}' + body: + encoding: UTF-8 + string: '{"successful":true,"response":{"token":"9pdv7a4pkmod2ciuzshj","card_holder":"Card + Holder","card_number":"400000XXXXXX2503","card_expiry":"2045-02-28","card_type":"VISA","card_category":"Credit","card_subcategory":"Standard","card_issuer":"Intl + Hdqtrs Center Owned","card_country":"United States","authorized":true,"transaction_count":0,"alias":null},"errors":[],"test":true}' + recorded_at: Tue, 20 Jan 2026 11:42:42 GMT +- request: + method: post + uri: https://gateway.sandbox.fatzebra.com.au/sdk/three_d_secure/setup + body: + encoding: UTF-8 + string: '{"card_token":"9pdv7a4pkmod2ciuzshj","test":true}' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - application/json + User-Agent: + - Ruby + Authorization: + - Basic VEVTVDpURVNU + Content-Type: + - application/json + response: + status: + code: 200 + message: OK + headers: + Date: + - Tue, 20 Jan 2026 11:42:43 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 200 OK + Cache-Control: + - no-store + Vary: + - Accept, Origin + Pragma: + - no-cache + X-Request-Id: + - 34ae9b7c5739b1693573ba46 + X-Runtime: + - '0.517167' + X-Backend: + - ip-10-100-22-12.ap-southeast-2.compute.internal + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + Content-Security-Policy-Report-Only: + - 'child-src ''self'' blob: *.cardinalcommerce.com fatzebra.statuspage.io; connect-src + ''self'' *.mastercard.com *.forter.com *.pmnts-staging.io *.rollbar.com *.nr-data.net + *.cardinalcommerce.com fatzebra.statuspage.io *.googleapis.com *.google-analytics.com + *.sdiapi.com *.sdiapi.net *.posthog.com; default-src ''self'' ''unsafe-eval'' + ''unsafe-inline'' *.forter.com *.nr-data.net blob: *.pmnts-sandbox.io *.rollbar.com + fatzebra.statuspage.io *.iovation.com data: *.googleapis.com *.gstatic.com + *.newrelic.com *.bootstrapcdn.com www.google.com pay.google.com *.google-analytics.com + *.gravatar.com; font-src ''self'' cdnjs.cloudflare.com data: *.gstatic.com + *.bootstrapcdn.com *.aexp-static.com; form-action ''self'' *.cardinalcommerce.com; + frame-ancestors ''self'' *.sdiapi.com *.sdiapi.net; frame-src ''self'' *.sdiapi.com + fatzebra.statuspage.io *.americanexpress.com www.google.com pay.google.com + *.masterpass.com *.visa.com *.mastercard.com *.recaptcha.net *.sdiapi.net; + img-src ''self'' *.visa.com data: *.googleapis.com *.gstatic.com masterpass.com + *.masterpass.com *.americanexpress.com *.google-analytics.com *.gravatar.com; + script-src ''self'' ''unsafe-eval'' ''unsafe-inline'' *.cdn-apple.com *.forter.com + *.nr-data.net *.pmnts-sandbox.io *.pmnts-staging.io *.rollbar.com fatzebra.statuspage.io + cdnjs.cloudflare.com *.iovation.com *.jquery.com *.newrelic.com *.googleapis.com + *.cardinalcommerce.com *.bootstrapcdn.com wasm-eval *.google-analytics.com + *.googletagmanager.com *.sdiapi.com *.sdiapi.net *.posthog.com; script-src-attr + ''unsafe-inline''; script-src-elem ''self'' ''unsafe-inline'' *.sdiapi.com + *.cdn-apple.com *.googletagmanager.com *.forter.com *.nr-data.net *.pmnts-sandbox.io + *.rollbar.com fatzebra.statuspage.io *.iovation.com *.jquery.com cdnjs.cloudflare.com + *.pmnts-staging.io *.aexp-static.com *.newrelic.com *.googleapis.com *.americanexpress.com + www.google.com pay.google.com *.visa.com *.masterpass.com *.mastercard.com + *.google-analytics.com *.gstatic.com *.bootstrapcdn.com *.sdiapi.net; style-src + ''self'' ''unsafe-eval'' ''unsafe-inline'' *.bootstrapcdn.com *.googleapis.com; + style-src-attr ''unsafe-inline''; style-src-elem ''unsafe-inline'' ''self'' + *.googleapis.com cdnjs.cloudflare.com *.bootstrapcdn.com *.mastercard.com; + worker-src blob: *.sdiapi.com *.sdiapi.net *.posthog.com; report-uri https://fatzebra.report-uri.com/r/d/csp/wizard' + Nel: + - '{"report_to":"default","max_age":31536000,"include_subdomains":true}' + Report-To: + - '{"group":"default","max_age":31536000,"endpoints":[{"url":"https://fatzebra.report-uri.com/a/d/g"}],"include_subdomains":true}' + body: + encoding: UTF-8 + string: '{"access_token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIwMTg3YzVkNC0wZjdiLTQ0OWMtYjQ5NS05Mzg0NTZmNWZkOGYiLCJpYXQiOjE3Njg5MDkzNjIsImlzcyI6IjVkZDgzYmYwMGU0MjNkMTQ5OGRjYmFjYSIsImV4cCI6MTc2ODkxMjk2MiwiT3JnVW5pdElkIjoiNjE5ZDU1OTVlNGMxZGE1NTAzNmFjMTViIiwiUmVmZXJlbmNlSWQiOiI4YjgxMmRiZi01ZTRmLTQxNjktOWVjZC1jMWNmMmMzNDIyNGQifQ.xa5YE0zL438_2R9qYx1z95hJ24-dApKrUYwDsvzQmxc","device_data_collection_url":"https://centinelapistag.cardinalcommerce.com/V1/Cruise/Collect","reference_id":"8b812dbf-5e4f-4169-9ecd-c1cf2c34224d"}' + recorded_at: Tue, 20 Jan 2026 11:42:43 GMT +- request: + method: post + uri: https://gateway.sandbox.fatzebra.com.au/sdk/three_d_secure/check_enrollment + body: + encoding: UTF-8 + string: '{"merchant_username":"TEST ","card_token":"9pdv7a4pkmod2ciuzshj","amount":100,"currency":"AUD","reference":"ref-e6360a70d550","verification":"123","device_channel":"BROWSER","reference_id":"8b812dbf-5e4f-4169-9ecd-c1cf2c34224d","return_url":"https://example.com/3ds/return","acs_window_size":"05","browser_accept_content":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8","browser_language":"en-AU","browser_java_enabled":false,"browser_color_depth":24,"browser_screen_height":1080,"browser_screen_width":1920,"browser_time_difference":0,"browser_user_agent":"RSpec","test":true}' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - application/json + User-Agent: + - Ruby + Authorization: + - Basic VEVTVDpURVNU + Content-Type: + - application/json + response: + status: + code: 200 + message: OK + headers: + Date: + - Tue, 20 Jan 2026 11:42:43 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 200 OK + Cache-Control: + - no-store + Vary: + - Accept, Origin + Pragma: + - no-cache + X-Request-Id: + - 640df20b5ffa15fc2a720591 + X-Runtime: + - '0.573456' + X-Backend: + - ip-10-100-22-12.ap-southeast-2.compute.internal + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + Content-Security-Policy-Report-Only: + - 'child-src ''self'' blob: *.cardinalcommerce.com fatzebra.statuspage.io; connect-src + ''self'' *.mastercard.com *.forter.com *.pmnts-staging.io *.rollbar.com *.nr-data.net + *.cardinalcommerce.com fatzebra.statuspage.io *.googleapis.com *.google-analytics.com + *.sdiapi.com *.sdiapi.net *.posthog.com; default-src ''self'' ''unsafe-eval'' + ''unsafe-inline'' *.forter.com *.nr-data.net blob: *.pmnts-sandbox.io *.rollbar.com + fatzebra.statuspage.io *.iovation.com data: *.googleapis.com *.gstatic.com + *.newrelic.com *.bootstrapcdn.com www.google.com pay.google.com *.google-analytics.com + *.gravatar.com; font-src ''self'' cdnjs.cloudflare.com data: *.gstatic.com + *.bootstrapcdn.com *.aexp-static.com; form-action ''self'' *.cardinalcommerce.com; + frame-ancestors ''self'' *.sdiapi.com *.sdiapi.net; frame-src ''self'' *.sdiapi.com + fatzebra.statuspage.io *.americanexpress.com www.google.com pay.google.com + *.masterpass.com *.visa.com *.mastercard.com *.recaptcha.net *.sdiapi.net; + img-src ''self'' *.visa.com data: *.googleapis.com *.gstatic.com masterpass.com + *.masterpass.com *.americanexpress.com *.google-analytics.com *.gravatar.com; + script-src ''self'' ''unsafe-eval'' ''unsafe-inline'' *.cdn-apple.com *.forter.com + *.nr-data.net *.pmnts-sandbox.io *.pmnts-staging.io *.rollbar.com fatzebra.statuspage.io + cdnjs.cloudflare.com *.iovation.com *.jquery.com *.newrelic.com *.googleapis.com + *.cardinalcommerce.com *.bootstrapcdn.com wasm-eval *.google-analytics.com + *.googletagmanager.com *.sdiapi.com *.sdiapi.net *.posthog.com; script-src-attr + ''unsafe-inline''; script-src-elem ''self'' ''unsafe-inline'' *.sdiapi.com + *.cdn-apple.com *.googletagmanager.com *.forter.com *.nr-data.net *.pmnts-sandbox.io + *.rollbar.com fatzebra.statuspage.io *.iovation.com *.jquery.com cdnjs.cloudflare.com + *.pmnts-staging.io *.aexp-static.com *.newrelic.com *.googleapis.com *.americanexpress.com + www.google.com pay.google.com *.visa.com *.masterpass.com *.mastercard.com + *.google-analytics.com *.gstatic.com *.bootstrapcdn.com *.sdiapi.net; style-src + ''self'' ''unsafe-eval'' ''unsafe-inline'' *.bootstrapcdn.com *.googleapis.com; + style-src-attr ''unsafe-inline''; style-src-elem ''unsafe-inline'' ''self'' + *.googleapis.com cdnjs.cloudflare.com *.bootstrapcdn.com *.mastercard.com; + worker-src blob: *.sdiapi.com *.sdiapi.net *.posthog.com; report-uri https://fatzebra.report-uri.com/r/d/csp/wizard' + Nel: + - '{"report_to":"default","max_age":31536000,"include_subdomains":true}' + Report-To: + - '{"group":"default","max_age":31536000,"endpoints":[{"url":"https://fatzebra.report-uri.com/a/d/g"}],"include_subdomains":true}' + body: + encoding: UTF-8 + string: '{"veres":"Y","pares":"C","eci":null,"cavv":null,"xid":null,"directory_server_transaction_id":"020e5125-b317-455b-8171-6ebc463b94f7","specification_version":"2.2.0","step_up_url":"https://centinelapistag.cardinalcommerce.com/V2/Cruise/StepUp","access_token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI0ZThiNjUxMC0zYWYxLTQyNTctYTg3Mi01MDBhN2ZhMGFjNWUiLCJpYXQiOjE3Njg5MDkzNjMsImlzcyI6IjVkZDgzYmYwMGU0MjNkMTQ5OGRjYmFjYSIsImV4cCI6MTc2ODkxMjk2MywiT3JnVW5pdElkIjoiNjE5ZDU1OTVlNGMxZGE1NTAzNmFjMTViIiwiUGF5bG9hZCI6eyJBQ1NVcmwiOiJodHRwczovLzBtZXJjaGFudGFjc3N0YWcuY2FyZGluYWxjb21tZXJjZS5jb20vTWVyY2hhbnRBQ1NXZWIvY3JlcS5qc3AiLCJQYXlsb2FkIjoiZXlKdFpYTnpZV2RsVkhsd1pTSTZJa05TWlhFaUxDSnRaWE56WVdkbFZtVnljMmx2YmlJNklqSXVNaTR3SWl3aWRHaHlaV1ZFVTFObGNuWmxjbFJ5WVc1elNVUWlPaUkxTWpjeFpEWmtNQzFoTWpFNUxUUXlZbVF0T1RFek15MWhaRFptT1RrNU16TTVPVGdpTENKaFkzTlVjbUZ1YzBsRUlqb2lZbVJqWlRCaVlUQXRaV1l4TVMwME5UQTBMVGt4TmpjdFlXUTFOVGs1WldKaVl6YzRJaXdpWTJoaGJHeGxibWRsVjJsdVpHOTNVMmw2WlNJNklqQTFJbjAiLCJUcmFuc2FjdGlvbklkIjoiS3NVZDNKSG9WdHpQWWRWd1d6QzAifSwiT2JqZWN0aWZ5UGF5bG9hZCI6dHJ1ZSwiUmV0dXJuVXJsIjoiaHR0cHM6Ly9leGFtcGxlLmNvbS8zZHMvcmV0dXJuIn0.-1DKJtbILA6UGGud8hFggPBuyqzVpQ_fih1oW1EY6dU"}' + recorded_at: Tue, 20 Jan 2026 11:42:43 GMT +recorded_with: VCR 6.3.1 diff --git a/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_valid_input/1_2_2_1.yml b/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_valid_input/1_2_2_1.yml deleted file mode 100644 index 37db87c..0000000 --- a/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_valid_input/1_2_2_1.yml +++ /dev/null @@ -1,135 +0,0 @@ ---- -http_interactions: -- request: - method: post - uri: https://gateway.sandbox.fatzebra.com.au/v1.0/credit_cards - body: - encoding: UTF-8 - string: '{"card_holder":"Matthew Savage","card_number":"5123456789012346","card_expiry":"02/2030","cvv":123,"test":true}' - headers: - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - application/json - User-Agent: - - Ruby - Authorization: - - Basic VEVTVDpURVNU - Content-Type: - - application/json - response: - status: - code: 200 - message: OK - headers: - Date: - - Mon, 19 Jan 2026 12:44:06 GMT - Content-Type: - - application/json; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - keep-alive - Status: - - 200 OK - Cache-Control: - - no-store - Vary: - - Accept - Pragma: - - no-cache - X-Request-Id: - - 2ff2746014a5a79b7924262b - X-Runtime: - - '0.075172' - X-Backend: - - ip-10-100-34-142.ap-southeast-2.compute.internal - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - Content-Security-Policy-Report-Only: - - 'child-src ''self'' blob: *.cardinalcommerce.com fatzebra.statuspage.io; connect-src - ''self'' *.mastercard.com *.forter.com *.pmnts-staging.io *.rollbar.com *.nr-data.net - *.cardinalcommerce.com fatzebra.statuspage.io *.googleapis.com *.google-analytics.com - *.sdiapi.com *.sdiapi.net *.posthog.com; default-src ''self'' ''unsafe-eval'' - ''unsafe-inline'' *.forter.com *.nr-data.net blob: *.pmnts-sandbox.io *.rollbar.com - fatzebra.statuspage.io *.iovation.com data: *.googleapis.com *.gstatic.com - *.newrelic.com *.bootstrapcdn.com www.google.com pay.google.com *.google-analytics.com - *.gravatar.com; font-src ''self'' cdnjs.cloudflare.com data: *.gstatic.com - *.bootstrapcdn.com *.aexp-static.com; form-action ''self'' *.cardinalcommerce.com; - frame-ancestors ''self'' *.sdiapi.com *.sdiapi.net; frame-src ''self'' *.sdiapi.com - fatzebra.statuspage.io *.americanexpress.com www.google.com pay.google.com - *.masterpass.com *.visa.com *.mastercard.com *.recaptcha.net *.sdiapi.net; - img-src ''self'' *.visa.com data: *.googleapis.com *.gstatic.com masterpass.com - *.masterpass.com *.americanexpress.com *.google-analytics.com *.gravatar.com; - script-src ''self'' ''unsafe-eval'' ''unsafe-inline'' *.cdn-apple.com *.forter.com - *.nr-data.net *.pmnts-sandbox.io *.pmnts-staging.io *.rollbar.com fatzebra.statuspage.io - cdnjs.cloudflare.com *.iovation.com *.jquery.com *.newrelic.com *.googleapis.com - *.cardinalcommerce.com *.bootstrapcdn.com wasm-eval *.google-analytics.com - *.googletagmanager.com *.sdiapi.com *.sdiapi.net *.posthog.com; script-src-attr - ''unsafe-inline''; script-src-elem ''self'' ''unsafe-inline'' *.sdiapi.com - *.cdn-apple.com *.googletagmanager.com *.forter.com *.nr-data.net *.pmnts-sandbox.io - *.rollbar.com fatzebra.statuspage.io *.iovation.com *.jquery.com cdnjs.cloudflare.com - *.pmnts-staging.io *.aexp-static.com *.newrelic.com *.googleapis.com *.americanexpress.com - www.google.com pay.google.com *.visa.com *.masterpass.com *.mastercard.com - *.google-analytics.com *.gstatic.com *.bootstrapcdn.com *.sdiapi.net; style-src - ''self'' ''unsafe-eval'' ''unsafe-inline'' *.bootstrapcdn.com *.googleapis.com; - style-src-attr ''unsafe-inline''; style-src-elem ''unsafe-inline'' ''self'' - *.googleapis.com cdnjs.cloudflare.com *.bootstrapcdn.com *.mastercard.com; - worker-src blob: *.sdiapi.com *.sdiapi.net *.posthog.com; report-uri https://fatzebra.report-uri.com/r/d/csp/wizard' - Nel: - - '{"report_to":"default","max_age":31536000,"include_subdomains":true}' - Report-To: - - '{"group":"default","max_age":31536000,"endpoints":[{"url":"https://fatzebra.report-uri.com/a/d/g"}],"include_subdomains":true}' - body: - encoding: UTF-8 - string: '{"successful":true,"response":{"token":"02gg1kmaafmw92ah3mgo","card_holder":"Matthew - Savage","card_number":"512345XXXXXX2346","card_expiry":"2030-02-28","card_type":"MasterCard","card_category":"Debit","card_subcategory":"PrePaid","card_issuer":"Afriland - First Bank","card_country":"Liberia","authorized":true,"transaction_count":408,"alias":null},"errors":[],"test":true}' - recorded_at: Mon, 19 Jan 2026 12:44:05 GMT -- request: - method: post - uri: https://gateway.sandbox.fatzebra.com.au/sdk/three_d_secure/setup - body: - encoding: UTF-8 - string: '{"card_token":"02gg1kmaafmw92ah3mgo","test":true}' - headers: - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - application/json - User-Agent: - - Ruby - Authorization: - - Basic VEVTVDpURVNU - Content-Type: - - application/json - response: - status: - code: 401 - message: Unauthorized - headers: - Date: - - Mon, 19 Jan 2026 12:44:06 GMT - Content-Type: - - application/json; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - keep-alive - Status: - - 401 Unauthorized - Vary: - - Accept, Origin - X-Request-Id: - - 1b8b0b526eb8402f110b7203 - X-Runtime: - - '0.050763' - X-Backend: - - ip-10-100-34-142.ap-southeast-2.compute.internal - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - body: - encoding: UTF-8 - string: '{"error":"Unauthorized"}' - recorded_at: Mon, 19 Jan 2026 12:44:06 GMT -recorded_with: VCR 6.3.1 diff --git a/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_valid_input/1_2_2_3.yml b/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_valid_input/1_2_2_3.yml deleted file mode 100644 index 948fb90..0000000 --- a/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_valid_input/1_2_2_3.yml +++ /dev/null @@ -1,135 +0,0 @@ ---- -http_interactions: -- request: - method: post - uri: https://gateway.sandbox.fatzebra.com.au/v1.0/credit_cards - body: - encoding: UTF-8 - string: '{"card_holder":"Matthew Savage","card_number":"5123456789012346","card_expiry":"02/2030","cvv":123,"test":true}' - headers: - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - application/json - User-Agent: - - Ruby - Authorization: - - Basic VEVTVDpURVNU - Content-Type: - - application/json - response: - status: - code: 200 - message: OK - headers: - Date: - - Mon, 19 Jan 2026 12:44:06 GMT - Content-Type: - - application/json; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - keep-alive - Status: - - 200 OK - Cache-Control: - - no-store - Vary: - - Accept - Pragma: - - no-cache - X-Request-Id: - - 0aee494732c7ac757d81e8aa - X-Runtime: - - '0.049828' - X-Backend: - - ip-10-100-34-142.ap-southeast-2.compute.internal - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - Content-Security-Policy-Report-Only: - - 'child-src ''self'' blob: *.cardinalcommerce.com fatzebra.statuspage.io; connect-src - ''self'' *.mastercard.com *.forter.com *.pmnts-staging.io *.rollbar.com *.nr-data.net - *.cardinalcommerce.com fatzebra.statuspage.io *.googleapis.com *.google-analytics.com - *.sdiapi.com *.sdiapi.net *.posthog.com; default-src ''self'' ''unsafe-eval'' - ''unsafe-inline'' *.forter.com *.nr-data.net blob: *.pmnts-sandbox.io *.rollbar.com - fatzebra.statuspage.io *.iovation.com data: *.googleapis.com *.gstatic.com - *.newrelic.com *.bootstrapcdn.com www.google.com pay.google.com *.google-analytics.com - *.gravatar.com; font-src ''self'' cdnjs.cloudflare.com data: *.gstatic.com - *.bootstrapcdn.com *.aexp-static.com; form-action ''self'' *.cardinalcommerce.com; - frame-ancestors ''self'' *.sdiapi.com *.sdiapi.net; frame-src ''self'' *.sdiapi.com - fatzebra.statuspage.io *.americanexpress.com www.google.com pay.google.com - *.masterpass.com *.visa.com *.mastercard.com *.recaptcha.net *.sdiapi.net; - img-src ''self'' *.visa.com data: *.googleapis.com *.gstatic.com masterpass.com - *.masterpass.com *.americanexpress.com *.google-analytics.com *.gravatar.com; - script-src ''self'' ''unsafe-eval'' ''unsafe-inline'' *.cdn-apple.com *.forter.com - *.nr-data.net *.pmnts-sandbox.io *.pmnts-staging.io *.rollbar.com fatzebra.statuspage.io - cdnjs.cloudflare.com *.iovation.com *.jquery.com *.newrelic.com *.googleapis.com - *.cardinalcommerce.com *.bootstrapcdn.com wasm-eval *.google-analytics.com - *.googletagmanager.com *.sdiapi.com *.sdiapi.net *.posthog.com; script-src-attr - ''unsafe-inline''; script-src-elem ''self'' ''unsafe-inline'' *.sdiapi.com - *.cdn-apple.com *.googletagmanager.com *.forter.com *.nr-data.net *.pmnts-sandbox.io - *.rollbar.com fatzebra.statuspage.io *.iovation.com *.jquery.com cdnjs.cloudflare.com - *.pmnts-staging.io *.aexp-static.com *.newrelic.com *.googleapis.com *.americanexpress.com - www.google.com pay.google.com *.visa.com *.masterpass.com *.mastercard.com - *.google-analytics.com *.gstatic.com *.bootstrapcdn.com *.sdiapi.net; style-src - ''self'' ''unsafe-eval'' ''unsafe-inline'' *.bootstrapcdn.com *.googleapis.com; - style-src-attr ''unsafe-inline''; style-src-elem ''unsafe-inline'' ''self'' - *.googleapis.com cdnjs.cloudflare.com *.bootstrapcdn.com *.mastercard.com; - worker-src blob: *.sdiapi.com *.sdiapi.net *.posthog.com; report-uri https://fatzebra.report-uri.com/r/d/csp/wizard' - Nel: - - '{"report_to":"default","max_age":31536000,"include_subdomains":true}' - Report-To: - - '{"group":"default","max_age":31536000,"endpoints":[{"url":"https://fatzebra.report-uri.com/a/d/g"}],"include_subdomains":true}' - body: - encoding: UTF-8 - string: '{"successful":true,"response":{"token":"02gg1kmaafmw92ah3mgo","card_holder":"Matthew - Savage","card_number":"512345XXXXXX2346","card_expiry":"2030-02-28","card_type":"MasterCard","card_category":"Debit","card_subcategory":"PrePaid","card_issuer":"Afriland - First Bank","card_country":"Liberia","authorized":true,"transaction_count":408,"alias":null},"errors":[],"test":true}' - recorded_at: Mon, 19 Jan 2026 12:44:06 GMT -- request: - method: post - uri: https://gateway.sandbox.fatzebra.com.au/sdk/three_d_secure/setup - body: - encoding: UTF-8 - string: '{"card_token":"02gg1kmaafmw92ah3mgo","test":true}' - headers: - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - application/json - User-Agent: - - Ruby - Authorization: - - Basic VEVTVDpURVNU - Content-Type: - - application/json - response: - status: - code: 401 - message: Unauthorized - headers: - Date: - - Mon, 19 Jan 2026 12:44:06 GMT - Content-Type: - - application/json; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - keep-alive - Status: - - 401 Unauthorized - Vary: - - Accept, Origin - X-Request-Id: - - 1558228a478132fc2007277f - X-Runtime: - - '0.033322' - X-Backend: - - ip-10-100-34-142.ap-southeast-2.compute.internal - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - body: - encoding: UTF-8 - string: '{"error":"Unauthorized"}' - recorded_at: Mon, 19 Jan 2026 12:44:06 GMT -recorded_with: VCR 6.3.1 diff --git a/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_valid_input/returns_expected_keys.yml b/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_valid_input/returns_expected_keys.yml index 18d6ece..6ef2b97 100644 --- a/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_valid_input/returns_expected_keys.yml +++ b/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/with_valid_input/returns_expected_keys.yml @@ -5,7 +5,7 @@ http_interactions: uri: https://gateway.sandbox.fatzebra.com.au/v1.0/credit_cards body: encoding: UTF-8 - string: '{"card_holder":"Matthew Savage","card_number":"5123456789012346","card_expiry":"02/2030","cvv":123,"test":true}' + string: '{"card_holder":"Card Holder","card_number":"4000000000002503","card_expiry":"02/2045","cvv":123,"test":true}' headers: Accept-Encoding: - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 @@ -23,7 +23,7 @@ http_interactions: message: OK headers: Date: - - Mon, 19 Jan 2026 12:44:06 GMT + - Tue, 20 Jan 2026 11:42:41 GMT Content-Type: - application/json; charset=utf-8 Transfer-Encoding: @@ -39,11 +39,11 @@ http_interactions: Pragma: - no-cache X-Request-Id: - - 528958e730b975005d0f5d9a + - 5a0f0f4a4c3c17a14cb49b8a X-Runtime: - - '0.127738' + - '0.042969' X-Backend: - - ip-10-100-34-142.ap-southeast-2.compute.internal + - ip-10-100-22-12.ap-southeast-2.compute.internal Strict-Transport-Security: - max-age=31536000; includeSubDomains Content-Security-Policy-Report-Only: @@ -82,16 +82,16 @@ http_interactions: - '{"group":"default","max_age":31536000,"endpoints":[{"url":"https://fatzebra.report-uri.com/a/d/g"}],"include_subdomains":true}' body: encoding: UTF-8 - string: '{"successful":true,"response":{"token":"02gg1kmaafmw92ah3mgo","card_holder":"Matthew - Savage","card_number":"512345XXXXXX2346","card_expiry":"2030-02-28","card_type":"MasterCard","card_category":"Debit","card_subcategory":"PrePaid","card_issuer":"Afriland - First Bank","card_country":"Liberia","authorized":true,"transaction_count":408,"alias":null},"errors":[],"test":true}' - recorded_at: Mon, 19 Jan 2026 12:44:06 GMT + string: '{"successful":true,"response":{"token":"9pdv7a4pkmod2ciuzshj","card_holder":"Card + Holder","card_number":"400000XXXXXX2503","card_expiry":"2045-02-28","card_type":"VISA","card_category":"Credit","card_subcategory":"Standard","card_issuer":"Intl + Hdqtrs Center Owned","card_country":"United States","authorized":true,"transaction_count":0,"alias":null},"errors":[],"test":true}' + recorded_at: Tue, 20 Jan 2026 11:42:41 GMT - request: method: post uri: https://gateway.sandbox.fatzebra.com.au/sdk/three_d_secure/setup body: encoding: UTF-8 - string: '{"card_token":"02gg1kmaafmw92ah3mgo","test":true}' + string: '{"card_token":"9pdv7a4pkmod2ciuzshj","test":true}' headers: Accept-Encoding: - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 @@ -105,11 +105,11 @@ http_interactions: - application/json response: status: - code: 401 - message: Unauthorized + code: 200 + message: OK headers: Date: - - Mon, 19 Jan 2026 12:44:06 GMT + - Tue, 20 Jan 2026 11:42:41 GMT Content-Type: - application/json; charset=utf-8 Transfer-Encoding: @@ -117,19 +117,141 @@ http_interactions: Connection: - keep-alive Status: - - 401 Unauthorized + - 200 OK + Cache-Control: + - no-store Vary: - Accept, Origin X-Runtime: - - '0.017668' + - '0.469771' + Pragma: + - no-cache X-Request-Id: - - 41d7d91c47b4460f49619f10 + - 1eef70a37fb9f03166dfec6d X-Backend: - - ip-10-100-34-142.ap-southeast-2.compute.internal + - ip-10-100-22-12.ap-southeast-2.compute.internal Strict-Transport-Security: - max-age=31536000; includeSubDomains + Content-Security-Policy-Report-Only: + - 'child-src ''self'' blob: *.cardinalcommerce.com fatzebra.statuspage.io; connect-src + ''self'' *.mastercard.com *.forter.com *.pmnts-staging.io *.rollbar.com *.nr-data.net + *.cardinalcommerce.com fatzebra.statuspage.io *.googleapis.com *.google-analytics.com + *.sdiapi.com *.sdiapi.net *.posthog.com; default-src ''self'' ''unsafe-eval'' + ''unsafe-inline'' *.forter.com *.nr-data.net blob: *.pmnts-sandbox.io *.rollbar.com + fatzebra.statuspage.io *.iovation.com data: *.googleapis.com *.gstatic.com + *.newrelic.com *.bootstrapcdn.com www.google.com pay.google.com *.google-analytics.com + *.gravatar.com; font-src ''self'' cdnjs.cloudflare.com data: *.gstatic.com + *.bootstrapcdn.com *.aexp-static.com; form-action ''self'' *.cardinalcommerce.com; + frame-ancestors ''self'' *.sdiapi.com *.sdiapi.net; frame-src ''self'' *.sdiapi.com + fatzebra.statuspage.io *.americanexpress.com www.google.com pay.google.com + *.masterpass.com *.visa.com *.mastercard.com *.recaptcha.net *.sdiapi.net; + img-src ''self'' *.visa.com data: *.googleapis.com *.gstatic.com masterpass.com + *.masterpass.com *.americanexpress.com *.google-analytics.com *.gravatar.com; + script-src ''self'' ''unsafe-eval'' ''unsafe-inline'' *.cdn-apple.com *.forter.com + *.nr-data.net *.pmnts-sandbox.io *.pmnts-staging.io *.rollbar.com fatzebra.statuspage.io + cdnjs.cloudflare.com *.iovation.com *.jquery.com *.newrelic.com *.googleapis.com + *.cardinalcommerce.com *.bootstrapcdn.com wasm-eval *.google-analytics.com + *.googletagmanager.com *.sdiapi.com *.sdiapi.net *.posthog.com; script-src-attr + ''unsafe-inline''; script-src-elem ''self'' ''unsafe-inline'' *.sdiapi.com + *.cdn-apple.com *.googletagmanager.com *.forter.com *.nr-data.net *.pmnts-sandbox.io + *.rollbar.com fatzebra.statuspage.io *.iovation.com *.jquery.com cdnjs.cloudflare.com + *.pmnts-staging.io *.aexp-static.com *.newrelic.com *.googleapis.com *.americanexpress.com + www.google.com pay.google.com *.visa.com *.masterpass.com *.mastercard.com + *.google-analytics.com *.gstatic.com *.bootstrapcdn.com *.sdiapi.net; style-src + ''self'' ''unsafe-eval'' ''unsafe-inline'' *.bootstrapcdn.com *.googleapis.com; + style-src-attr ''unsafe-inline''; style-src-elem ''unsafe-inline'' ''self'' + *.googleapis.com cdnjs.cloudflare.com *.bootstrapcdn.com *.mastercard.com; + worker-src blob: *.sdiapi.com *.sdiapi.net *.posthog.com; report-uri https://fatzebra.report-uri.com/r/d/csp/wizard' + Nel: + - '{"report_to":"default","max_age":31536000,"include_subdomains":true}' + Report-To: + - '{"group":"default","max_age":31536000,"endpoints":[{"url":"https://fatzebra.report-uri.com/a/d/g"}],"include_subdomains":true}' + body: + encoding: UTF-8 + string: '{"access_token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJjZmQ3YWY1Zi1mZDNkLTQzODktYWU0OS1jY2ExZjBlNWZkNWUiLCJpYXQiOjE3Njg5MDkzNjEsImlzcyI6IjVkZDgzYmYwMGU0MjNkMTQ5OGRjYmFjYSIsImV4cCI6MTc2ODkxMjk2MSwiT3JnVW5pdElkIjoiNjE5ZDU1OTVlNGMxZGE1NTAzNmFjMTViIiwiUmVmZXJlbmNlSWQiOiJkZjI3NTA1Yy1kNThmLTRmMmYtOTVmMC1jNjA3NmJkZDNiMTEifQ.qVp97rk5yE5IFLtrqrKmd0bJZK52Cdbs2VBdJA1DErU","device_data_collection_url":"https://centinelapistag.cardinalcommerce.com/V1/Cruise/Collect","reference_id":"df27505c-d58f-4f2f-95f0-c6076bdd3b11"}' + recorded_at: Tue, 20 Jan 2026 11:42:41 GMT +- request: + method: post + uri: https://gateway.sandbox.fatzebra.com.au/sdk/three_d_secure/check_enrollment + body: + encoding: UTF-8 + string: '{"merchant_username":"TEST ","card_token":"9pdv7a4pkmod2ciuzshj","amount":100,"currency":"AUD","reference":"ref-7f48dc0df037","verification":"123","device_channel":"BROWSER","reference_id":"df27505c-d58f-4f2f-95f0-c6076bdd3b11","return_url":"https://example.com/3ds/return","acs_window_size":"05","browser_accept_content":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8","browser_language":"en-AU","browser_java_enabled":false,"browser_color_depth":24,"browser_screen_height":1080,"browser_screen_width":1920,"browser_time_difference":0,"browser_user_agent":"RSpec","test":true}' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - application/json + User-Agent: + - Ruby + Authorization: + - Basic VEVTVDpURVNU + Content-Type: + - application/json + response: + status: + code: 200 + message: OK + headers: + Date: + - Tue, 20 Jan 2026 11:42:42 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Status: + - 200 OK + Cache-Control: + - no-store + Vary: + - Accept, Origin + Pragma: + - no-cache + X-Request-Id: + - 520fb63e0517f350581b5fd6 + X-Runtime: + - '0.607629' + X-Backend: + - ip-10-100-22-12.ap-southeast-2.compute.internal + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + Content-Security-Policy-Report-Only: + - 'child-src ''self'' blob: *.cardinalcommerce.com fatzebra.statuspage.io; connect-src + ''self'' *.mastercard.com *.forter.com *.pmnts-staging.io *.rollbar.com *.nr-data.net + *.cardinalcommerce.com fatzebra.statuspage.io *.googleapis.com *.google-analytics.com + *.sdiapi.com *.sdiapi.net *.posthog.com; default-src ''self'' ''unsafe-eval'' + ''unsafe-inline'' *.forter.com *.nr-data.net blob: *.pmnts-sandbox.io *.rollbar.com + fatzebra.statuspage.io *.iovation.com data: *.googleapis.com *.gstatic.com + *.newrelic.com *.bootstrapcdn.com www.google.com pay.google.com *.google-analytics.com + *.gravatar.com; font-src ''self'' cdnjs.cloudflare.com data: *.gstatic.com + *.bootstrapcdn.com *.aexp-static.com; form-action ''self'' *.cardinalcommerce.com; + frame-ancestors ''self'' *.sdiapi.com *.sdiapi.net; frame-src ''self'' *.sdiapi.com + fatzebra.statuspage.io *.americanexpress.com www.google.com pay.google.com + *.masterpass.com *.visa.com *.mastercard.com *.recaptcha.net *.sdiapi.net; + img-src ''self'' *.visa.com data: *.googleapis.com *.gstatic.com masterpass.com + *.masterpass.com *.americanexpress.com *.google-analytics.com *.gravatar.com; + script-src ''self'' ''unsafe-eval'' ''unsafe-inline'' *.cdn-apple.com *.forter.com + *.nr-data.net *.pmnts-sandbox.io *.pmnts-staging.io *.rollbar.com fatzebra.statuspage.io + cdnjs.cloudflare.com *.iovation.com *.jquery.com *.newrelic.com *.googleapis.com + *.cardinalcommerce.com *.bootstrapcdn.com wasm-eval *.google-analytics.com + *.googletagmanager.com *.sdiapi.com *.sdiapi.net *.posthog.com; script-src-attr + ''unsafe-inline''; script-src-elem ''self'' ''unsafe-inline'' *.sdiapi.com + *.cdn-apple.com *.googletagmanager.com *.forter.com *.nr-data.net *.pmnts-sandbox.io + *.rollbar.com fatzebra.statuspage.io *.iovation.com *.jquery.com cdnjs.cloudflare.com + *.pmnts-staging.io *.aexp-static.com *.newrelic.com *.googleapis.com *.americanexpress.com + www.google.com pay.google.com *.visa.com *.masterpass.com *.mastercard.com + *.google-analytics.com *.gstatic.com *.bootstrapcdn.com *.sdiapi.net; style-src + ''self'' ''unsafe-eval'' ''unsafe-inline'' *.bootstrapcdn.com *.googleapis.com; + style-src-attr ''unsafe-inline''; style-src-elem ''unsafe-inline'' ''self'' + *.googleapis.com cdnjs.cloudflare.com *.bootstrapcdn.com *.mastercard.com; + worker-src blob: *.sdiapi.com *.sdiapi.net *.posthog.com; report-uri https://fatzebra.report-uri.com/r/d/csp/wizard' + Nel: + - '{"report_to":"default","max_age":31536000,"include_subdomains":true}' + Report-To: + - '{"group":"default","max_age":31536000,"endpoints":[{"url":"https://fatzebra.report-uri.com/a/d/g"}],"include_subdomains":true}' body: encoding: UTF-8 - string: '{"error":"Unauthorized"}' - recorded_at: Mon, 19 Jan 2026 12:44:06 GMT + string: '{"veres":"Y","pares":"C","eci":null,"cavv":null,"xid":null,"directory_server_transaction_id":"6a643b6a-4611-4816-ba5f-fb5d6e7cb195","specification_version":"2.2.0","step_up_url":"https://centinelapistag.cardinalcommerce.com/V2/Cruise/StepUp","access_token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIyMjBjZjRlNy0yYjY1LTQ1NWQtODE3Zi1iMzk0YjZjMjIyOTgiLCJpYXQiOjE3Njg5MDkzNjIsImlzcyI6IjVkZDgzYmYwMGU0MjNkMTQ5OGRjYmFjYSIsImV4cCI6MTc2ODkxMjk2MiwiT3JnVW5pdElkIjoiNjE5ZDU1OTVlNGMxZGE1NTAzNmFjMTViIiwiUGF5bG9hZCI6eyJBQ1NVcmwiOiJodHRwczovLzBtZXJjaGFudGFjc3N0YWcuY2FyZGluYWxjb21tZXJjZS5jb20vTWVyY2hhbnRBQ1NXZWIvY3JlcS5qc3AiLCJQYXlsb2FkIjoiZXlKdFpYTnpZV2RsVkhsd1pTSTZJa05TWlhFaUxDSnRaWE56WVdkbFZtVnljMmx2YmlJNklqSXVNaTR3SWl3aWRHaHlaV1ZFVTFObGNuWmxjbFJ5WVc1elNVUWlPaUkyTXpZMVlUUXlPUzFpTXpFd0xUUmxNRGd0WVRrME1DMDBOekZsWW1NeFlUVm1ObUVpTENKaFkzTlVjbUZ1YzBsRUlqb2lZVFZoWldObU5UVXRNV014WXkwME1HTmhMVGhrT0dZdE4ySTBOVEZoWkdZeU0yVXlJaXdpWTJoaGJHeGxibWRsVjJsdVpHOTNVMmw2WlNJNklqQTFJbjAiLCJUcmFuc2FjdGlvbklkIjoiNVJ0Q1BWOVhDbzFROVRTNXZkMzAifSwiT2JqZWN0aWZ5UGF5bG9hZCI6dHJ1ZSwiUmV0dXJuVXJsIjoiaHR0cHM6Ly9leGFtcGxlLmNvbS8zZHMvcmV0dXJuIn0.kd-mKaOEsF3rOP_3jfOAr1KOQALXshbPhs08De4mG6M"}' + recorded_at: Tue, 20 Jan 2026 11:42:42 GMT recorded_with: VCR 6.3.1 diff --git a/spec/cassettes/FatZebra_ThreeDSecure/_setup/with_valid_input/returns_expected_keys.yml b/spec/cassettes/FatZebra_ThreeDSecure/_setup/valid_payload/returns_expected_keys.yml similarity index 50% rename from spec/cassettes/FatZebra_ThreeDSecure/_setup/with_valid_input/returns_expected_keys.yml rename to spec/cassettes/FatZebra_ThreeDSecure/_setup/valid_payload/returns_expected_keys.yml index 5339742..881ad11 100644 --- a/spec/cassettes/FatZebra_ThreeDSecure/_setup/with_valid_input/returns_expected_keys.yml +++ b/spec/cassettes/FatZebra_ThreeDSecure/_setup/valid_payload/returns_expected_keys.yml @@ -5,7 +5,7 @@ http_interactions: uri: https://gateway.sandbox.fatzebra.com.au/v1.0/credit_cards body: encoding: UTF-8 - string: '{"card_holder":"Matthew Savage","card_number":"5123456789012346","card_expiry":"02/2030","cvv":123,"test":true}' + string: '{"card_holder":"Card Holder","card_number":"4000000000002503","card_expiry":"02/2045","cvv":123,"test":true}' headers: Accept-Encoding: - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 @@ -23,7 +23,7 @@ http_interactions: message: OK headers: Date: - - Mon, 19 Jan 2026 12:44:04 GMT + - Tue, 20 Jan 2026 11:42:38 GMT Content-Type: - application/json; charset=utf-8 Transfer-Encoding: @@ -39,11 +39,11 @@ http_interactions: Pragma: - no-cache X-Request-Id: - - 7453a2c8458e0b796e055fdf + - 449171be698c16d64de1c1ad X-Runtime: - - '0.101311' + - '0.025630' X-Backend: - - ip-10-100-34-142.ap-southeast-2.compute.internal + - ip-10-100-22-12.ap-southeast-2.compute.internal Strict-Transport-Security: - max-age=31536000; includeSubDomains Content-Security-Policy-Report-Only: @@ -82,16 +82,16 @@ http_interactions: - '{"group":"default","max_age":31536000,"endpoints":[{"url":"https://fatzebra.report-uri.com/a/d/g"}],"include_subdomains":true}' body: encoding: UTF-8 - string: '{"successful":true,"response":{"token":"02gg1kmaafmw92ah3mgo","card_holder":"Matthew - Savage","card_number":"512345XXXXXX2346","card_expiry":"2030-02-28","card_type":"MasterCard","card_category":"Debit","card_subcategory":"PrePaid","card_issuer":"Afriland - First Bank","card_country":"Liberia","authorized":true,"transaction_count":408,"alias":null},"errors":[],"test":true}' - recorded_at: Mon, 19 Jan 2026 12:44:04 GMT + string: '{"successful":true,"response":{"token":"9pdv7a4pkmod2ciuzshj","card_holder":"Card + Holder","card_number":"400000XXXXXX2503","card_expiry":"2045-02-28","card_type":"VISA","card_category":"Credit","card_subcategory":"Standard","card_issuer":"Intl + Hdqtrs Center Owned","card_country":"United States","authorized":true,"transaction_count":0,"alias":null},"errors":[],"test":true}' + recorded_at: Tue, 20 Jan 2026 11:42:38 GMT - request: method: post uri: https://gateway.sandbox.fatzebra.com.au/sdk/three_d_secure/setup body: encoding: UTF-8 - string: '{"card_token":"02gg1kmaafmw92ah3mgo","test":true}' + string: '{"card_token":"9pdv7a4pkmod2ciuzshj","test":true}' headers: Accept-Encoding: - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 @@ -105,11 +105,11 @@ http_interactions: - application/json response: status: - code: 401 - message: Unauthorized + code: 200 + message: OK headers: Date: - - Mon, 19 Jan 2026 12:44:04 GMT + - Tue, 20 Jan 2026 11:42:39 GMT Content-Type: - application/json; charset=utf-8 Transfer-Encoding: @@ -117,19 +117,57 @@ http_interactions: Connection: - keep-alive Status: - - 401 Unauthorized + - 200 OK + Cache-Control: + - no-store Vary: - Accept, Origin + Pragma: + - no-cache X-Request-Id: - - 44d3a1415cf9065a60f34d46 + - 47fec3713726b9834dc150e7 X-Runtime: - - '0.040201' + - '0.679717' X-Backend: - - ip-10-100-34-142.ap-southeast-2.compute.internal + - ip-10-100-22-12.ap-southeast-2.compute.internal Strict-Transport-Security: - max-age=31536000; includeSubDomains + Content-Security-Policy-Report-Only: + - 'child-src ''self'' blob: *.cardinalcommerce.com fatzebra.statuspage.io; connect-src + ''self'' *.mastercard.com *.forter.com *.pmnts-staging.io *.rollbar.com *.nr-data.net + *.cardinalcommerce.com fatzebra.statuspage.io *.googleapis.com *.google-analytics.com + *.sdiapi.com *.sdiapi.net *.posthog.com; default-src ''self'' ''unsafe-eval'' + ''unsafe-inline'' *.forter.com *.nr-data.net blob: *.pmnts-sandbox.io *.rollbar.com + fatzebra.statuspage.io *.iovation.com data: *.googleapis.com *.gstatic.com + *.newrelic.com *.bootstrapcdn.com www.google.com pay.google.com *.google-analytics.com + *.gravatar.com; font-src ''self'' cdnjs.cloudflare.com data: *.gstatic.com + *.bootstrapcdn.com *.aexp-static.com; form-action ''self'' *.cardinalcommerce.com; + frame-ancestors ''self'' *.sdiapi.com *.sdiapi.net; frame-src ''self'' *.sdiapi.com + fatzebra.statuspage.io *.americanexpress.com www.google.com pay.google.com + *.masterpass.com *.visa.com *.mastercard.com *.recaptcha.net *.sdiapi.net; + img-src ''self'' *.visa.com data: *.googleapis.com *.gstatic.com masterpass.com + *.masterpass.com *.americanexpress.com *.google-analytics.com *.gravatar.com; + script-src ''self'' ''unsafe-eval'' ''unsafe-inline'' *.cdn-apple.com *.forter.com + *.nr-data.net *.pmnts-sandbox.io *.pmnts-staging.io *.rollbar.com fatzebra.statuspage.io + cdnjs.cloudflare.com *.iovation.com *.jquery.com *.newrelic.com *.googleapis.com + *.cardinalcommerce.com *.bootstrapcdn.com wasm-eval *.google-analytics.com + *.googletagmanager.com *.sdiapi.com *.sdiapi.net *.posthog.com; script-src-attr + ''unsafe-inline''; script-src-elem ''self'' ''unsafe-inline'' *.sdiapi.com + *.cdn-apple.com *.googletagmanager.com *.forter.com *.nr-data.net *.pmnts-sandbox.io + *.rollbar.com fatzebra.statuspage.io *.iovation.com *.jquery.com cdnjs.cloudflare.com + *.pmnts-staging.io *.aexp-static.com *.newrelic.com *.googleapis.com *.americanexpress.com + www.google.com pay.google.com *.visa.com *.masterpass.com *.mastercard.com + *.google-analytics.com *.gstatic.com *.bootstrapcdn.com *.sdiapi.net; style-src + ''self'' ''unsafe-eval'' ''unsafe-inline'' *.bootstrapcdn.com *.googleapis.com; + style-src-attr ''unsafe-inline''; style-src-elem ''unsafe-inline'' ''self'' + *.googleapis.com cdnjs.cloudflare.com *.bootstrapcdn.com *.mastercard.com; + worker-src blob: *.sdiapi.com *.sdiapi.net *.posthog.com; report-uri https://fatzebra.report-uri.com/r/d/csp/wizard' + Nel: + - '{"report_to":"default","max_age":31536000,"include_subdomains":true}' + Report-To: + - '{"group":"default","max_age":31536000,"endpoints":[{"url":"https://fatzebra.report-uri.com/a/d/g"}],"include_subdomains":true}' body: encoding: UTF-8 - string: '{"error":"Unauthorized"}' - recorded_at: Mon, 19 Jan 2026 12:44:04 GMT + string: '{"access_token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI3ZjM0ZDI1My03NGIzLTQ3OTMtOGRjZC1jNzlkZjZlNjQyYmEiLCJpYXQiOjE3Njg5MDkzNTksImlzcyI6IjVkZDgzYmYwMGU0MjNkMTQ5OGRjYmFjYSIsImV4cCI6MTc2ODkxMjk1OSwiT3JnVW5pdElkIjoiNjE5ZDU1OTVlNGMxZGE1NTAzNmFjMTViIiwiUmVmZXJlbmNlSWQiOiJlMmNjOGM3OS01NjExLTQ5YTAtOTk0My02NmU5NWNlMzM2NDQifQ.W4ZTd5sL9A9_5CisVZkITWOacGHL9Pr6Nyt_xThEBS8","device_data_collection_url":"https://centinelapistag.cardinalcommerce.com/V1/Cruise/Collect","reference_id":"e2cc8c79-5611-49a0-9943-66e95ce33644"}' + recorded_at: Tue, 20 Jan 2026 11:42:39 GMT recorded_with: VCR 6.3.1 diff --git a/spec/cassettes/FatZebra_ThreeDSecure/_setup/with_invalid_input/1_1_1_1.yml b/spec/cassettes/FatZebra_ThreeDSecure/_setup/with_invalid_input/1_1_1_1.yml deleted file mode 100644 index 4a643ef..0000000 --- a/spec/cassettes/FatZebra_ThreeDSecure/_setup/with_invalid_input/1_1_1_1.yml +++ /dev/null @@ -1,135 +0,0 @@ ---- -http_interactions: -- request: - method: post - uri: https://gateway.sandbox.fatzebra.com.au/v1.0/credit_cards - body: - encoding: UTF-8 - string: '{"card_holder":"Matthew Savage","card_number":"5123456789012346","card_expiry":"02/2030","cvv":123,"test":true}' - headers: - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - application/json - User-Agent: - - Ruby - Authorization: - - Basic VEVTVDpURVNU - Content-Type: - - application/json - response: - status: - code: 200 - message: OK - headers: - Date: - - Mon, 19 Jan 2026 12:44:03 GMT - Content-Type: - - application/json; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - keep-alive - Status: - - 200 OK - Cache-Control: - - no-store - Vary: - - Accept - Pragma: - - no-cache - X-Request-Id: - - 4c1e9a13210b42c547c15cde - X-Runtime: - - '0.056345' - X-Backend: - - ip-10-100-34-142.ap-southeast-2.compute.internal - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - Content-Security-Policy-Report-Only: - - 'child-src ''self'' blob: *.cardinalcommerce.com fatzebra.statuspage.io; connect-src - ''self'' *.mastercard.com *.forter.com *.pmnts-staging.io *.rollbar.com *.nr-data.net - *.cardinalcommerce.com fatzebra.statuspage.io *.googleapis.com *.google-analytics.com - *.sdiapi.com *.sdiapi.net *.posthog.com; default-src ''self'' ''unsafe-eval'' - ''unsafe-inline'' *.forter.com *.nr-data.net blob: *.pmnts-sandbox.io *.rollbar.com - fatzebra.statuspage.io *.iovation.com data: *.googleapis.com *.gstatic.com - *.newrelic.com *.bootstrapcdn.com www.google.com pay.google.com *.google-analytics.com - *.gravatar.com; font-src ''self'' cdnjs.cloudflare.com data: *.gstatic.com - *.bootstrapcdn.com *.aexp-static.com; form-action ''self'' *.cardinalcommerce.com; - frame-ancestors ''self'' *.sdiapi.com *.sdiapi.net; frame-src ''self'' *.sdiapi.com - fatzebra.statuspage.io *.americanexpress.com www.google.com pay.google.com - *.masterpass.com *.visa.com *.mastercard.com *.recaptcha.net *.sdiapi.net; - img-src ''self'' *.visa.com data: *.googleapis.com *.gstatic.com masterpass.com - *.masterpass.com *.americanexpress.com *.google-analytics.com *.gravatar.com; - script-src ''self'' ''unsafe-eval'' ''unsafe-inline'' *.cdn-apple.com *.forter.com - *.nr-data.net *.pmnts-sandbox.io *.pmnts-staging.io *.rollbar.com fatzebra.statuspage.io - cdnjs.cloudflare.com *.iovation.com *.jquery.com *.newrelic.com *.googleapis.com - *.cardinalcommerce.com *.bootstrapcdn.com wasm-eval *.google-analytics.com - *.googletagmanager.com *.sdiapi.com *.sdiapi.net *.posthog.com; script-src-attr - ''unsafe-inline''; script-src-elem ''self'' ''unsafe-inline'' *.sdiapi.com - *.cdn-apple.com *.googletagmanager.com *.forter.com *.nr-data.net *.pmnts-sandbox.io - *.rollbar.com fatzebra.statuspage.io *.iovation.com *.jquery.com cdnjs.cloudflare.com - *.pmnts-staging.io *.aexp-static.com *.newrelic.com *.googleapis.com *.americanexpress.com - www.google.com pay.google.com *.visa.com *.masterpass.com *.mastercard.com - *.google-analytics.com *.gstatic.com *.bootstrapcdn.com *.sdiapi.net; style-src - ''self'' ''unsafe-eval'' ''unsafe-inline'' *.bootstrapcdn.com *.googleapis.com; - style-src-attr ''unsafe-inline''; style-src-elem ''unsafe-inline'' ''self'' - *.googleapis.com cdnjs.cloudflare.com *.bootstrapcdn.com *.mastercard.com; - worker-src blob: *.sdiapi.com *.sdiapi.net *.posthog.com; report-uri https://fatzebra.report-uri.com/r/d/csp/wizard' - Nel: - - '{"report_to":"default","max_age":31536000,"include_subdomains":true}' - Report-To: - - '{"group":"default","max_age":31536000,"endpoints":[{"url":"https://fatzebra.report-uri.com/a/d/g"}],"include_subdomains":true}' - body: - encoding: UTF-8 - string: '{"successful":true,"response":{"token":"02gg1kmaafmw92ah3mgo","card_holder":"Matthew - Savage","card_number":"512345XXXXXX2346","card_expiry":"2030-02-28","card_type":"MasterCard","card_category":"Debit","card_subcategory":"PrePaid","card_issuer":"Afriland - First Bank","card_country":"Liberia","authorized":true,"transaction_count":408,"alias":null},"errors":[],"test":true}' - recorded_at: Mon, 19 Jan 2026 12:44:03 GMT -- request: - method: post - uri: https://gateway.sandbox.fatzebra.com.au/sdk/three_d_secure/setup - body: - encoding: UTF-8 - string: '{"card_token":"INVALID","test":true}' - headers: - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - application/json - User-Agent: - - Ruby - Authorization: - - Basic VEVTVDpURVNU - Content-Type: - - application/json - response: - status: - code: 401 - message: Unauthorized - headers: - Date: - - Mon, 19 Jan 2026 12:44:03 GMT - Content-Type: - - application/json; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - keep-alive - Status: - - 401 Unauthorized - Vary: - - Accept, Origin - X-Request-Id: - - 1bf2a23a47230c6b545d5e95 - X-Runtime: - - '0.022954' - X-Backend: - - ip-10-100-34-142.ap-southeast-2.compute.internal - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - body: - encoding: UTF-8 - string: '{"error":"Unauthorized"}' - recorded_at: Mon, 19 Jan 2026 12:44:03 GMT -recorded_with: VCR 6.3.1 diff --git a/spec/cassettes/FatZebra_ThreeDSecure/_setup/with_valid_input/1_1_2_1.yml b/spec/cassettes/FatZebra_ThreeDSecure/_setup/with_valid_input/1_1_2_1.yml deleted file mode 100644 index 175dd14..0000000 --- a/spec/cassettes/FatZebra_ThreeDSecure/_setup/with_valid_input/1_1_2_1.yml +++ /dev/null @@ -1,135 +0,0 @@ ---- -http_interactions: -- request: - method: post - uri: https://gateway.sandbox.fatzebra.com.au/v1.0/credit_cards - body: - encoding: UTF-8 - string: '{"card_holder":"Matthew Savage","card_number":"5123456789012346","card_expiry":"02/2030","cvv":123,"test":true}' - headers: - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - application/json - User-Agent: - - Ruby - Authorization: - - Basic VEVTVDpURVNU - Content-Type: - - application/json - response: - status: - code: 200 - message: OK - headers: - Date: - - Mon, 19 Jan 2026 12:44:03 GMT - Content-Type: - - application/json; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - keep-alive - Status: - - 200 OK - Cache-Control: - - no-store - Vary: - - Accept - Pragma: - - no-cache - X-Request-Id: - - 674e324e7fdbc2823ccbba46 - X-Runtime: - - '0.062175' - X-Backend: - - ip-10-100-34-142.ap-southeast-2.compute.internal - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - Content-Security-Policy-Report-Only: - - 'child-src ''self'' blob: *.cardinalcommerce.com fatzebra.statuspage.io; connect-src - ''self'' *.mastercard.com *.forter.com *.pmnts-staging.io *.rollbar.com *.nr-data.net - *.cardinalcommerce.com fatzebra.statuspage.io *.googleapis.com *.google-analytics.com - *.sdiapi.com *.sdiapi.net *.posthog.com; default-src ''self'' ''unsafe-eval'' - ''unsafe-inline'' *.forter.com *.nr-data.net blob: *.pmnts-sandbox.io *.rollbar.com - fatzebra.statuspage.io *.iovation.com data: *.googleapis.com *.gstatic.com - *.newrelic.com *.bootstrapcdn.com www.google.com pay.google.com *.google-analytics.com - *.gravatar.com; font-src ''self'' cdnjs.cloudflare.com data: *.gstatic.com - *.bootstrapcdn.com *.aexp-static.com; form-action ''self'' *.cardinalcommerce.com; - frame-ancestors ''self'' *.sdiapi.com *.sdiapi.net; frame-src ''self'' *.sdiapi.com - fatzebra.statuspage.io *.americanexpress.com www.google.com pay.google.com - *.masterpass.com *.visa.com *.mastercard.com *.recaptcha.net *.sdiapi.net; - img-src ''self'' *.visa.com data: *.googleapis.com *.gstatic.com masterpass.com - *.masterpass.com *.americanexpress.com *.google-analytics.com *.gravatar.com; - script-src ''self'' ''unsafe-eval'' ''unsafe-inline'' *.cdn-apple.com *.forter.com - *.nr-data.net *.pmnts-sandbox.io *.pmnts-staging.io *.rollbar.com fatzebra.statuspage.io - cdnjs.cloudflare.com *.iovation.com *.jquery.com *.newrelic.com *.googleapis.com - *.cardinalcommerce.com *.bootstrapcdn.com wasm-eval *.google-analytics.com - *.googletagmanager.com *.sdiapi.com *.sdiapi.net *.posthog.com; script-src-attr - ''unsafe-inline''; script-src-elem ''self'' ''unsafe-inline'' *.sdiapi.com - *.cdn-apple.com *.googletagmanager.com *.forter.com *.nr-data.net *.pmnts-sandbox.io - *.rollbar.com fatzebra.statuspage.io *.iovation.com *.jquery.com cdnjs.cloudflare.com - *.pmnts-staging.io *.aexp-static.com *.newrelic.com *.googleapis.com *.americanexpress.com - www.google.com pay.google.com *.visa.com *.masterpass.com *.mastercard.com - *.google-analytics.com *.gstatic.com *.bootstrapcdn.com *.sdiapi.net; style-src - ''self'' ''unsafe-eval'' ''unsafe-inline'' *.bootstrapcdn.com *.googleapis.com; - style-src-attr ''unsafe-inline''; style-src-elem ''unsafe-inline'' ''self'' - *.googleapis.com cdnjs.cloudflare.com *.bootstrapcdn.com *.mastercard.com; - worker-src blob: *.sdiapi.com *.sdiapi.net *.posthog.com; report-uri https://fatzebra.report-uri.com/r/d/csp/wizard' - Nel: - - '{"report_to":"default","max_age":31536000,"include_subdomains":true}' - Report-To: - - '{"group":"default","max_age":31536000,"endpoints":[{"url":"https://fatzebra.report-uri.com/a/d/g"}],"include_subdomains":true}' - body: - encoding: UTF-8 - string: '{"successful":true,"response":{"token":"02gg1kmaafmw92ah3mgo","card_holder":"Matthew - Savage","card_number":"512345XXXXXX2346","card_expiry":"2030-02-28","card_type":"MasterCard","card_category":"Debit","card_subcategory":"PrePaid","card_issuer":"Afriland - First Bank","card_country":"Liberia","authorized":true,"transaction_count":408,"alias":null},"errors":[],"test":true}' - recorded_at: Mon, 19 Jan 2026 12:44:03 GMT -- request: - method: post - uri: https://gateway.sandbox.fatzebra.com.au/sdk/three_d_secure/setup - body: - encoding: UTF-8 - string: '{"card_token":"02gg1kmaafmw92ah3mgo","test":true}' - headers: - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - application/json - User-Agent: - - Ruby - Authorization: - - Basic VEVTVDpURVNU - Content-Type: - - application/json - response: - status: - code: 401 - message: Unauthorized - headers: - Date: - - Mon, 19 Jan 2026 12:44:04 GMT - Content-Type: - - application/json; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - keep-alive - Status: - - 401 Unauthorized - Vary: - - Accept, Origin - X-Request-Id: - - 105cf6245a297d1710977c99 - X-Runtime: - - '0.027701' - X-Backend: - - ip-10-100-34-142.ap-southeast-2.compute.internal - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - body: - encoding: UTF-8 - string: '{"error":"Unauthorized"}' - recorded_at: Mon, 19 Jan 2026 12:44:04 GMT -recorded_with: VCR 6.3.1 diff --git a/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/validations/1_2_3_1.yml b/spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/validations/1_3_1_1.yml similarity index 94% rename from spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/validations/1_2_3_1.yml rename to spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/validations/1_3_1_1.yml index 20a5287..4e889a0 100644 --- a/spec/cassettes/FatZebra_ThreeDSecure/_check_enrollment/validations/1_2_3_1.yml +++ b/spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/validations/1_3_1_1.yml @@ -23,7 +23,7 @@ http_interactions: message: OK headers: Date: - - Mon, 19 Jan 2026 12:44:06 GMT + - Tue, 20 Jan 2026 11:45:22 GMT Content-Type: - application/json; charset=utf-8 Transfer-Encoding: @@ -37,13 +37,13 @@ http_interactions: Vary: - Accept X-Runtime: - - '0.076766' + - '0.036536' Pragma: - no-cache X-Request-Id: - - 7d6209bc4c605af672f27528 + - 1a1f6c833d5de79820b88170 X-Backend: - - ip-10-100-34-142.ap-southeast-2.compute.internal + - ip-10-100-22-12.ap-southeast-2.compute.internal Strict-Transport-Security: - max-age=31536000; includeSubDomains Content-Security-Policy-Report-Only: @@ -84,6 +84,6 @@ http_interactions: encoding: UTF-8 string: '{"successful":true,"response":{"token":"02gg1kmaafmw92ah3mgo","card_holder":"Matthew Savage","card_number":"512345XXXXXX2346","card_expiry":"2030-02-28","card_type":"MasterCard","card_category":"Debit","card_subcategory":"PrePaid","card_issuer":"Afriland - First Bank","card_country":"Liberia","authorized":true,"transaction_count":408,"alias":null},"errors":[],"test":true}' - recorded_at: Mon, 19 Jan 2026 12:44:06 GMT + First Bank","card_country":"Liberia","authorized":true,"transaction_count":411,"alias":null},"errors":[],"test":true}' + recorded_at: Tue, 20 Jan 2026 11:45:22 GMT recorded_with: VCR 6.3.1 diff --git a/spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/with_valid_input/1_3_2_1.yml b/spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/validations/1_3_2_1.yml similarity index 75% rename from spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/with_valid_input/1_3_2_1.yml rename to spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/validations/1_3_2_1.yml index 636f3b0..5a2c069 100644 --- a/spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/with_valid_input/1_3_2_1.yml +++ b/spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/validations/1_3_2_1.yml @@ -23,7 +23,7 @@ http_interactions: message: OK headers: Date: - - Mon, 19 Jan 2026 12:44:07 GMT + - Tue, 20 Jan 2026 11:42:44 GMT Content-Type: - application/json; charset=utf-8 Transfer-Encoding: @@ -39,11 +39,11 @@ http_interactions: Pragma: - no-cache X-Request-Id: - - 65e1d35d16ee0352435218af + - 3ffbdf59712fa06e2578a497 X-Runtime: - - '0.062477' + - '0.031469' X-Backend: - - ip-10-100-34-142.ap-southeast-2.compute.internal + - ip-10-100-22-12.ap-southeast-2.compute.internal Strict-Transport-Security: - max-age=31536000; includeSubDomains Content-Security-Policy-Report-Only: @@ -84,52 +84,6 @@ http_interactions: encoding: UTF-8 string: '{"successful":true,"response":{"token":"02gg1kmaafmw92ah3mgo","card_holder":"Matthew Savage","card_number":"512345XXXXXX2346","card_expiry":"2030-02-28","card_type":"MasterCard","card_category":"Debit","card_subcategory":"PrePaid","card_issuer":"Afriland - First Bank","card_country":"Liberia","authorized":true,"transaction_count":408,"alias":null},"errors":[],"test":true}' - recorded_at: Mon, 19 Jan 2026 12:44:07 GMT -- request: - method: post - uri: https://gateway.sandbox.fatzebra.com.au/sdk/three_d_secure/setup - body: - encoding: UTF-8 - string: '{"card_token":"02gg1kmaafmw92ah3mgo","test":true}' - headers: - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - application/json - User-Agent: - - Ruby - Authorization: - - Basic VEVTVDpURVNU - Content-Type: - - application/json - response: - status: - code: 401 - message: Unauthorized - headers: - Date: - - Mon, 19 Jan 2026 12:44:08 GMT - Content-Type: - - application/json; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - keep-alive - Status: - - 401 Unauthorized - Vary: - - Accept, Origin - X-Request-Id: - - 439d34f5768733a25002ca3d - X-Runtime: - - '0.022797' - X-Backend: - - ip-10-100-34-142.ap-southeast-2.compute.internal - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - body: - encoding: UTF-8 - string: '{"error":"Unauthorized"}' - recorded_at: Mon, 19 Jan 2026 12:44:07 GMT + First Bank","card_country":"Liberia","authorized":true,"transaction_count":411,"alias":null},"errors":[],"test":true}' + recorded_at: Tue, 20 Jan 2026 11:42:44 GMT recorded_with: VCR 6.3.1 diff --git a/spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/with_invalid_input/1_3_1_1.yml b/spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/with_invalid_input/1_3_1_1.yml deleted file mode 100644 index 97310d1..0000000 --- a/spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/with_invalid_input/1_3_1_1.yml +++ /dev/null @@ -1,135 +0,0 @@ ---- -http_interactions: -- request: - method: post - uri: https://gateway.sandbox.fatzebra.com.au/v1.0/credit_cards - body: - encoding: UTF-8 - string: '{"card_holder":"Matthew Savage","card_number":"5123456789012346","card_expiry":"02/2030","cvv":123,"test":true}' - headers: - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - application/json - User-Agent: - - Ruby - Authorization: - - Basic VEVTVDpURVNU - Content-Type: - - application/json - response: - status: - code: 200 - message: OK - headers: - Date: - - Mon, 19 Jan 2026 12:44:07 GMT - Content-Type: - - application/json; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - keep-alive - Status: - - 200 OK - Cache-Control: - - no-store - Vary: - - Accept - Pragma: - - no-cache - X-Request-Id: - - 53ece9f234a884ee0769e98b - X-Runtime: - - '0.091693' - X-Backend: - - ip-10-100-34-142.ap-southeast-2.compute.internal - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - Content-Security-Policy-Report-Only: - - 'child-src ''self'' blob: *.cardinalcommerce.com fatzebra.statuspage.io; connect-src - ''self'' *.mastercard.com *.forter.com *.pmnts-staging.io *.rollbar.com *.nr-data.net - *.cardinalcommerce.com fatzebra.statuspage.io *.googleapis.com *.google-analytics.com - *.sdiapi.com *.sdiapi.net *.posthog.com; default-src ''self'' ''unsafe-eval'' - ''unsafe-inline'' *.forter.com *.nr-data.net blob: *.pmnts-sandbox.io *.rollbar.com - fatzebra.statuspage.io *.iovation.com data: *.googleapis.com *.gstatic.com - *.newrelic.com *.bootstrapcdn.com www.google.com pay.google.com *.google-analytics.com - *.gravatar.com; font-src ''self'' cdnjs.cloudflare.com data: *.gstatic.com - *.bootstrapcdn.com *.aexp-static.com; form-action ''self'' *.cardinalcommerce.com; - frame-ancestors ''self'' *.sdiapi.com *.sdiapi.net; frame-src ''self'' *.sdiapi.com - fatzebra.statuspage.io *.americanexpress.com www.google.com pay.google.com - *.masterpass.com *.visa.com *.mastercard.com *.recaptcha.net *.sdiapi.net; - img-src ''self'' *.visa.com data: *.googleapis.com *.gstatic.com masterpass.com - *.masterpass.com *.americanexpress.com *.google-analytics.com *.gravatar.com; - script-src ''self'' ''unsafe-eval'' ''unsafe-inline'' *.cdn-apple.com *.forter.com - *.nr-data.net *.pmnts-sandbox.io *.pmnts-staging.io *.rollbar.com fatzebra.statuspage.io - cdnjs.cloudflare.com *.iovation.com *.jquery.com *.newrelic.com *.googleapis.com - *.cardinalcommerce.com *.bootstrapcdn.com wasm-eval *.google-analytics.com - *.googletagmanager.com *.sdiapi.com *.sdiapi.net *.posthog.com; script-src-attr - ''unsafe-inline''; script-src-elem ''self'' ''unsafe-inline'' *.sdiapi.com - *.cdn-apple.com *.googletagmanager.com *.forter.com *.nr-data.net *.pmnts-sandbox.io - *.rollbar.com fatzebra.statuspage.io *.iovation.com *.jquery.com cdnjs.cloudflare.com - *.pmnts-staging.io *.aexp-static.com *.newrelic.com *.googleapis.com *.americanexpress.com - www.google.com pay.google.com *.visa.com *.masterpass.com *.mastercard.com - *.google-analytics.com *.gstatic.com *.bootstrapcdn.com *.sdiapi.net; style-src - ''self'' ''unsafe-eval'' ''unsafe-inline'' *.bootstrapcdn.com *.googleapis.com; - style-src-attr ''unsafe-inline''; style-src-elem ''unsafe-inline'' ''self'' - *.googleapis.com cdnjs.cloudflare.com *.bootstrapcdn.com *.mastercard.com; - worker-src blob: *.sdiapi.com *.sdiapi.net *.posthog.com; report-uri https://fatzebra.report-uri.com/r/d/csp/wizard' - Nel: - - '{"report_to":"default","max_age":31536000,"include_subdomains":true}' - Report-To: - - '{"group":"default","max_age":31536000,"endpoints":[{"url":"https://fatzebra.report-uri.com/a/d/g"}],"include_subdomains":true}' - body: - encoding: UTF-8 - string: '{"successful":true,"response":{"token":"02gg1kmaafmw92ah3mgo","card_holder":"Matthew - Savage","card_number":"512345XXXXXX2346","card_expiry":"2030-02-28","card_type":"MasterCard","card_category":"Debit","card_subcategory":"PrePaid","card_issuer":"Afriland - First Bank","card_country":"Liberia","authorized":true,"transaction_count":408,"alias":null},"errors":[],"test":true}' - recorded_at: Mon, 19 Jan 2026 12:44:07 GMT -- request: - method: post - uri: https://gateway.sandbox.fatzebra.com.au/sdk/three_d_secure/setup - body: - encoding: UTF-8 - string: '{"card_token":"02gg1kmaafmw92ah3mgo","test":true}' - headers: - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - application/json - User-Agent: - - Ruby - Authorization: - - Basic VEVTVDpURVNU - Content-Type: - - application/json - response: - status: - code: 401 - message: Unauthorized - headers: - Date: - - Mon, 19 Jan 2026 12:44:07 GMT - Content-Type: - - application/json; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - keep-alive - Status: - - 401 Unauthorized - Vary: - - Accept, Origin - X-Request-Id: - - 750ae3427e660743433f2191 - X-Runtime: - - '0.030219' - X-Backend: - - ip-10-100-34-142.ap-southeast-2.compute.internal - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - body: - encoding: UTF-8 - string: '{"error":"Unauthorized"}' - recorded_at: Mon, 19 Jan 2026 12:44:07 GMT -recorded_with: VCR 6.3.1 diff --git a/spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/with_invalid_input/1_3_1_2.yml b/spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/with_invalid_input/1_3_1_2.yml deleted file mode 100644 index 0c67f2e..0000000 --- a/spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/with_invalid_input/1_3_1_2.yml +++ /dev/null @@ -1,135 +0,0 @@ ---- -http_interactions: -- request: - method: post - uri: https://gateway.sandbox.fatzebra.com.au/v1.0/credit_cards - body: - encoding: UTF-8 - string: '{"card_holder":"Matthew Savage","card_number":"5123456789012346","card_expiry":"02/2030","cvv":123,"test":true}' - headers: - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - application/json - User-Agent: - - Ruby - Authorization: - - Basic VEVTVDpURVNU - Content-Type: - - application/json - response: - status: - code: 200 - message: OK - headers: - Date: - - Mon, 19 Jan 2026 12:44:07 GMT - Content-Type: - - application/json; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - keep-alive - Status: - - 200 OK - Cache-Control: - - no-store - Vary: - - Accept - Pragma: - - no-cache - X-Request-Id: - - '061870676a451c224e257bea' - X-Runtime: - - '0.054680' - X-Backend: - - ip-10-100-34-142.ap-southeast-2.compute.internal - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - Content-Security-Policy-Report-Only: - - 'child-src ''self'' blob: *.cardinalcommerce.com fatzebra.statuspage.io; connect-src - ''self'' *.mastercard.com *.forter.com *.pmnts-staging.io *.rollbar.com *.nr-data.net - *.cardinalcommerce.com fatzebra.statuspage.io *.googleapis.com *.google-analytics.com - *.sdiapi.com *.sdiapi.net *.posthog.com; default-src ''self'' ''unsafe-eval'' - ''unsafe-inline'' *.forter.com *.nr-data.net blob: *.pmnts-sandbox.io *.rollbar.com - fatzebra.statuspage.io *.iovation.com data: *.googleapis.com *.gstatic.com - *.newrelic.com *.bootstrapcdn.com www.google.com pay.google.com *.google-analytics.com - *.gravatar.com; font-src ''self'' cdnjs.cloudflare.com data: *.gstatic.com - *.bootstrapcdn.com *.aexp-static.com; form-action ''self'' *.cardinalcommerce.com; - frame-ancestors ''self'' *.sdiapi.com *.sdiapi.net; frame-src ''self'' *.sdiapi.com - fatzebra.statuspage.io *.americanexpress.com www.google.com pay.google.com - *.masterpass.com *.visa.com *.mastercard.com *.recaptcha.net *.sdiapi.net; - img-src ''self'' *.visa.com data: *.googleapis.com *.gstatic.com masterpass.com - *.masterpass.com *.americanexpress.com *.google-analytics.com *.gravatar.com; - script-src ''self'' ''unsafe-eval'' ''unsafe-inline'' *.cdn-apple.com *.forter.com - *.nr-data.net *.pmnts-sandbox.io *.pmnts-staging.io *.rollbar.com fatzebra.statuspage.io - cdnjs.cloudflare.com *.iovation.com *.jquery.com *.newrelic.com *.googleapis.com - *.cardinalcommerce.com *.bootstrapcdn.com wasm-eval *.google-analytics.com - *.googletagmanager.com *.sdiapi.com *.sdiapi.net *.posthog.com; script-src-attr - ''unsafe-inline''; script-src-elem ''self'' ''unsafe-inline'' *.sdiapi.com - *.cdn-apple.com *.googletagmanager.com *.forter.com *.nr-data.net *.pmnts-sandbox.io - *.rollbar.com fatzebra.statuspage.io *.iovation.com *.jquery.com cdnjs.cloudflare.com - *.pmnts-staging.io *.aexp-static.com *.newrelic.com *.googleapis.com *.americanexpress.com - www.google.com pay.google.com *.visa.com *.masterpass.com *.mastercard.com - *.google-analytics.com *.gstatic.com *.bootstrapcdn.com *.sdiapi.net; style-src - ''self'' ''unsafe-eval'' ''unsafe-inline'' *.bootstrapcdn.com *.googleapis.com; - style-src-attr ''unsafe-inline''; style-src-elem ''unsafe-inline'' ''self'' - *.googleapis.com cdnjs.cloudflare.com *.bootstrapcdn.com *.mastercard.com; - worker-src blob: *.sdiapi.com *.sdiapi.net *.posthog.com; report-uri https://fatzebra.report-uri.com/r/d/csp/wizard' - Nel: - - '{"report_to":"default","max_age":31536000,"include_subdomains":true}' - Report-To: - - '{"group":"default","max_age":31536000,"endpoints":[{"url":"https://fatzebra.report-uri.com/a/d/g"}],"include_subdomains":true}' - body: - encoding: UTF-8 - string: '{"successful":true,"response":{"token":"02gg1kmaafmw92ah3mgo","card_holder":"Matthew - Savage","card_number":"512345XXXXXX2346","card_expiry":"2030-02-28","card_type":"MasterCard","card_category":"Debit","card_subcategory":"PrePaid","card_issuer":"Afriland - First Bank","card_country":"Liberia","authorized":true,"transaction_count":408,"alias":null},"errors":[],"test":true}' - recorded_at: Mon, 19 Jan 2026 12:44:07 GMT -- request: - method: post - uri: https://gateway.sandbox.fatzebra.com.au/sdk/three_d_secure/setup - body: - encoding: UTF-8 - string: '{"card_token":"02gg1kmaafmw92ah3mgo","test":true}' - headers: - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - application/json - User-Agent: - - Ruby - Authorization: - - Basic VEVTVDpURVNU - Content-Type: - - application/json - response: - status: - code: 401 - message: Unauthorized - headers: - Date: - - Mon, 19 Jan 2026 12:44:07 GMT - Content-Type: - - application/json; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - keep-alive - Status: - - 401 Unauthorized - Vary: - - Accept, Origin - X-Request-Id: - - 3314ecfc3c01c6c7668b5299 - X-Runtime: - - '0.026552' - X-Backend: - - ip-10-100-34-142.ap-southeast-2.compute.internal - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - body: - encoding: UTF-8 - string: '{"error":"Unauthorized"}' - recorded_at: Mon, 19 Jan 2026 12:44:07 GMT -recorded_with: VCR 6.3.1 diff --git a/spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/with_invalid_input/1_3_1_3.yml b/spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/with_invalid_input/1_3_1_3.yml deleted file mode 100644 index be7f6d9..0000000 --- a/spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/with_invalid_input/1_3_1_3.yml +++ /dev/null @@ -1,135 +0,0 @@ ---- -http_interactions: -- request: - method: post - uri: https://gateway.sandbox.fatzebra.com.au/v1.0/credit_cards - body: - encoding: UTF-8 - string: '{"card_holder":"Matthew Savage","card_number":"5123456789012346","card_expiry":"02/2030","cvv":123,"test":true}' - headers: - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - application/json - User-Agent: - - Ruby - Authorization: - - Basic VEVTVDpURVNU - Content-Type: - - application/json - response: - status: - code: 200 - message: OK - headers: - Date: - - Mon, 19 Jan 2026 12:44:07 GMT - Content-Type: - - application/json; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - keep-alive - Status: - - 200 OK - Cache-Control: - - no-store - Vary: - - Accept - Pragma: - - no-cache - X-Request-Id: - - 0a31a79056aca0e848d2f4af - X-Runtime: - - '0.050692' - X-Backend: - - ip-10-100-34-142.ap-southeast-2.compute.internal - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - Content-Security-Policy-Report-Only: - - 'child-src ''self'' blob: *.cardinalcommerce.com fatzebra.statuspage.io; connect-src - ''self'' *.mastercard.com *.forter.com *.pmnts-staging.io *.rollbar.com *.nr-data.net - *.cardinalcommerce.com fatzebra.statuspage.io *.googleapis.com *.google-analytics.com - *.sdiapi.com *.sdiapi.net *.posthog.com; default-src ''self'' ''unsafe-eval'' - ''unsafe-inline'' *.forter.com *.nr-data.net blob: *.pmnts-sandbox.io *.rollbar.com - fatzebra.statuspage.io *.iovation.com data: *.googleapis.com *.gstatic.com - *.newrelic.com *.bootstrapcdn.com www.google.com pay.google.com *.google-analytics.com - *.gravatar.com; font-src ''self'' cdnjs.cloudflare.com data: *.gstatic.com - *.bootstrapcdn.com *.aexp-static.com; form-action ''self'' *.cardinalcommerce.com; - frame-ancestors ''self'' *.sdiapi.com *.sdiapi.net; frame-src ''self'' *.sdiapi.com - fatzebra.statuspage.io *.americanexpress.com www.google.com pay.google.com - *.masterpass.com *.visa.com *.mastercard.com *.recaptcha.net *.sdiapi.net; - img-src ''self'' *.visa.com data: *.googleapis.com *.gstatic.com masterpass.com - *.masterpass.com *.americanexpress.com *.google-analytics.com *.gravatar.com; - script-src ''self'' ''unsafe-eval'' ''unsafe-inline'' *.cdn-apple.com *.forter.com - *.nr-data.net *.pmnts-sandbox.io *.pmnts-staging.io *.rollbar.com fatzebra.statuspage.io - cdnjs.cloudflare.com *.iovation.com *.jquery.com *.newrelic.com *.googleapis.com - *.cardinalcommerce.com *.bootstrapcdn.com wasm-eval *.google-analytics.com - *.googletagmanager.com *.sdiapi.com *.sdiapi.net *.posthog.com; script-src-attr - ''unsafe-inline''; script-src-elem ''self'' ''unsafe-inline'' *.sdiapi.com - *.cdn-apple.com *.googletagmanager.com *.forter.com *.nr-data.net *.pmnts-sandbox.io - *.rollbar.com fatzebra.statuspage.io *.iovation.com *.jquery.com cdnjs.cloudflare.com - *.pmnts-staging.io *.aexp-static.com *.newrelic.com *.googleapis.com *.americanexpress.com - www.google.com pay.google.com *.visa.com *.masterpass.com *.mastercard.com - *.google-analytics.com *.gstatic.com *.bootstrapcdn.com *.sdiapi.net; style-src - ''self'' ''unsafe-eval'' ''unsafe-inline'' *.bootstrapcdn.com *.googleapis.com; - style-src-attr ''unsafe-inline''; style-src-elem ''unsafe-inline'' ''self'' - *.googleapis.com cdnjs.cloudflare.com *.bootstrapcdn.com *.mastercard.com; - worker-src blob: *.sdiapi.com *.sdiapi.net *.posthog.com; report-uri https://fatzebra.report-uri.com/r/d/csp/wizard' - Nel: - - '{"report_to":"default","max_age":31536000,"include_subdomains":true}' - Report-To: - - '{"group":"default","max_age":31536000,"endpoints":[{"url":"https://fatzebra.report-uri.com/a/d/g"}],"include_subdomains":true}' - body: - encoding: UTF-8 - string: '{"successful":true,"response":{"token":"02gg1kmaafmw92ah3mgo","card_holder":"Matthew - Savage","card_number":"512345XXXXXX2346","card_expiry":"2030-02-28","card_type":"MasterCard","card_category":"Debit","card_subcategory":"PrePaid","card_issuer":"Afriland - First Bank","card_country":"Liberia","authorized":true,"transaction_count":408,"alias":null},"errors":[],"test":true}' - recorded_at: Mon, 19 Jan 2026 12:44:07 GMT -- request: - method: post - uri: https://gateway.sandbox.fatzebra.com.au/sdk/three_d_secure/setup - body: - encoding: UTF-8 - string: '{"card_token":"02gg1kmaafmw92ah3mgo","test":true}' - headers: - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - application/json - User-Agent: - - Ruby - Authorization: - - Basic VEVTVDpURVNU - Content-Type: - - application/json - response: - status: - code: 401 - message: Unauthorized - headers: - Date: - - Mon, 19 Jan 2026 12:44:07 GMT - Content-Type: - - application/json; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - keep-alive - Status: - - 401 Unauthorized - Vary: - - Accept, Origin - X-Request-Id: - - 26f14d1e08d0400e7e0b7bfd - X-Runtime: - - '0.017749' - X-Backend: - - ip-10-100-34-142.ap-southeast-2.compute.internal - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - body: - encoding: UTF-8 - string: '{"error":"Unauthorized"}' - recorded_at: Mon, 19 Jan 2026 12:44:07 GMT -recorded_with: VCR 6.3.1 diff --git a/spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/validations/1_3_3_1.yml b/spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/with_valid_input/1_3_1_1.yml similarity index 94% rename from spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/validations/1_3_3_1.yml rename to spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/with_valid_input/1_3_1_1.yml index 19acb12..75a743a 100644 --- a/spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/validations/1_3_3_1.yml +++ b/spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/with_valid_input/1_3_1_1.yml @@ -23,7 +23,7 @@ http_interactions: message: OK headers: Date: - - Mon, 19 Jan 2026 12:44:08 GMT + - Tue, 20 Jan 2026 11:42:44 GMT Content-Type: - application/json; charset=utf-8 Transfer-Encoding: @@ -39,11 +39,11 @@ http_interactions: Pragma: - no-cache X-Request-Id: - - 3778b8732ce0a68b634940b9 + - 2c5aebf536b3e6023cf2bed0 X-Runtime: - - '0.079003' + - '0.039472' X-Backend: - - ip-10-100-34-142.ap-southeast-2.compute.internal + - ip-10-100-22-12.ap-southeast-2.compute.internal Strict-Transport-Security: - max-age=31536000; includeSubDomains Content-Security-Policy-Report-Only: @@ -84,6 +84,6 @@ http_interactions: encoding: UTF-8 string: '{"successful":true,"response":{"token":"02gg1kmaafmw92ah3mgo","card_holder":"Matthew Savage","card_number":"512345XXXXXX2346","card_expiry":"2030-02-28","card_type":"MasterCard","card_category":"Debit","card_subcategory":"PrePaid","card_issuer":"Afriland - First Bank","card_country":"Liberia","authorized":true,"transaction_count":408,"alias":null},"errors":[],"test":true}' - recorded_at: Mon, 19 Jan 2026 12:44:08 GMT + First Bank","card_country":"Liberia","authorized":true,"transaction_count":411,"alias":null},"errors":[],"test":true}' + recorded_at: Tue, 20 Jan 2026 11:42:44 GMT recorded_with: VCR 6.3.1 diff --git a/spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/with_valid_input/returns_expected_keys.yml b/spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/with_valid_input/returns_expected_keys.yml index 6b1526e..14007d8 100644 --- a/spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/with_valid_input/returns_expected_keys.yml +++ b/spec/cassettes/FatZebra_ThreeDSecure/_validate_authentication/with_valid_input/returns_expected_keys.yml @@ -23,7 +23,7 @@ http_interactions: message: OK headers: Date: - - Mon, 19 Jan 2026 12:44:08 GMT + - Tue, 20 Jan 2026 11:42:44 GMT Content-Type: - application/json; charset=utf-8 Transfer-Encoding: @@ -39,11 +39,11 @@ http_interactions: Pragma: - no-cache X-Request-Id: - - '08e2d0c729c5e766317dbbfa' + - 1422bc7b3c02765a2d7a6d95 X-Runtime: - - '0.069241' + - '0.039603' X-Backend: - - ip-10-100-34-142.ap-southeast-2.compute.internal + - ip-10-100-22-12.ap-southeast-2.compute.internal Strict-Transport-Security: - max-age=31536000; includeSubDomains Content-Security-Policy-Report-Only: @@ -84,52 +84,6 @@ http_interactions: encoding: UTF-8 string: '{"successful":true,"response":{"token":"02gg1kmaafmw92ah3mgo","card_holder":"Matthew Savage","card_number":"512345XXXXXX2346","card_expiry":"2030-02-28","card_type":"MasterCard","card_category":"Debit","card_subcategory":"PrePaid","card_issuer":"Afriland - First Bank","card_country":"Liberia","authorized":true,"transaction_count":408,"alias":null},"errors":[],"test":true}' - recorded_at: Mon, 19 Jan 2026 12:44:08 GMT -- request: - method: post - uri: https://gateway.sandbox.fatzebra.com.au/sdk/three_d_secure/setup - body: - encoding: UTF-8 - string: '{"card_token":"02gg1kmaafmw92ah3mgo","test":true}' - headers: - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - application/json - User-Agent: - - Ruby - Authorization: - - Basic VEVTVDpURVNU - Content-Type: - - application/json - response: - status: - code: 401 - message: Unauthorized - headers: - Date: - - Mon, 19 Jan 2026 12:44:08 GMT - Content-Type: - - application/json; charset=utf-8 - Transfer-Encoding: - - chunked - Connection: - - keep-alive - Status: - - 401 Unauthorized - Vary: - - Accept, Origin - X-Request-Id: - - 567c47b52222afda41162111 - X-Runtime: - - '0.020576' - X-Backend: - - ip-10-100-34-142.ap-southeast-2.compute.internal - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - body: - encoding: UTF-8 - string: '{"error":"Unauthorized"}' - recorded_at: Mon, 19 Jan 2026 12:44:08 GMT + First Bank","card_country":"Liberia","authorized":true,"transaction_count":411,"alias":null},"errors":[],"test":true}' + recorded_at: Tue, 20 Jan 2026 11:42:44 GMT recorded_with: VCR 6.3.1 diff --git a/spec/lib/fat_zebra/three_d_secure_spec.rb b/spec/lib/fat_zebra/three_d_secure_spec.rb index ec12f9d..e0a3f0c 100644 --- a/spec/lib/fat_zebra/three_d_secure_spec.rb +++ b/spec/lib/fat_zebra/three_d_secure_spec.rb @@ -8,33 +8,17 @@ card_token: card_token }} - let!(:credit_card) { FatZebra::Card.create(valid_credit_card_payload) } + let!(:credit_card) { FatZebra::Card.create(valid_three_d_secure_card_payload) } let(:card_token) { credit_card.token } - context 'with invalid input' do - - it do - valid_setup_payload[:card_token] = 'INVALID' - is_expected.not_to be_accepted - expect(setup.errors.join).to match(/Card not found|card_token/i) - end - - it do - valid_setup_payload.delete(:card_token) - expect { setup }.to raise_error(FatZebra::RequestValidationError) - end - end - - context 'with valid input' do - it do - is_expected.to be_accepted - expect(setup.errors).to be_empty - end + context 'valid payload' do it 'returns expected keys' do - is_expected.to be_accepted - expect(setup.keys).to include('reference_id') - expect(setup.reference_id).to be_truthy + expect(setup.keys.map(&:to_s)).to include( + 'reference_id', + 'access_token', + 'device_data_collection_url' + ) end end end @@ -42,7 +26,7 @@ describe '.check_enrollment', :vcr do subject(:enrollment) { described_class.check_enrollment(valid_enrollment_payload) } - let!(:credit_card) { FatZebra::Card.create(valid_credit_card_payload) } + let!(:credit_card) { FatZebra::Card.create(valid_three_d_secure_card_payload) } let(:valid_enrollment_payload) {{ merchant_username: merchant_username, @@ -51,7 +35,7 @@ currency: 'AUD', reference: "ref-#{SecureRandom.hex(6)}", verification: '123', - device_channel: 'browser', + device_channel: 'BROWSER', reference_id: reference_id, return_url: 'https://example.com/3ds/return', acs_window_size: '05', @@ -65,64 +49,33 @@ browser_user_agent: 'RSpec' }} - # In the SDK these are usually configured; keep them as lets so projects can override via spec helpers. - let(:merchant_username) { ENV.fetch('FATZEBRA_MERCHANT_USERNAME', 'test') } + let(:merchant_username) { "TEST "} # reference_id is returned from setup; for stability we call setup here. let(:reference_id) do described_class.setup(card_token: credit_card.token).reference_id end - context 'with invalid input' do - it do - valid_enrollment_payload[:card_token] = 'INVALID' - is_expected.not_to be_accepted - expect(enrollment.errors.join).to match(/Card not found|card_token/i) - end - - it do - valid_enrollment_payload[:currency] = 'INVALID' - is_expected.not_to be_accepted - expect(enrollment.errors.join).to match(/INVALID is not valid for this merchant|currency/i) - end - - it do - valid_enrollment_payload[:amount] = 'INVALID' - is_expected.not_to be_accepted - expect(enrollment.errors.join).to match(/Amount is invalid|amount/i) - end - - it do - valid_enrollment_payload.delete(:merchant_username) - expect { enrollment }.to raise_error(FatZebra::RequestValidationError) - end - - it do - valid_enrollment_payload.delete(:reference_id) - expect { enrollment }.to raise_error(FatZebra::RequestValidationError) - end - - it do - valid_enrollment_payload.delete(:return_url) - expect { enrollment }.to raise_error(FatZebra::RequestValidationError) - end - end - context 'with valid input' do it do - is_expected.to be_accepted - expect(enrollment.errors).to be_empty + expect(enrollment.errors).to be_nil end it 'returns expected keys' do - is_expected.to be_accepted - expect(enrollment.keys).to include('enrolled', 'version', 'card_bin') + expect(enrollment.keys.map(&:to_s)).to include('veres', 'pares', 'eci', 'cavv', 'xid', 'directory_server_transaction_id', 'specification_version', 'step_up_url', 'access_token') end it do - expect(enrollment.enrolled).to be_truthy - expect(enrollment.version).to be_truthy - expect(enrollment.card_bin).to be_truthy + expect(enrollment.veres).to be_truthy + expect(enrollment.pares).to be_truthy + expect(enrollment.eci).to be_nil + expect(enrollment.eci).to be_nil + expect(enrollment.cavv).to be_nil + expect(enrollment.xid).to be_nil + expect(enrollment.directory_server_transaction_id).to be_truthy + expect(enrollment.specification_version).to be_truthy + expect(enrollment.step_up_url).to be_truthy + expect(enrollment.access_token).to be_truthy end end @@ -134,9 +87,9 @@ end describe '.validate_authentication', :vcr do - subject(:validation) { described_class.validate_authentication(valid_validation_payload) } + subject(:validation) { described_class.validate_authentication(valid_three_d_secure_card_payload) } - let!(:credit_card) { FatZebra::Card.create(valid_credit_card_payload) } + let!(:credit_card) { FatZebra::Card.create(valid_three_d_secure_card_payload) } let(:merchant_username) { ENV.fetch('FATZEBRA_MERCHANT_USERNAME', 'test') } @@ -155,7 +108,7 @@ currency: 'AUD', reference: "ref-#{SecureRandom.hex(6)}", verification: '123', - device_channel: 'browser', + device_channel: 'BROWSER', reference_id: reference_id, return_url: 'https://example.com/3ds/return', acs_window_size: '05', @@ -177,38 +130,6 @@ authentication_transaction_id: authentication_transaction_id }} - context 'with invalid input' do - it do - valid_validation_payload[:card_token] = 'INVALID' - is_expected.not_to be_accepted - expect(validation.errors.join).to match(/Card not found|card_token/i) - end - - it do - valid_validation_payload[:amount] = 'INVALID' - is_expected.not_to be_accepted - expect(validation.errors.join).to match(/Amount is invalid|amount/i) - end - - it do - valid_validation_payload[:authentication_transaction_id] = 'INVALID' - is_expected.not_to be_accepted - expect(validation.errors.join).to match(/authentication_transaction_id|transaction/i) - end - end - - context 'with valid input' do - it do - is_expected.to be_accepted - expect(validation.errors).to be_empty - end - - it 'returns expected keys' do - is_expected.to be_accepted - expect(validation.keys).to include('decision', 'authentication_transaction_id') - end - end - context 'validations' do let(:valid_validation_payload) {{}} diff --git a/spec/support/payloads.rb b/spec/support/payloads.rb index 902bac0..d5d54cd 100644 --- a/spec/support/payloads.rb +++ b/spec/support/payloads.rb @@ -19,6 +19,13 @@ cvv: 123 }} + let(:valid_three_d_secure_card_payload) {{ + card_holder: 'Card Holder', + card_number: '4000000000002503', + card_expiry: DateTime.new(2045, 2, 3).strftime('%m/%Y'), + cvv: 123 + }} + let(:customer_valid_payload) {{ first_name: 'Harrold', last_name: 'Humphries', From c0ed211013722bf0c835a95c5bccfac8a4c0ec31 Mon Sep 17 00:00:00 2001 From: devUniWork Date: Tue, 20 Jan 2026 21:49:52 +1000 Subject: [PATCH 04/12] tidy --- gemfiles/ruby3.4/Gemfile | 2 +- spec/lib/fat_zebra/three_d_secure_spec.rb | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/gemfiles/ruby3.4/Gemfile b/gemfiles/ruby3.4/Gemfile index 8fa7e43..e3dbe82 100644 --- a/gemfiles/ruby3.4/Gemfile +++ b/gemfiles/ruby3.4/Gemfile @@ -2,7 +2,7 @@ source 'http://rubygems.org' -ruby '3.4.7' +ruby '3.4.5' # Specify your gem's dependencies in FatZebra.gemspec gemspec path: '../../' diff --git a/spec/lib/fat_zebra/three_d_secure_spec.rb b/spec/lib/fat_zebra/three_d_secure_spec.rb index e0a3f0c..14b9867 100644 --- a/spec/lib/fat_zebra/three_d_secure_spec.rb +++ b/spec/lib/fat_zebra/three_d_secure_spec.rb @@ -51,7 +51,6 @@ let(:merchant_username) { "TEST "} - # reference_id is returned from setup; for stability we call setup here. let(:reference_id) do described_class.setup(card_token: credit_card.token).reference_id end From 667109c07fee67820155f1145bdcef854360d2f2 Mon Sep 17 00:00:00 2001 From: devUniWork Date: Tue, 20 Jan 2026 21:51:14 +1000 Subject: [PATCH 05/12] removed unnecessary file --- Gemfile.lock | 80 ---------------------------------------------------- 1 file changed, 80 deletions(-) delete mode 100644 Gemfile.lock diff --git a/Gemfile.lock b/Gemfile.lock deleted file mode 100644 index 478a45e..0000000 --- a/Gemfile.lock +++ /dev/null @@ -1,80 +0,0 @@ -PATH - remote: . - specs: - fat_zebra (3.2.4) - -GEM - remote: http://rubygems.org/ - specs: - addressable (2.8.1) - public_suffix (>= 2.0.2, < 6.0) - ast (2.4.2) - byebug (11.1.3) - coderay (1.1.3) - crack (0.4.5) - rexml - diff-lcs (1.5.0) - hashdiff (1.0.1) - jaro_winkler (1.5.4) - method_source (1.0.0) - parallel (1.22.1) - parser (3.1.2.1) - ast (~> 2.4.1) - powerpack (0.1.3) - pry (0.14.1) - coderay (~> 1.1) - method_source (~> 1.0) - pry-byebug (3.10.1) - byebug (~> 11.0) - pry (>= 0.13, < 0.15) - pry-rails (0.3.9) - pry (>= 0.10.4) - public_suffix (5.0.0) - rainbow (3.1.1) - rake (13.0.6) - rexml (3.2.5) - rspec (3.11.0) - rspec-core (~> 3.11.0) - rspec-expectations (~> 3.11.0) - rspec-mocks (~> 3.11.0) - rspec-core (3.11.0) - rspec-support (~> 3.11.0) - rspec-expectations (3.11.1) - diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.11.0) - rspec-mocks (3.11.1) - diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.11.0) - rspec-support (3.11.1) - rubocop (0.58.2) - jaro_winkler (~> 1.5.1) - parallel (~> 1.10) - parser (>= 2.5, != 2.5.1.1) - powerpack (~> 0.1) - rainbow (>= 2.2.2, < 4.0) - ruby-progressbar (~> 1.7) - unicode-display_width (~> 1.0, >= 1.0.1) - ruby-progressbar (1.11.0) - unicode-display_width (1.8.0) - vcr (3.0.3) - webmock (3.18.1) - addressable (>= 2.8.0) - crack (>= 0.3.2) - hashdiff (>= 0.4.0, < 2.0.0) - -PLATFORMS - ruby - -DEPENDENCIES - byebug - fat_zebra! - pry-byebug - pry-rails - rake - rspec (~> 3.6) - rubocop (~> 0.58.1) - vcr (~> 3.0) - webmock (~> 3.0) - -BUNDLED WITH - 2.2.3 From a9e437254ef440a7b217451bad4a7eae03d728da Mon Sep 17 00:00:00 2001 From: devUniWork Date: Tue, 20 Jan 2026 21:52:43 +1000 Subject: [PATCH 06/12] revertion --- gemfiles/ruby3.4/Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gemfiles/ruby3.4/Gemfile.lock b/gemfiles/ruby3.4/Gemfile.lock index c0890a6..ba579f1 100644 --- a/gemfiles/ruby3.4/Gemfile.lock +++ b/gemfiles/ruby3.4/Gemfile.lock @@ -84,7 +84,7 @@ DEPENDENCIES webmock RUBY VERSION - ruby 3.4.7p58 + ruby 3.4.5p51 BUNDLED WITH 2.6.9 From 37b3b9f7abd92fbf3b26c564f2f370096d8f37d0 Mon Sep 17 00:00:00 2001 From: devUniWork Date: Tue, 20 Jan 2026 21:54:13 +1000 Subject: [PATCH 07/12] sacrifice to the github action lords --- gemfiles/ruby3.2/Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gemfiles/ruby3.2/Gemfile b/gemfiles/ruby3.2/Gemfile index be70e91..f43e512 100644 --- a/gemfiles/ruby3.2/Gemfile +++ b/gemfiles/ruby3.2/Gemfile @@ -2,7 +2,7 @@ source 'http://rubygems.org' -ruby '3.2.9' +ruby '3.2.10' # Specify your gem's dependencies in FatZebra.gemspec gemspec path: '../../' From 2e3507c9d536ea4f9ec87119ddf91d5d0195f795 Mon Sep 17 00:00:00 2001 From: devUniWork Date: Tue, 20 Jan 2026 22:02:48 +1000 Subject: [PATCH 08/12] make ci run --- gemfiles/ruby3.2/Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gemfiles/ruby3.2/Gemfile.lock b/gemfiles/ruby3.2/Gemfile.lock index 081741e..447dfe0 100644 --- a/gemfiles/ruby3.2/Gemfile.lock +++ b/gemfiles/ruby3.2/Gemfile.lock @@ -83,7 +83,7 @@ DEPENDENCIES webmock RUBY VERSION - ruby 3.2.9p265 + ruby 3.2.10p266 BUNDLED WITH 2.4.19 From 7507bb62a8e1a2eda8c930c2fdd87dcdeac232f4 Mon Sep 17 00:00:00 2001 From: devUniWork Date: Tue, 20 Jan 2026 22:05:55 +1000 Subject: [PATCH 09/12] isolate pain --- .github/workflows/ci.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e73c12f..7d2ffd3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,6 +8,10 @@ on: - '*.*.*' pull_request: +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: false + jobs: build-and-test: runs-on: ubuntu-latest From 2b06ceb62713b73f0e6125500dfa597fb618c981 Mon Sep 17 00:00:00 2001 From: devUniWork Date: Tue, 20 Jan 2026 22:06:43 +1000 Subject: [PATCH 10/12] one pain at a time --- .github/workflows/ci.yml | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7d2ffd3..2aa2906 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,10 +8,6 @@ on: - '*.*.*' pull_request: -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: false - jobs: build-and-test: runs-on: ubuntu-latest @@ -19,8 +15,8 @@ jobs: matrix: ruby-version: - 3.2 - - 3.3 - - 3.4 +# - 3.3 +# - 3.4 steps: - uses: actions/checkout@v4 From cbe9b2854911a83db68718b70861df24c6e96f75 Mon Sep 17 00:00:00 2001 From: devUniWork Date: Tue, 20 Jan 2026 22:08:14 +1000 Subject: [PATCH 11/12] rubocop'd --- lib/fat_zebra/three_d_secure.rb | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/fat_zebra/three_d_secure.rb b/lib/fat_zebra/three_d_secure.rb index e854f49..f025578 100644 --- a/lib/fat_zebra/three_d_secure.rb +++ b/lib/fat_zebra/three_d_secure.rb @@ -35,7 +35,7 @@ class ThreeDSecure < APIResource ].freeze CHECK_ENROLLMENT_REQUIRED_FIELDS.each do |field| - validates field, required: true, on: :check_enrollment + validates field, required: true, on: :check_enrollment end VALIDATE_AUTHENTICATION_REQUIRED_FIELDS = %i[ @@ -52,13 +52,13 @@ class ThreeDSecure < APIResource class << self - def resource_name - 'three_d_secure' - end + def resource_name + 'three_d_secure' + end - def resource_path - "/sdk/#{resource_name}" - end + def resource_path + "/sdk/#{resource_name}" + end ## # Sets up a 3ds request From 68766c9a92b95d4c65172464c49fbc328e16496d Mon Sep 17 00:00:00 2001 From: devUniWork Date: Tue, 20 Jan 2026 22:11:14 +1000 Subject: [PATCH 12/12] bump bump bump --- .github/workflows/ci.yml | 4 ++-- gemfiles/ruby3.3/Gemfile | 2 +- gemfiles/ruby3.4/Gemfile | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2aa2906..e73c12f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -15,8 +15,8 @@ jobs: matrix: ruby-version: - 3.2 -# - 3.3 -# - 3.4 + - 3.3 + - 3.4 steps: - uses: actions/checkout@v4 diff --git a/gemfiles/ruby3.3/Gemfile b/gemfiles/ruby3.3/Gemfile index a929e7c..9f6a5f2 100644 --- a/gemfiles/ruby3.3/Gemfile +++ b/gemfiles/ruby3.3/Gemfile @@ -2,7 +2,7 @@ source 'http://rubygems.org' -ruby '3.3.9' +ruby '3.3.10' # Specify your gem's dependencies in FatZebra.gemspec gemspec path: '../../' diff --git a/gemfiles/ruby3.4/Gemfile b/gemfiles/ruby3.4/Gemfile index e3dbe82..aeaa2eb 100644 --- a/gemfiles/ruby3.4/Gemfile +++ b/gemfiles/ruby3.4/Gemfile @@ -2,7 +2,7 @@ source 'http://rubygems.org' -ruby '3.4.5' +ruby '3.4.8' # Specify your gem's dependencies in FatZebra.gemspec gemspec path: '../../'