From 8653b16a4c363dbb409735aa84a3b33911f56ced Mon Sep 17 00:00:00 2001 From: mvarlic Date: Mon, 2 Jun 2025 17:54:39 -0500 Subject: [PATCH 1/3] feat: add classes to query for a bin --- .../sdk/webpay/oneclick/mall_bin_info.rb | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 lib/transbank/sdk/webpay/oneclick/mall_bin_info.rb diff --git a/lib/transbank/sdk/webpay/oneclick/mall_bin_info.rb b/lib/transbank/sdk/webpay/oneclick/mall_bin_info.rb new file mode 100644 index 0000000..e628b2c --- /dev/null +++ b/lib/transbank/sdk/webpay/oneclick/mall_bin_info.rb @@ -0,0 +1,48 @@ +module Transbank + module Webpay + module Oneclick + class MallBinInfo < ::Transbank::Common::BaseTransaction + private_class_method :new + RESOURCES_URL = ::Transbank::Common::ApiConstants::ONECLICK_ENDPOINT + QUERY_BIN_ENDPOINT = (RESOURCES_URL + '/bin_info').freeze + + def initialize(options) + super + end + + def self.new(options) + super(options) + end + + def self.build_for_integration(commerce_code, api_key) + options = Options.new( + commerce_code, + api_key, + :integration + ) + + new(options) + end + + def self.build_for_production(commerce_code, api_key) + options = Options.new( + commerce_code, + api_key, + :production + ) + new(options) + end + + def query_bin(tbk_user) + Transbank::Common::Validation.has_text_with_max_length(tbk_user, Transbank::Common::ApiConstants::TBK_USER_LENGTH, "tbk_user") + + request_service = ::Transbank::Shared::RequestService.new( + @environment, QUERY_BIN_ENDPOINT, @commerce_code, @api_key, @timeout + ) + request_service.post({ tbk_user: tbk_user }) + end + + end + end + end +end From b14008ce5e73c72d72dbb8c8be1216a5a89da587 Mon Sep 17 00:00:00 2001 From: mvarlic Date: Mon, 2 Jun 2025 17:55:13 -0500 Subject: [PATCH 2/3] feat: add classes query bin reference --- lib/transbank/sdk.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/transbank/sdk.rb b/lib/transbank/sdk.rb index 99b4c36..17285b1 100644 --- a/lib/transbank/sdk.rb +++ b/lib/transbank/sdk.rb @@ -20,9 +20,9 @@ require 'transbank/sdk/webpay/oneclick/mall_transaction' require 'transbank/sdk/webpay/oneclick/mall_inscription' +require 'transbank/sdk/webpay/oneclick/mall_bin_info' require 'transbank/sdk/webpay/transaccion_completa/transaction' require 'transbank/sdk/webpay/transaccion_completa/mall_transaction' require 'transbank/sdk/patpass/patpass_comercio/inscription' - From 1b575910f2231abe26e8194af2e168bad17088ba Mon Sep 17 00:00:00 2001 From: mvarlic Date: Mon, 2 Jun 2025 17:55:45 -0500 Subject: [PATCH 3/3] test: add test for bin info --- test/transbank/oneclick/mall_bin_info_test.rb | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 test/transbank/oneclick/mall_bin_info_test.rb diff --git a/test/transbank/oneclick/mall_bin_info_test.rb b/test/transbank/oneclick/mall_bin_info_test.rb new file mode 100644 index 0000000..6d954d2 --- /dev/null +++ b/test/transbank/oneclick/mall_bin_info_test.rb @@ -0,0 +1,47 @@ +require 'test_helper' +require 'webmock/minitest' + +class MallBinInfoTest < Transbank::WebPayPlus::Test + def setup + @query_bin_url = "https://webpay3gint.transbank.cl/rswebpaytransaction/api/oneclick/v1.2/bin_info" + @tbk_user_valid = "tbk_user_123" + @tbk_user_invalid = "A" * (Transbank::Common::ApiConstants::TBK_USER_LENGTH + 1) + + + @mock_response = { + bin_issuer: "TEST COMMERCE BANK", + bin_payment_type: "Credito", + bin_brand: "Visa" + }.to_json + + stub_request(:post, @query_bin_url) + .with(body: { tbk_user: @tbk_user_valid }.to_json, headers: { 'Content-Type' => 'application/json' }) + .to_return(status: 200, body: @mock_response) + + WebMock.disable_net_connect! + end + + def test_query_bin_success + transaction = Transbank::Webpay::Oneclick::MallBinInfo.build_for_integration( + Transbank::Common::IntegrationCommerceCodes::ONECLICK_MALL, + Transbank::Common::IntegrationApiKeys::WEBPAY + ) + response = transaction.query_bin(@tbk_user_valid) + assert_equal "Visa", response["bin_brand"] + assert_equal "Credito", response["bin_payment_type"] + end + + def test_query_bin_raises_error_when_tbk_user_is_too_long + transaction = Transbank::Webpay::Oneclick::MallBinInfo.build_for_integration( + Transbank::Common::IntegrationCommerceCodes::ONECLICK_MALL, + Transbank::Common::IntegrationApiKeys::WEBPAY + ) + + error = assert_raises Transbank::Shared::TransbankError do + transaction.query_bin(@tbk_user_invalid) + end + + expected_message = "tbk_user is too long, the maximum length is #{Transbank::Common::ApiConstants::TBK_USER_LENGTH}" + assert_equal expected_message, error.message + end +end