transbank-sdk 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 33b621b2e0a716808e5c98f3a76188d3816c094188e8e094f6b8b097b842687f
4
- data.tar.gz: a88d80d79d4723224d988ccc258642efa8a4902c95535b2d1b3f8ead77948c2a
3
+ metadata.gz: 9c8e254a610d8744915cc56245533ad60f94a1c1a37c786c9eaefe458deaedb4
4
+ data.tar.gz: '029809591bbd27cdefc7a1dad7f5411f592387dddc430fc81c819fcde135031a'
5
5
  SHA512:
6
- metadata.gz: 370f178eace68097e53e81dc271178235480213460d0ca7c81df213c4d3d6b705cfd143af4930fb8cf602069ac18a96317dd91e30400b88795689405b2ab6964
7
- data.tar.gz: 2f6bc945ee3620294d750661ad91632f19bdbbb624d2182c34290ed6bf9662ed5f2bd8bfaf42037ac2e9da828a2b95254bafd756e5f213dbc5ba5072974f3399
6
+ metadata.gz: a0756ef91caee98a6d29c144c779650c788b31653758f0190a96746e6d63cdb4946fddbaf66bca329c4feb34f63288e0fd255d3bb2ba99b3c8f6fed61d5b445f
7
+ data.tar.gz: 33ffe901ec9592015658878761eed5b263cc6b955a7870c964092dae68f62f7965d062ea0a3415c0ee4306dd641eeb95f862748c506bdf77ca8583e8515084bb
@@ -0,0 +1,40 @@
1
+ ---
2
+ name: Reporte de Error
3
+ about: Crea un reporte para ayudarnos a mejorar
4
+ title: ''
5
+ labels: bug
6
+ assignees: ''
7
+
8
+ ---
9
+
10
+ **Describe el bug**
11
+
12
+ Una descripción concisa sobre el bug.
13
+
14
+ **Para reproducir**
15
+
16
+ 1. Configura '...'
17
+ 2. Crea un objeto '...'
18
+ 3. Ejecuta el método '...'
19
+ 4. Se ve el error en '...'
20
+
21
+ **Comportamiento observado**
22
+
23
+ Describe de forma concisa lo que observaste siguiendo los pasos para reproducir el error.
24
+
25
+ **Comportamiento esperado**
26
+
27
+ Una explicación concisa y clara de qué es lo que esperas que ocurra.
28
+
29
+ **Capturas de pantalla**
30
+
31
+ Si aplica, agrega aquí capturas de pantalla que ayuden a explicar tu problema.
32
+
33
+ **Versiones (por favor agrega aquí la siguiente información):**
34
+ - SDK: [e.g. 1.1.0]
35
+ - Ruby: [e.g. 2.5.2]
36
+ - Bundler: [e.g. 2.0.1]
37
+
38
+ **Contexto adicional**
39
+
40
+ Agrega cualquier otro información sobre el problema aquí.
data/.gitignore CHANGED
@@ -6,9 +6,11 @@
6
6
  /pkg/
7
7
  /spec/reports/
8
8
  /tmp/
9
+ /.DS_Store/
9
10
  .idea
10
11
  *.gem
11
12
  Gemfile.lock
12
13
  .built
13
14
  .bundled
14
-
15
+ .rakeTasks
16
+ .DS_Store
@@ -6,3 +6,5 @@ deploy:
6
6
  on:
7
7
  tags: true
8
8
  repo: TransbankDevelopers/transbank-sdk-ruby
9
+ rvm:
10
+ - 2.4.1
@@ -4,6 +4,10 @@ Todos los cambios notables a este proyecto serán documentados en este archivo.
4
4
  El formato está basado en [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
5
5
  y este proyecto adhiere a [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [1.2.0] - 2019-12-26
8
+ ### Added
9
+ - Se agrega soporte para Oneclick Mall y Transacción Completa en sus versiones REST.
10
+
7
11
  ## [1.1.0] - 2018-04-08
8
12
  ### Added
9
13
  - Se agregaron los parámetros `qr_width_height` y `commerce_logo_url` a Options, para definir el tamaño del QR generado para la transacción, y especificar la ubicación del logo de comercio para ser mostrado en la aplicación móvil de Onepay. Puedes configurar estos parámetros globalmente o por transacción.
data/Makefile CHANGED
@@ -12,7 +12,7 @@ build: .built .bundled
12
12
  touch .built
13
13
 
14
14
  .bundled: Gemfile
15
- docker-compose run --rm web bundle install
15
+ docker-compose run web bundle install
16
16
  touch .bundled
17
17
 
18
18
  logs:
@@ -7,9 +7,10 @@ require 'base64'
7
7
 
8
8
  require "transbank/sdk/version"
9
9
 
10
+ require 'transbank/sdk/transbank_error'
10
11
  require 'transbank/sdk/onepay/errors/errors'
11
12
 
12
- require 'transbank/sdk/onepay/utils/utils'
13
+ require 'transbank/sdk/utils/utils'
13
14
 
14
15
  require 'transbank/sdk/onepay/requests/requests'
15
16
  require 'transbank/sdk/onepay/responses/responses'
@@ -17,7 +18,6 @@ require 'transbank/sdk/onepay/responses/responses'
17
18
  require 'transbank/sdk/onepay/models/models'
18
19
  require 'transbank/sdk/onepay/base'
19
20
 
20
- module Transbank
21
- module Onepay
22
- end
23
- end
21
+ require 'transbank/sdk/oneclick/oneclick'
22
+
23
+ require 'transbank/sdk/transaccion_completa/transaccion_completa'
@@ -0,0 +1,16 @@
1
+ module Transbank
2
+ module Webpay
3
+ module Oneclick
4
+ module Errors
5
+ class OneclickError < StandardError
6
+ attr_accessor :code, :message
7
+ def initialize(message, code)
8
+ @code = code
9
+ @message = message
10
+ super(message)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ module Transbank
2
+ module Webpay
3
+ module Oneclick
4
+ module Errors
5
+ class MallInscriptionDeleteError < OneclickError
6
+ attr_accessor :code, :message
7
+ def initialize(message, code)
8
+ @code = code
9
+ @message = message
10
+ super(message, code)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ module Transbank
2
+ module Webpay
3
+ module Oneclick
4
+ module Errors
5
+ class MallInscriptionFinishError < OneclickError
6
+ attr_accessor :code, :message
7
+ def initialize(message, code)
8
+ @code = code
9
+ @message = message
10
+ super(message, code)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ module Transbank
2
+ module Webpay
3
+ module Oneclick
4
+ module Errors
5
+ class MallInscriptionStartError < OneclickError
6
+ attr_accessor :code, :message
7
+ def initialize(message, code)
8
+ @code = code
9
+ @message = message
10
+ super(message, code)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,3 @@
1
+ require 'transbank/sdk/oneclick/inscription/errors/mall_inscription_delete_error'
2
+ require 'transbank/sdk/oneclick/inscription/errors/mall_inscription_start_error'
3
+ require 'transbank/sdk/oneclick/inscription/errors/mall_inscription_finish_error'
@@ -0,0 +1,3 @@
1
+ require 'transbank/sdk/oneclick/errors/oneclick_error'
2
+ require 'transbank/sdk/oneclick/inscription/errors/oneclick_mall_inscription_errors'
3
+ require 'transbank/sdk/oneclick/inscription/responses/oneclick_mall_inscription_responses'
@@ -0,0 +1,18 @@
1
+ module Transbank
2
+ module Webpay
3
+ module Oneclick
4
+ class MallInscriptionDeleteResponse
5
+ attr_accessor :status, :code
6
+ def initialize(code)
7
+ code = code.to_i
8
+ @code = code
9
+ if code == 204
10
+ @status = 'OK'
11
+ elsif code == 404
12
+ @status = 'Not found'
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,15 @@
1
+ module Transbank
2
+ module Webpay
3
+ module Oneclick
4
+ class MallInscriptionFinishResponse
5
+ FIELDS = [:response_code, :tbk_user, :authorization_code,
6
+ :card_type, :card_number]
7
+ attr_accessor *FIELDS
8
+ def initialize(json)
9
+ FIELDS.each {|field| send("#{field}=", json["#{field}"]) }
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+
@@ -0,0 +1,14 @@
1
+ module Transbank
2
+ module Webpay
3
+ module Oneclick
4
+ class MallInscriptionStartResponse
5
+ attr_accessor :token, :url_webpay
6
+
7
+ def initialize(json)
8
+ @token = json['token']
9
+ @url_webpay = json['url_webpay']
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,3 @@
1
+ require 'transbank/sdk/oneclick/inscription/responses/mall_inscription_delete_response'
2
+ require 'transbank/sdk/oneclick/inscription/responses/mall_inscription_start_response'
3
+ require 'transbank/sdk/oneclick/inscription/responses/mall_inscription_finish_response'
@@ -0,0 +1,51 @@
1
+ module Transbank
2
+ module Webpay
3
+ module Oneclick
4
+ class Base
5
+ DEFAULT_API_KEY = '579B532A7440BB0C9079DED94D31EA1615BACEB56610332264630D42D0A36B1C'.freeze
6
+
7
+ DEFAULT_ONECLICK_MALL_COMMERCE_CODE = '597055555541'.freeze
8
+ DEFAULT_ONECLICK_MALL_CHILD_COMMERCE_CODES = ['597055555542'.freeze,
9
+ '597055555543'.freeze].freeze
10
+
11
+ @api_key = DEFAULT_API_KEY
12
+ @commerce_code = DEFAULT_ONECLICK_MALL_COMMERCE_CODE
13
+ @integration_type = :TEST
14
+ @integration_types = {
15
+ LIVE: "https://webpay3g.transbank.cl/",
16
+ TEST: "https://webpay3gint.transbank.cl/"
17
+ }
18
+
19
+ class << self
20
+ attr_reader :integration_types
21
+ attr_accessor :api_key, :integration_type, :commerce_code
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_mall_for_testing
42
+ @api_key = DEFAULT_API_KEY
43
+ @commerce_code = DEFAULT_ONECLICK_MALL_COMMERCE_CODE
44
+ self.integration_type = :TEST
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+
@@ -0,0 +1,16 @@
1
+ module Transbank
2
+ module Webpay
3
+ module Oneclick
4
+ module Errors
5
+ class MallTransactionAuthorizeError < OneclickError
6
+ attr_accessor :code, :message
7
+ def initialize(message, code)
8
+ @code = code
9
+ @message = message
10
+ super(message, code)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ module Transbank
2
+ module Webpay
3
+ module Oneclick
4
+ module Errors
5
+ class MallTransactionRefundError < OneclickError
6
+ attr_accessor :code, :message
7
+ def initialize(message, code)
8
+ @code = code
9
+ @message = message
10
+ super(message, code)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ module Transbank
2
+ module Webpay
3
+ module Oneclick
4
+ module Errors
5
+ class MallTransactionStatusError < OneclickError
6
+ attr_accessor :code, :message
7
+ def initialize(message, code)
8
+ @code = code
9
+ @message = message
10
+ super(message, code)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,3 @@
1
+ require 'transbank/sdk/oneclick/mall/errors/mall_transaction_authorize_error'
2
+ require 'transbank/sdk/oneclick/mall/errors/mall_transaction_status_error'
3
+ require 'transbank/sdk/oneclick/mall/errors/mall_transaction_refund_error'
@@ -0,0 +1,73 @@
1
+ module Transbank
2
+ module Webpay
3
+ module Oneclick
4
+ class MallInscription
5
+ extend Transbank::Utils::NetHelper
6
+
7
+ INSCRIPTION_START_ENDPOINT = 'rswebpaytransaction/api/oneclick/v1.0/inscriptions'.freeze
8
+ INSCRIPTION_FINISH_ENDPOINT = 'rswebpaytransaction/api/oneclick/v1.0/inscriptions/:token'.freeze
9
+ INSCRIPTION_DELETE_ENDPOINT = 'rswebpaytransaction/api/oneclick/v1.0/inscriptions'.freeze
10
+ class << self
11
+ def start(user_name:, email:, response_url:, options: nil)
12
+ api_key = options&.api_key || default_integration_params[:api_key]
13
+ commerce_code = options&.commerce_code || default_integration_params[:commerce_code]
14
+ integration_type = options&.integration_type || default_integration_params[:integration_type]
15
+ base_url = integration_type.nil? ? Oneclick::Base::integration_type[:TEST] : Oneclick::Base.integration_type_url(integration_type)
16
+
17
+ url = base_url + INSCRIPTION_START_ENDPOINT
18
+ headers = webpay_headers(commerce_code: commerce_code, api_key: api_key)
19
+
20
+ body = {
21
+ username: user_name,
22
+ email: email,
23
+ response_url: response_url
24
+ }
25
+ resp = http_post(uri_string: url, body: body, headers: headers, camel_case_keys: false)
26
+ body = JSON.parse(resp.body)
27
+ return ::Transbank::Webpay::Oneclick::MallInscriptionStartResponse.new(body) if resp.kind_of? Net::HTTPSuccess
28
+ raise Oneclick::Errors::MallInscriptionStartError.new(body['error_message'], resp.code)
29
+ end
30
+
31
+ def finish(token:, options: nil)
32
+ api_key = options&.api_key || default_integration_params[:api_key]
33
+ commerce_code = options&.commerce_code || default_integration_params[:commerce_code]
34
+ integration_type = options&.integration_type || default_integration_params[:integration_type]
35
+ base_url = integration_type.nil? ? Oneclick::Base::integration_type[:TEST] : Oneclick::Base.integration_type_url(integration_type)
36
+
37
+ url = base_url + INSCRIPTION_FINISH_ENDPOINT.gsub(':token', token)
38
+ headers = webpay_headers(commerce_code: commerce_code, api_key: api_key)
39
+
40
+ resp = http_put(uri_string: url, headers: headers)
41
+ body = JSON.parse(resp.body)
42
+ return ::Transbank::Webpay::Oneclick::MallInscriptionFinishResponse.new(body) if resp.kind_of? Net::HTTPSuccess
43
+ raise Oneclick::Errors::MallInscriptionFinishError.new(body['error_message'], resp.code)
44
+ end
45
+
46
+ def delete(tbk_user:, user_name:, options: nil)
47
+ api_key = options&.api_key || default_integration_params[:api_key]
48
+ commerce_code = options&.commerce_code || default_integration_params[:commerce_code]
49
+ integration_type = options&.integration_type || default_integration_params[:integration_type]
50
+ base_url = integration_type.nil? ? Oneclick::Base::integration_type[:TEST] : Oneclick::Base.integration_type_url(integration_type)
51
+
52
+ url = base_url + INSCRIPTION_DELETE_ENDPOINT
53
+ headers = webpay_headers(commerce_code: commerce_code, api_key: api_key)
54
+ body = {tbk_user: tbk_user, username: user_name}
55
+ resp = http_delete(uri_string: url, body: body, headers: headers)
56
+ code = resp.code
57
+ return ::Transbank::Webpay::Oneclick::MallInscriptionDeleteResponse.new(code) if resp.kind_of? Net::HTTPSuccess
58
+ raise Oneclick::Errors::MallInscriptionDeleteError.new(body['error_message'], resp.code)
59
+ end
60
+
61
+ def default_integration_params
62
+ {
63
+ api_key: Oneclick::Base::DEFAULT_API_KEY,
64
+ commerce_code: Oneclick::Base::DEFAULT_ONECLICK_MALL_COMMERCE_CODE,
65
+ integration_type: Oneclick::Base::integration_type,
66
+ base_url: Oneclick::Base::current_integration_type_url
67
+ }
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,97 @@
1
+ module Transbank
2
+ module Webpay
3
+ module Oneclick
4
+ class MallTransaction
5
+ extend Transbank::Utils::NetHelper
6
+
7
+ AUTHORIZE_TRANSACTION_ENDPOINT = 'rswebpaytransaction/api/oneclick/v1.0/transactions'.freeze
8
+ TRANSACTION_STATUS_ENDPOINT = 'rswebpaytransaction/api/oneclick/v1.0/transactions/:buy_order'.freeze
9
+ TRANSACTION_REFUND_ENDPOINT = 'rswebpaytransaction/api/oneclick/v1.0/transactions/:buy_order/refunds'.freeze
10
+
11
+ class << self
12
+
13
+ def authorize(username:, tbk_user:, parent_buy_order:, details:,
14
+ 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? ? Oneclick::Base::integration_type[:TEST] : Oneclick::Base.integration_type_url(integration_type)
19
+
20
+ url = base_url + AUTHORIZE_TRANSACTION_ENDPOINT
21
+ headers = webpay_headers(commerce_code: commerce_code, api_key: api_key)
22
+
23
+ details_array = details.map do |det|
24
+ hash = det.reduce({}) do |acc, (k, v)|
25
+ acc[k.to_s] = v
26
+ acc
27
+ end
28
+ # We need to make sure the hash's keys are strings (or symbols)
29
+ # since Ruby doesnt have hahes with indifferent access
30
+ # I chose to make them strings
31
+ details_hash = {}
32
+ details_hash[:amount] = hash.fetch('amount')
33
+ details_hash[:buy_order] = hash.fetch('buy_order')
34
+ details_hash[:commerce_code] = hash.fetch('commerce_code')
35
+ details_hash[:installments_number] = hash.fetch('installments_number')
36
+ details_hash
37
+ end
38
+
39
+ body = {
40
+ username: username,
41
+ tbk_user: tbk_user,
42
+ buy_order: parent_buy_order,
43
+ details: details_array
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::Webpay::Oneclick::MallTransactionAuthorizeResponse.new(body) if resp.kind_of? Net::HTTPSuccess
48
+ raise Oneclick::Errors::MallTransactionAuthorizeError.new(body['error_message'], resp.code)
49
+ end
50
+
51
+ def status(buy_order:, options: nil)
52
+ api_key = options&.api_key || default_integration_params[:api_key]
53
+ commerce_code = options&.commerce_code || default_integration_params[:commerce_code]
54
+ integration_type = options&.integration_type || default_integration_params[:integration_type]
55
+ base_url = integration_type.nil? ? Oneclick::Base::integration_type[:TEST] : Oneclick::Base.integration_type_url(integration_type)
56
+
57
+ url = base_url + TRANSACTION_STATUS_ENDPOINT.gsub(':buy_order', buy_order)
58
+ headers = webpay_headers(commerce_code: commerce_code, api_key: api_key)
59
+ resp = http_get(uri_string: url, headers: headers)
60
+ body = JSON.parse(resp.body)
61
+ return ::Transbank::Webpay::Oneclick::MallTransactionStatusResponse.new(body) if resp.kind_of? Net::HTTPSuccess
62
+ raise Oneclick::Errors::MallTransactionStatusError.new(body['error_message'], resp.code)
63
+ end
64
+
65
+ def refund(buy_order:, child_commerce_code:, child_buy_order:, amount:,
66
+ options: nil)
67
+ api_key = options&.api_key || default_integration_params[:api_key]
68
+ commerce_code = options&.commerce_code || default_integration_params[:commerce_code]
69
+ integration_type = options&.integration_type || default_integration_params[:integration_type]
70
+ base_url = integration_type.nil? ? Oneclick::Base::integration_type[:TEST] : Oneclick::Base.integration_type_url(integration_type)
71
+
72
+ url = base_url + TRANSACTION_REFUND_ENDPOINT.gsub(':buy_order', buy_order)
73
+ headers = webpay_headers(commerce_code: commerce_code, api_key: api_key)
74
+ body = {
75
+ detail_buy_order: child_buy_order,
76
+ commerce_code: child_commerce_code,
77
+ amount: amount
78
+ }
79
+ resp = http_post(uri_string: url, body: body, headers: headers, camel_case_keys: false)
80
+ body = JSON.parse(resp.body)
81
+ return ::Transbank::Webpay::Oneclick::MallTransactionRefundResponse.new(body) if resp.kind_of? Net::HTTPSuccess
82
+ raise Oneclick::Errors::MallTransactionRefundError.new(body['error_message'], resp.code)
83
+ end
84
+
85
+ def default_integration_params
86
+ {
87
+ api_key: Oneclick::Base::DEFAULT_API_KEY,
88
+ commerce_code: Oneclick::Base::DEFAULT_ONECLICK_MALL_COMMERCE_CODE,
89
+ integration_type: Oneclick::Base::integration_type,
90
+ base_url: Oneclick::Base::current_integration_type_url
91
+ }
92
+ end
93
+ end
94
+ end
95
+ end
96
+ end
97
+ end