transbank-sdk 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE/reporte-de-error.md +40 -0
  3. data/.gitignore +3 -1
  4. data/.travis.yml +2 -0
  5. data/CHANGELOG.md +4 -0
  6. data/Makefile +1 -1
  7. data/lib/transbank/sdk.rb +5 -5
  8. data/lib/transbank/sdk/oneclick/errors/oneclick_error.rb +16 -0
  9. data/lib/transbank/sdk/oneclick/inscription/errors/mall_inscription_delete_error.rb +16 -0
  10. data/lib/transbank/sdk/oneclick/inscription/errors/mall_inscription_finish_error.rb +16 -0
  11. data/lib/transbank/sdk/oneclick/inscription/errors/mall_inscription_start_error.rb +16 -0
  12. data/lib/transbank/sdk/oneclick/inscription/errors/oneclick_mall_inscription_errors.rb +3 -0
  13. data/lib/transbank/sdk/oneclick/inscription/inscription.rb +3 -0
  14. data/lib/transbank/sdk/oneclick/inscription/responses/mall_inscription_delete_response.rb +18 -0
  15. data/lib/transbank/sdk/oneclick/inscription/responses/mall_inscription_finish_response.rb +15 -0
  16. data/lib/transbank/sdk/oneclick/inscription/responses/mall_inscription_start_response.rb +14 -0
  17. data/lib/transbank/sdk/oneclick/inscription/responses/oneclick_mall_inscription_responses.rb +3 -0
  18. data/lib/transbank/sdk/oneclick/mall/base.rb +51 -0
  19. data/lib/transbank/sdk/oneclick/mall/errors/mall_transaction_authorize_error.rb +16 -0
  20. data/lib/transbank/sdk/oneclick/mall/errors/mall_transaction_refund_error.rb +16 -0
  21. data/lib/transbank/sdk/oneclick/mall/errors/mall_transaction_status_error.rb +16 -0
  22. data/lib/transbank/sdk/oneclick/mall/errors/oneclick_mall_errors.rb +3 -0
  23. data/lib/transbank/sdk/oneclick/mall/mall_inscription.rb +73 -0
  24. data/lib/transbank/sdk/oneclick/mall/mall_transaction.rb +97 -0
  25. data/lib/transbank/sdk/oneclick/mall/oneclick_mall.rb +5 -0
  26. data/lib/transbank/sdk/oneclick/mall/responses/mall_transaction_authorize_response.rb +16 -0
  27. data/lib/transbank/sdk/oneclick/mall/responses/mall_transaction_refund_response.rb +16 -0
  28. data/lib/transbank/sdk/oneclick/mall/responses/mall_transaction_status_response.rb +15 -0
  29. data/lib/transbank/sdk/oneclick/mall/responses/oneclick_mall_responses.rb +3 -0
  30. data/lib/transbank/sdk/oneclick/oneclick.rb +3 -0
  31. data/lib/transbank/sdk/onepay/models/item.rb +1 -1
  32. data/lib/transbank/sdk/onepay/models/refund.rb +4 -5
  33. data/lib/transbank/sdk/onepay/models/shopping_cart.rb +1 -1
  34. data/lib/transbank/sdk/onepay/models/transaction.rb +11 -9
  35. data/lib/transbank/sdk/onepay/requests/request.rb +1 -1
  36. data/lib/transbank/sdk/onepay/responses/response.rb +1 -1
  37. data/lib/transbank/sdk/transaccion_completa/base.rb +49 -0
  38. data/lib/transbank/sdk/transaccion_completa/errors/transaccion_completa_error.rb +16 -0
  39. data/lib/transbank/sdk/transaccion_completa/errors/transaccion_completa_errors.rb +6 -0
  40. data/lib/transbank/sdk/transaccion_completa/errors/transaction_commit_error.rb +14 -0
  41. data/lib/transbank/sdk/transaccion_completa/errors/transaction_create_error.rb +14 -0
  42. data/lib/transbank/sdk/transaccion_completa/errors/transaction_installments_error.rb +14 -0
  43. data/lib/transbank/sdk/transaccion_completa/errors/transaction_refund_error.rb +14 -0
  44. data/lib/transbank/sdk/transaccion_completa/errors/transaction_status_error.rb +14 -0
  45. data/lib/transbank/sdk/transaccion_completa/options.rb +7 -0
  46. data/lib/transbank/sdk/transaccion_completa/responses/transaccion_completa_responses.rb +5 -0
  47. data/lib/transbank/sdk/transaccion_completa/responses/transaction_commit_response.rb +16 -0
  48. data/lib/transbank/sdk/transaccion_completa/responses/transaction_create_response.rb +10 -0
  49. data/lib/transbank/sdk/transaccion_completa/responses/transaction_installments_response.rb +13 -0
  50. data/lib/transbank/sdk/transaccion_completa/responses/transaction_refund_response.rb +14 -0
  51. data/lib/transbank/sdk/transaccion_completa/responses/transaction_status_response.rb +16 -0
  52. data/lib/transbank/sdk/transaccion_completa/transaccion_completa.rb +5 -0
  53. data/lib/transbank/sdk/transaccion_completa/transaction.rb +117 -0
  54. data/lib/transbank/sdk/transbank_error.rb +6 -0
  55. data/lib/transbank/sdk/utils/json_utils.rb +75 -0
  56. data/lib/transbank/sdk/utils/net_helper.rb +82 -0
  57. data/lib/transbank/sdk/{onepay/utils → utils}/request_builder.rb +0 -0
  58. data/lib/transbank/sdk/{onepay/utils → utils}/signature_utils.rb +0 -0
  59. data/lib/transbank/sdk/utils/utils.rb +9 -0
  60. data/lib/transbank/sdk/version.rb +1 -1
  61. data/lib/transbank/sdk/webpay/errors/integration_type_error.rb +8 -0
  62. data/lib/transbank/sdk/webpay/errors/webpay_error.rb +14 -0
  63. data/transbank-sdk.gemspec +1 -1
  64. metadata +56 -10
  65. data/lib/transbank/sdk/onepay/utils/json_utils.rb +0 -77
  66. data/lib/transbank/sdk/onepay/utils/net_helper.rb +0 -38
  67. data/lib/transbank/sdk/onepay/utils/utils.rb +0 -9
@@ -0,0 +1,5 @@
1
+ require 'transbank/sdk/oneclick/mall/errors/oneclick_mall_errors'
2
+ require 'transbank/sdk/oneclick/mall/responses/oneclick_mall_responses'
3
+ require 'transbank/sdk/oneclick/mall/base'
4
+ require 'transbank/sdk/oneclick/mall/mall_inscription'
5
+ require 'transbank/sdk/oneclick/mall/mall_transaction'
@@ -0,0 +1,16 @@
1
+ module Transbank
2
+ module Webpay
3
+ module Oneclick
4
+ class MallTransactionAuthorizeResponse
5
+ FIELDS = [:buy_order, :session_id, :card_detail, :expiration_date,
6
+ :accounting_date, :transaction_date, :details]
7
+
8
+ attr_accessor *FIELDS
9
+
10
+ def initialize(json)
11
+ FIELDS.each {|field| send("#{field}=", json["#{field}"]) }
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ module Transbank
2
+ module Webpay
3
+ module Oneclick
4
+ class MallTransactionRefundResponse
5
+ FIELDS = [:type, :authorization_code, :authorization_date,
6
+ :nullified_amount, :balance, :response_code]
7
+
8
+ attr_accessor *FIELDS
9
+
10
+ def initialize(json)
11
+ FIELDS.each {|field| send("#{field}=", json["#{field}"]) }
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,15 @@
1
+ module Transbank
2
+ module Webpay
3
+ module Oneclick
4
+ class MallTransactionStatusResponse
5
+ FIELDS = [:buy_order, :session_id, :card_detail, :expiration_date,
6
+ :accounting_date, :transaction_date, :details]
7
+ attr_accessor *FIELDS
8
+
9
+ def initialize(json)
10
+ FIELDS.each {|field| send("#{field}=", json["#{field}"]) }
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,3 @@
1
+ require 'transbank/sdk/oneclick/mall/responses/mall_transaction_authorize_response'
2
+ require 'transbank/sdk/oneclick/mall/responses/mall_transaction_status_response'
3
+ require 'transbank/sdk/oneclick/mall/responses/mall_transaction_refund_response'
@@ -0,0 +1,3 @@
1
+ require 'transbank/sdk/oneclick/errors/oneclick_error'
2
+ require 'transbank/sdk/oneclick/inscription/inscription'
3
+ require 'transbank/sdk/oneclick/mall/oneclick_mall'
@@ -1,7 +1,7 @@
1
1
  module Transbank
2
2
  module Onepay
3
3
  class Item
4
- include Utils::JSONUtils
4
+ include Transbank::Utils::JSONUtils
5
5
  # An Item to be purchased by the user, and to be added to a [ShoppingCart]
6
6
 
7
7
  # @return [String] An item's description
@@ -1,7 +1,7 @@
1
1
  module Transbank
2
2
  module Onepay
3
3
  class Refund
4
- extend Utils::NetHelper, Utils::RequestBuilder
4
+ extend Transbank::Utils::NetHelper, Utils::RequestBuilder
5
5
  # Manages Refunds
6
6
  REFUND_TRANSACTION = 'nullifytransaction'.freeze
7
7
  TRANSACTION_BASE_PATH = '/ewallet-plugin-api-services/services/transactionservice/'.freeze
@@ -24,13 +24,12 @@ module Transbank
24
24
  external_unique_number: external_unique_number,
25
25
  authorization_code: authorization_code,
26
26
  options: options)
27
- response = http_post(refund_path, refund_request.to_h)
28
-
29
- if response.nil? || !response['responseCode']
27
+ response = http_post(uri_string: refund_path, body: refund_request.to_h)
28
+ if response.nil? || !JSON.parse(response.body)['responseCode']
30
29
  raise Errors::RefundCreateError, 'Could not obtain a response from the service.'
31
30
  end
32
31
 
33
- refund_create_response = RefundCreateResponse.new(response)
32
+ refund_create_response = RefundCreateResponse.new(JSON.parse(response.body))
34
33
 
35
34
  unless refund_create_response.response_ok?
36
35
  raise Errors::RefundCreateError, refund_create_response.full_description
@@ -2,7 +2,7 @@ module Transbank
2
2
  module Onepay
3
3
  # Represents a Shopping Cart, which contains [Item]s that the user wants to buy
4
4
  class ShoppingCart
5
- include Utils::JSONUtils
5
+ include Transbank::Utils::JSONUtils
6
6
 
7
7
  # @return [Array<Item>] An [Array<Item>] with the [ShoppingCart] contents
8
8
  attr_reader :items
@@ -3,7 +3,7 @@ module Transbank
3
3
  ## Class Transaction
4
4
  # This class creates or commits a Transaction (that is, a purchase)
5
5
  class Transaction
6
- extend Utils::NetHelper, Utils::RequestBuilder
6
+ extend Transbank::Utils::NetHelper, Utils::RequestBuilder
7
7
 
8
8
  SEND_TRANSACTION = 'sendtransaction'.freeze
9
9
  COMMIT_TRANSACTION = 'gettransactionnumber'.freeze
@@ -40,9 +40,9 @@ module Transbank
40
40
  channel: channel,
41
41
  external_unique_number: external_unique_number,
42
42
  options: options)
43
- response = http_post(transaction_create_path, create_request.to_h)
43
+ response = http_post(uri_string: transaction_create_path, body: create_request.to_h)
44
44
  validate_create_response!(response)
45
- transaction_create_response = TransactionCreateResponse.new response
45
+ transaction_create_response = TransactionCreateResponse.new JSON.parse(response.body)
46
46
  signature_is_valid = transaction_create_response.valid_signature?(options.fetch(:shared_secret))
47
47
  unless signature_is_valid
48
48
  raise Errors::SignatureError, "The response's signature is not valid."
@@ -62,9 +62,9 @@ module Transbank
62
62
  commit_request = commit_transaction(occ: occ,
63
63
  external_unique_number: external_unique_number,
64
64
  options: options)
65
- response = http_post(transaction_commit_path, commit_request.to_h)
65
+ response = http_post(uri_string: transaction_commit_path, body: commit_request.to_h)
66
66
  validate_commit_response!(response)
67
- transaction_commit_response = TransactionCommitResponse.new(response)
67
+ transaction_commit_response = TransactionCommitResponse.new(JSON.parse(response.body))
68
68
  signature_is_valid = transaction_commit_response.valid_signature?(options.fetch(:shared_secret))
69
69
  unless signature_is_valid
70
70
  raise Errors::SignatureError, "The response's signature is not valid."
@@ -101,8 +101,9 @@ module Transbank
101
101
  raise Errors::TransactionCommitError, 'Could not obtain a response from the service.'
102
102
  end
103
103
 
104
- unless response.fetch('responseCode') == 'OK'
105
- msg = "#{response.fetch('responseCode')} : #{response.fetch('description')}"
104
+ unless JSON.parse(response.body).fetch('responseCode') == 'OK'
105
+ body = JSON.parse(response.body)
106
+ msg = "#{body.fetch('responseCode')} : #{body.fetch('description')}"
106
107
  raise Errors::TransactionCommitError, msg
107
108
  end
108
109
  response
@@ -113,8 +114,9 @@ module Transbank
113
114
  raise Errors::TransactionCreateError, 'Could not obtain a response from the service.'
114
115
  end
115
116
 
116
- unless response.fetch('responseCode') == 'OK'
117
- msg = "#{response.fetch('responseCode')} : #{response['description']}"
117
+ unless JSON.parse(response.body).fetch('responseCode') == 'OK'
118
+ body = JSON.parse(response.body)
119
+ msg = "#{body.fetch('responseCode')} : #{body['description']}"
118
120
  raise Errors::TransactionCreateError, msg
119
121
  end
120
122
  response
@@ -2,7 +2,7 @@ module Transbank
2
2
  module Onepay
3
3
  # Base module with methods & attributes common to Requests
4
4
  module Request
5
- include Utils::JSONUtils, Utils::SignatureUtils
5
+ include Transbank::Utils::JSONUtils, Utils::SignatureUtils
6
6
  attr_accessor :api_key
7
7
  attr_accessor :app_key
8
8
 
@@ -2,7 +2,7 @@ module Transbank
2
2
  module Onepay
3
3
  # Shared methods and attributes between all types of Responses
4
4
  module Response
5
- include Utils::SignatureUtils, Utils::JSONUtils
5
+ include Utils::SignatureUtils, Transbank::Utils::JSONUtils
6
6
  attr_accessor :response_code
7
7
  attr_accessor :description
8
8
 
@@ -0,0 +1,49 @@
1
+ module Transbank
2
+ module TransaccionCompleta
3
+ class Base
4
+
5
+ DEFAULT_API_KEY = '579B532A7440BB0C9079DED94D31EA1615BACEB56610332264630D42D0A36B1C'.freeze
6
+ DEFAULT_COMMERCE_CODE = '597055555530'.freeze
7
+
8
+ DEFAULT_MALL_COMMERCE_CODE = '597055555551'.freeze
9
+ DEFAULT_MALL_CHILD_COMMERCE_CODES = ['597055555552'.freeze, '597055555553'.freeze].freeze
10
+
11
+ @api_key = DEFAULT_API_KEY
12
+ @commerce_code = DEFAULT_COMMERCE_CODE
13
+ @integration_type = :TEST
14
+ @integration_types = {
15
+ LIVE: "https://webpay3g.transbank.cl/",
16
+ TEST: "https://webpay3gint.transbank.cl/"
17
+ }
18
+ class << self
19
+ attr_reader :integration_types
20
+ attr_accessor :api_key, :integration_type, :commerce_code
21
+
22
+
23
+ def integration_type_url(integration_type)
24
+ type = integration_type.upcase.to_sym
25
+ return @integration_types[type] unless @integration_types[type].nil?
26
+ valid_values = @integration_types.keys.join(', ')
27
+ raise Transbank::Webpay::Errors::IntegrationTypeError, "Invalid integration type, valid values are #{valid_values}"
28
+ end
29
+
30
+ def current_integration_type_url
31
+ @integration_types[@integration_type]
32
+ end
33
+
34
+ def integration_type=(integration_type)
35
+ type = integration_type.upcase.to_sym
36
+ return @integration_type = type unless @integration_types[type].nil?
37
+ valid_values = @integration_types.keys.join(', ')
38
+ raise Transbank::Webpay::Errors::IntegrationTypeError, "Invalid integration type, valid values are #{valid_values}"
39
+ end
40
+
41
+ def configure_for_testing
42
+ @api_key = DEFAULT_API_KEY
43
+ @commerce_code = DEFAULT_COMMERCE_CODE
44
+ self.integration_type = :TEST
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,16 @@
1
+ module Transbank
2
+ module TransaccionCompleta
3
+ module Errors
4
+ class TransaccionCompletaError < ::Transbank::Errors::TransbankError
5
+ attr_accessor :code, :message
6
+
7
+ def initialize(message, code = nil)
8
+ @message = message
9
+ @code = code
10
+ super(message)
11
+ end
12
+
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,6 @@
1
+ require 'transbank/sdk/transaccion_completa/errors/transaccion_completa_error'
2
+ require 'transbank/sdk/transaccion_completa/errors/transaction_create_error'
3
+ require 'transbank/sdk/transaccion_completa/errors/transaction_commit_error'
4
+ require 'transbank/sdk/transaccion_completa/errors/transaction_installments_error'
5
+ require 'transbank/sdk/transaccion_completa/errors/transaction_refund_error'
6
+ require 'transbank/sdk/transaccion_completa/errors/transaction_status_error'
@@ -0,0 +1,14 @@
1
+ module Transbank
2
+ module TransaccionCompleta
3
+ module Errors
4
+ class TransactionCommitError < TransaccionCompletaError
5
+ attr_accessor :message, :code
6
+ def initialize(message, code = nil)
7
+ self.message = message
8
+ self.code = code
9
+ super(message)
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ module Transbank
2
+ module TransaccionCompleta
3
+ module Errors
4
+ class TransactionCreateError < TransaccionCompletaError
5
+ attr_accessor :message, :code
6
+ def initialize(message, code = nil)
7
+ self.message = message
8
+ self.code = code
9
+ super(message)
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ module Transbank
2
+ module TransaccionCompleta
3
+ module Errors
4
+ class TransactionInstallmentsError < TransaccionCompletaError
5
+ attr_accessor :message, :code
6
+ def initialize(message, code = nil)
7
+ self.message = message
8
+ self.code = code
9
+ super(message)
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ module Transbank
2
+ module TransaccionCompleta
3
+ module Errors
4
+ class TransactionRefundError < TransaccionCompletaError
5
+ attr_accessor :message, :code
6
+ def initialize(message, code = nil)
7
+ self.message = message
8
+ self.code = code
9
+ super(message)
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ module Transbank
2
+ module TransaccionCompleta
3
+ module Errors
4
+ class TransactionStatusError < TransaccionCompletaError
5
+ attr_accessor :message, :code
6
+ def initialize(message, code = nil)
7
+ self.message = message
8
+ self.code = code
9
+ super(message)
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,7 @@
1
+ module Transbank
2
+ module TransaccionCompleta
3
+ class Options
4
+ attr_accessor :api_key, :commerce_code, :integration_type
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,5 @@
1
+ require 'transbank/sdk/transaccion_completa/responses/transaction_commit_response'
2
+ require 'transbank/sdk/transaccion_completa/responses/transaction_create_response'
3
+ require 'transbank/sdk/transaccion_completa/responses/transaction_installments_response'
4
+ require 'transbank/sdk/transaccion_completa/responses/transaction_status_response'
5
+ require 'transbank/sdk/transaccion_completa/responses/transaction_refund_response'
@@ -0,0 +1,16 @@
1
+ module Transbank
2
+ module TransaccionCompleta
3
+ class TransactionCommitResponse
4
+ FIELDS = %i(
5
+ vci amount status buy_order session_id card_number
6
+ accounting_date transaction_date authorization_code
7
+ payment_type_code response_code installments_number
8
+ installments_amount balance
9
+ )
10
+ attr_accessor *FIELDS
11
+ def initialize(json)
12
+ FIELDS.each { |field| send("#{field}=", json["#{field}"])}
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,10 @@
1
+ module Transbank
2
+ module TransaccionCompleta
3
+ class TransactionCreateResponse
4
+ attr_accessor :token
5
+ def initialize(json)
6
+ @token = json['token']
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,13 @@
1
+ module Transbank
2
+ module TransaccionCompleta
3
+ class TransactionInstallmentsResponse
4
+ attr_accessor :installments_amount, :id_query_installments,
5
+ :deferred_periods
6
+ def initialize(json)
7
+ @installments_amount = json['installments_amount']
8
+ @id_query_installments = json['id_query_installments']
9
+ @deferred_periods = json['deferred_periods']
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,14 @@
1
+ module Transbank
2
+ module TransaccionCompleta
3
+ class TransactionRefundResponse
4
+ FIELDS = %i(
5
+ type authorization_code authorization_date
6
+ nullified_amount balance response_code
7
+ )
8
+ attr_accessor *FIELDS
9
+ def initialize(json)
10
+ FIELDS.each { |field| send("#{field}=", json["#{field}"])}
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,16 @@
1
+ module Transbank
2
+ module TransaccionCompleta
3
+ class TransactionStatusResponse
4
+ FIELDS = %i(
5
+ vci amount status buy_order session_id card_number
6
+ accounting_date transaction_date authorization_code
7
+ payment_type_code response_code installments_number
8
+ installments_amount balance
9
+ )
10
+ attr_accessor *FIELDS
11
+ def initialize(json)
12
+ FIELDS.each { |field| send("#{field}=", json["#{field}"])}
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,5 @@
1
+ require 'transbank/sdk/transaccion_completa/errors/transaccion_completa_errors'
2
+ require 'transbank/sdk/transaccion_completa/responses/transaccion_completa_responses'
3
+ require 'transbank/sdk/transaccion_completa/options'
4
+ require 'transbank/sdk/transaccion_completa/base'
5
+ require 'transbank/sdk/transaccion_completa/transaction'
@@ -0,0 +1,117 @@
1
+ module Transbank
2
+ module TransaccionCompleta
3
+ class Transaction
4
+ extend Utils::NetHelper
5
+
6
+ CREATE_TRANSACTION_ENDPOINT = 'rswebpaytransaction/api/webpay/v1.0/transactions'
7
+ TRANSACTION_INSTALLMENTS_ENDPOINT = 'rswebpaytransaction/api/webpay/v1.0/transactions/:token/installments'
8
+ COMMIT_TRANSACTION_ENDPOINT = 'rswebpaytransaction/api/webpay/v1.0/transactions/:token'
9
+ TRANSACTION_STATUS_ENDPOINT = 'rswebpaytransaction/api/webpay/v1.0/transactions/:token'
10
+ REFUND_TRANSACTION_ENDPOINT = 'rswebpaytransaction/api/webpay/v1.0/transactions/:token/refunds'
11
+
12
+ class << self
13
+ def create(buy_order:, session_id:, amount:, card_number:, cvv:,
14
+ card_expiration_date:, options:nil)
15
+ api_key = options&.api_key || default_integration_params[:api_key]
16
+ commerce_code = options&.commerce_code || default_integration_params[:commerce_code]
17
+ integration_type = options&.integration_type || default_integration_params[:integration_type]
18
+ base_url = integration_type.nil? ? TransaccionCompleta::Base::integration_type[:TEST] : TransaccionCompleta::Base.integration_type_url(integration_type)
19
+
20
+ body = {
21
+ buy_order: buy_order, session_id: session_id,
22
+ amount: amount, card_number: card_number, cvv: cvv,
23
+ card_expiration_date: card_expiration_date
24
+ }
25
+
26
+ url = base_url + CREATE_TRANSACTION_ENDPOINT
27
+ headers = webpay_headers(commerce_code: commerce_code, api_key: api_key)
28
+ resp = http_post(uri_string: url, body: body, headers: headers, camel_case_keys: false)
29
+ body = JSON.parse(resp.body)
30
+ return ::Transbank::TransaccionCompleta::TransactionCreateResponse.new(body) if resp.kind_of? Net::HTTPSuccess
31
+ raise Errors::TransactionCreateError.new(body['error_message'], resp.code)
32
+ end
33
+
34
+ def installments(token:, installments_number:, options:nil)
35
+ api_key = options&.api_key || default_integration_params[:api_key]
36
+ commerce_code = options&.commerce_code || default_integration_params[:commerce_code]
37
+ integration_type = options&.integration_type || default_integration_params[:integration_type]
38
+ base_url = integration_type.nil? ? TransaccionCompleta::Base::integration_type[:TEST] : TransaccionCompleta::Base.integration_type_url(integration_type)
39
+
40
+ url = base_url + TRANSACTION_INSTALLMENTS_ENDPOINT.gsub(':token', token)
41
+ headers = webpay_headers(commerce_code: commerce_code, api_key: api_key)
42
+
43
+ body = {installments_number: installments_number}
44
+
45
+ resp = http_post(uri_string: url, body: body, headers: headers, camel_case_keys: false)
46
+ body = JSON.parse(resp.body)
47
+ return ::Transbank::TransaccionCompleta::TransactionInstallmentsResponse.new(body) if resp.kind_of? Net::HTTPSuccess
48
+ raise Errors::TransactionInstallmentsError.new(body['error_message'], resp.code)
49
+ end
50
+
51
+ def commit(token:, id_query_installments:, deferred_period_index:,
52
+ grace_period:, options:nil)
53
+ api_key = options&.api_key || default_integration_params[:api_key]
54
+ commerce_code = options&.commerce_code || default_integration_params[:commerce_code]
55
+ integration_type = options&.integration_type || default_integration_params[:integration_type]
56
+ base_url = integration_type.nil? ? TransaccionCompleta::Base::integration_type[:TEST] : TransaccionCompleta::Base.integration_type_url(integration_type)
57
+
58
+ url = base_url + COMMIT_TRANSACTION_ENDPOINT.gsub(':token', token)
59
+ headers = webpay_headers(commerce_code: commerce_code, api_key: api_key)
60
+ body = {
61
+ id_query_installments: id_query_installments,
62
+ deferred_period_index: deferred_period_index,
63
+ grace_period: grace_period
64
+ }
65
+
66
+ resp = http_put(uri_string: url, body: body, headers: headers)
67
+ body = JSON.parse(resp.body)
68
+ return ::Transbank::TransaccionCompleta::TransactionCommitResponse.new(body) if resp.kind_of? Net::HTTPSuccess
69
+ raise Errors::TransactionCommitError.new(body['error_message'], resp.code)
70
+ end
71
+
72
+ def status(token:, options: nil)
73
+ api_key = options&.api_key || default_integration_params[:api_key]
74
+ commerce_code = options&.commerce_code || default_integration_params[:commerce_code]
75
+ integration_type = options&.integration_type || default_integration_params[:integration_type]
76
+ base_url = integration_type.nil? ? TransaccionCompleta::Base::integration_type[:TEST] : TransaccionCompleta::Base.integration_type_url(integration_type)
77
+
78
+ url = base_url + TRANSACTION_STATUS_ENDPOINT.gsub(':token', token)
79
+ headers = webpay_headers(commerce_code: commerce_code, api_key: api_key)
80
+ resp = http_get(uri_string: url, headers: headers)
81
+ body = JSON.parse(resp.body)
82
+ return ::Transbank::TransaccionCompleta::TransactionStatusResponse.new(body) if resp.kind_of? Net::HTTPSuccess
83
+ raise Errors::TransactionStatusError.new(body['error_message'], resp.code)
84
+ end
85
+
86
+ def refund(token:, amount:, options:nil)
87
+ api_key = options&.api_key || default_integration_params[:api_key]
88
+ commerce_code = options&.commerce_code || default_integration_params[:commerce_code]
89
+ integration_type = options&.integration_type || default_integration_params[:integration_type]
90
+ base_url = integration_type.nil? ? TransaccionCompleta::Base::integration_type[:TEST] : TransaccionCompleta::Base.integration_type_url(integration_type)
91
+
92
+ body = {
93
+ amount: amount
94
+ }
95
+
96
+ url = base_url + REFUND_TRANSACTION_ENDPOINT.gsub(':token', token)
97
+ headers = webpay_headers(commerce_code: commerce_code, api_key: api_key)
98
+ resp = http_post(uri_string: url, body: body, headers: headers, camel_case_keys: false)
99
+ body = JSON.parse(resp.body)
100
+ return ::Transbank::TransaccionCompleta::TransactionRefundResponse.new(body) if resp.kind_of? Net::HTTPSuccess
101
+ raise Errors::TransactionRefundError.new(body['error_message'], resp.code)
102
+ end
103
+
104
+ def default_integration_params
105
+ {
106
+ api_key: TransaccionCompleta::Base::DEFAULT_API_KEY,
107
+ commerce_code: TransaccionCompleta::Base::DEFAULT_COMMERCE_CODE,
108
+ integration_type: TransaccionCompleta::Base::integration_type,
109
+ base_url: TransaccionCompleta::Base::current_integration_type_url
110
+ }
111
+ end
112
+ end
113
+ end
114
+ end
115
+ end
116
+
117
+