transbank-sdk 1.3.1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (153) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +41 -1
  3. data/README.md +0 -2
  4. data/lib/transbank/sdk/common/api_constants.rb +23 -0
  5. data/lib/transbank/sdk/common/base_transaction.rb +18 -0
  6. data/lib/transbank/sdk/common/integration_api_keys.rb +9 -0
  7. data/lib/transbank/sdk/common/integration_commerce_codes.rb +68 -0
  8. data/lib/transbank/sdk/common/validation.rb +19 -0
  9. data/lib/transbank/sdk/patpass/patpass_by_webpay/transaction.rb +33 -85
  10. data/lib/transbank/sdk/patpass/patpass_comercio/inscription.rb +48 -71
  11. data/lib/transbank/sdk/shared/request_service.rb +93 -0
  12. data/lib/transbank/sdk/shared/transbank_error.rb +5 -0
  13. data/lib/transbank/sdk/version.rb +1 -1
  14. data/lib/transbank/sdk/webpay/oneclick/mall_inscription.rb +52 -0
  15. data/lib/transbank/sdk/webpay/oneclick/mall_transaction.rb +66 -0
  16. data/lib/transbank/sdk/webpay/transaccion_completa/mall_transaction.rb +67 -0
  17. data/lib/transbank/sdk/webpay/transaccion_completa/transaction.rb +70 -0
  18. data/lib/transbank/sdk/webpay/webpay_plus/mall_transaction.rb +79 -0
  19. data/lib/transbank/sdk/webpay/webpay_plus/transaction.rb +59 -73
  20. data/lib/transbank/sdk/webpay/webpay_plus_modal/transaction.rb +62 -0
  21. data/lib/transbank/sdk.rb +16 -16
  22. data/transbank-sdk.gemspec +10 -8
  23. metadata +54 -156
  24. data/lib/transbank/sdk/oneclick/errors/oneclick_error.rb +0 -16
  25. data/lib/transbank/sdk/oneclick/inscription/errors/mall_inscription_delete_error.rb +0 -16
  26. data/lib/transbank/sdk/oneclick/inscription/errors/mall_inscription_finish_error.rb +0 -16
  27. data/lib/transbank/sdk/oneclick/inscription/errors/mall_inscription_start_error.rb +0 -16
  28. data/lib/transbank/sdk/oneclick/inscription/errors/oneclick_mall_inscription_errors.rb +0 -3
  29. data/lib/transbank/sdk/oneclick/inscription/inscription.rb +0 -3
  30. data/lib/transbank/sdk/oneclick/inscription/responses/mall_inscription_delete_response.rb +0 -18
  31. data/lib/transbank/sdk/oneclick/inscription/responses/mall_inscription_finish_response.rb +0 -15
  32. data/lib/transbank/sdk/oneclick/inscription/responses/mall_inscription_start_response.rb +0 -14
  33. data/lib/transbank/sdk/oneclick/inscription/responses/oneclick_mall_inscription_responses.rb +0 -3
  34. data/lib/transbank/sdk/oneclick/mall/base.rb +0 -58
  35. data/lib/transbank/sdk/oneclick/mall/errors/mall_transaction_authorize_error.rb +0 -16
  36. data/lib/transbank/sdk/oneclick/mall/errors/mall_transaction_refund_error.rb +0 -16
  37. data/lib/transbank/sdk/oneclick/mall/errors/mall_transaction_status_error.rb +0 -16
  38. data/lib/transbank/sdk/oneclick/mall/errors/oneclick_mall_errors.rb +0 -4
  39. data/lib/transbank/sdk/oneclick/mall/mall_inscription.rb +0 -73
  40. data/lib/transbank/sdk/oneclick/mall/mall_transaction.rb +0 -97
  41. data/lib/transbank/sdk/oneclick/mall/oneclick_mall.rb +0 -5
  42. data/lib/transbank/sdk/oneclick/mall/responses/mall_transaction_authorize_response.rb +0 -16
  43. data/lib/transbank/sdk/oneclick/mall/responses/mall_transaction_refund_response.rb +0 -16
  44. data/lib/transbank/sdk/oneclick/mall/responses/mall_transaction_status_response.rb +0 -15
  45. data/lib/transbank/sdk/oneclick/mall/responses/oneclick_mall_responses.rb +0 -4
  46. data/lib/transbank/sdk/oneclick/mall_deferred/errors/mall_deferred_transaction_capture_error.rb +0 -16
  47. data/lib/transbank/sdk/oneclick/mall_deferred/mall_deferred_inscription.rb +0 -20
  48. data/lib/transbank/sdk/oneclick/mall_deferred/mall_deferred_transaction.rb +0 -42
  49. data/lib/transbank/sdk/oneclick/mall_deferred/responses/mall_deferred_transaction_capture_response.rb +0 -16
  50. data/lib/transbank/sdk/oneclick/oneclick.rb +0 -5
  51. data/lib/transbank/sdk/onepay/base.rb +0 -125
  52. data/lib/transbank/sdk/onepay/errors/errors.rb +0 -17
  53. data/lib/transbank/sdk/onepay/errors/integration_type_error.rb +0 -8
  54. data/lib/transbank/sdk/onepay/errors/invalid_options_error.rb +0 -8
  55. data/lib/transbank/sdk/onepay/errors/item_error.rb +0 -8
  56. data/lib/transbank/sdk/onepay/errors/refund_create_error.rb +0 -8
  57. data/lib/transbank/sdk/onepay/errors/response_error.rb +0 -8
  58. data/lib/transbank/sdk/onepay/errors/shopping_cart_error.rb +0 -8
  59. data/lib/transbank/sdk/onepay/errors/signature_error.rb +0 -8
  60. data/lib/transbank/sdk/onepay/errors/transaction_commit_error.rb +0 -8
  61. data/lib/transbank/sdk/onepay/errors/transaction_create_error.rb +0 -8
  62. data/lib/transbank/sdk/onepay/errors/transbank_error.rb +0 -9
  63. data/lib/transbank/sdk/onepay/models/channels.rb +0 -15
  64. data/lib/transbank/sdk/onepay/models/item.rb +0 -103
  65. data/lib/transbank/sdk/onepay/models/models.rb +0 -10
  66. data/lib/transbank/sdk/onepay/models/refund.rb +0 -50
  67. data/lib/transbank/sdk/onepay/models/shopping_cart.rb +0 -65
  68. data/lib/transbank/sdk/onepay/models/transaction.rb +0 -143
  69. data/lib/transbank/sdk/onepay/requests/refund_create_request.rb +0 -45
  70. data/lib/transbank/sdk/onepay/requests/request.rb +0 -18
  71. data/lib/transbank/sdk/onepay/requests/requests.rb +0 -9
  72. data/lib/transbank/sdk/onepay/requests/transaction_commit_request.rb +0 -48
  73. data/lib/transbank/sdk/onepay/requests/transaction_create_request.rb +0 -85
  74. data/lib/transbank/sdk/onepay/responses/refund_create_response.rb +0 -24
  75. data/lib/transbank/sdk/onepay/responses/response.rb +0 -18
  76. data/lib/transbank/sdk/onepay/responses/responses.rb +0 -9
  77. data/lib/transbank/sdk/onepay/responses/transaction_commit_response.rb +0 -39
  78. data/lib/transbank/sdk/onepay/responses/transaction_create_response.rb +0 -32
  79. data/lib/transbank/sdk/patpass/errors/integration_type_error.rb +0 -8
  80. data/lib/transbank/sdk/patpass/errors/patpass_error.rb +0 -15
  81. data/lib/transbank/sdk/patpass/patpass_by_webpay/base.rb +0 -47
  82. data/lib/transbank/sdk/patpass/patpass_by_webpay/errors/patpass_by_webpay_errors.rb +0 -12
  83. data/lib/transbank/sdk/patpass/patpass_by_webpay/errors/transaction_commit_error.rb +0 -15
  84. data/lib/transbank/sdk/patpass/patpass_by_webpay/errors/transaction_create_error.rb +0 -15
  85. data/lib/transbank/sdk/patpass/patpass_by_webpay/errors/transaction_status_error.rb +0 -15
  86. data/lib/transbank/sdk/patpass/patpass_by_webpay/options.rb +0 -9
  87. data/lib/transbank/sdk/patpass/patpass_by_webpay/patpass_by_webpay.rb +0 -16
  88. data/lib/transbank/sdk/patpass/patpass_by_webpay/responses/patpass_by_webpay_responses.rb +0 -3
  89. data/lib/transbank/sdk/patpass/patpass_by_webpay/responses/transaction_commit_response.rb +0 -20
  90. data/lib/transbank/sdk/patpass/patpass_by_webpay/responses/transaction_create_response.rb +0 -15
  91. data/lib/transbank/sdk/patpass/patpass_by_webpay/responses/transaction_status_response.rb +0 -21
  92. data/lib/transbank/sdk/patpass/patpass_comercio/base.rb +0 -47
  93. data/lib/transbank/sdk/patpass/patpass_comercio/errors/inscription_start_error.rb +0 -15
  94. data/lib/transbank/sdk/patpass/patpass_comercio/errors/inscription_status_error.rb +0 -15
  95. data/lib/transbank/sdk/patpass/patpass_comercio/errors/patpass_comercio_errors.rb +0 -2
  96. data/lib/transbank/sdk/patpass/patpass_comercio/options.rb +0 -9
  97. data/lib/transbank/sdk/patpass/patpass_comercio/patpass_comercio.rb +0 -5
  98. data/lib/transbank/sdk/patpass/patpass_comercio/responses/inscription_start_response.rb +0 -13
  99. data/lib/transbank/sdk/patpass/patpass_comercio/responses/inscription_status_response.rb +0 -13
  100. data/lib/transbank/sdk/patpass/patpass_comercio/responses/patpass_comercio_responses.rb +0 -2
  101. data/lib/transbank/sdk/transaccion_completa/base.rb +0 -49
  102. data/lib/transbank/sdk/transaccion_completa/errors/transaccion_completa_error.rb +0 -16
  103. data/lib/transbank/sdk/transaccion_completa/errors/transaccion_completa_errors.rb +0 -6
  104. data/lib/transbank/sdk/transaccion_completa/errors/transaction_commit_error.rb +0 -14
  105. data/lib/transbank/sdk/transaccion_completa/errors/transaction_create_error.rb +0 -14
  106. data/lib/transbank/sdk/transaccion_completa/errors/transaction_installments_error.rb +0 -14
  107. data/lib/transbank/sdk/transaccion_completa/errors/transaction_refund_error.rb +0 -14
  108. data/lib/transbank/sdk/transaccion_completa/errors/transaction_status_error.rb +0 -14
  109. data/lib/transbank/sdk/transaccion_completa/mall/mall_transaction.rb +0 -164
  110. data/lib/transbank/sdk/transaccion_completa/mall/responses/mall_transaction_commit_response.rb +0 -14
  111. data/lib/transbank/sdk/transaccion_completa/mall/responses/mall_transaction_installments_response.rb +0 -11
  112. data/lib/transbank/sdk/transaccion_completa/mall/responses/mall_transaction_responses.rb +0 -3
  113. data/lib/transbank/sdk/transaccion_completa/mall/responses/mall_transaction_status_response.rb +0 -14
  114. data/lib/transbank/sdk/transaccion_completa/options.rb +0 -7
  115. data/lib/transbank/sdk/transaccion_completa/responses/transaccion_completa_responses.rb +0 -5
  116. data/lib/transbank/sdk/transaccion_completa/responses/transaction_commit_response.rb +0 -16
  117. data/lib/transbank/sdk/transaccion_completa/responses/transaction_create_response.rb +0 -10
  118. data/lib/transbank/sdk/transaccion_completa/responses/transaction_installments_response.rb +0 -13
  119. data/lib/transbank/sdk/transaccion_completa/responses/transaction_refund_response.rb +0 -14
  120. data/lib/transbank/sdk/transaccion_completa/responses/transaction_status_response.rb +0 -16
  121. data/lib/transbank/sdk/transaccion_completa/transaccion_completa.rb +0 -5
  122. data/lib/transbank/sdk/transaccion_completa/transaction.rb +0 -117
  123. data/lib/transbank/sdk/transbank_error.rb +0 -6
  124. data/lib/transbank/sdk/utils/json_utils.rb +0 -75
  125. data/lib/transbank/sdk/utils/net_helper.rb +0 -82
  126. data/lib/transbank/sdk/utils/request_builder.rb +0 -96
  127. data/lib/transbank/sdk/utils/signature_utils.rb +0 -49
  128. data/lib/transbank/sdk/utils/utils.rb +0 -9
  129. data/lib/transbank/sdk/webpay/errors/integration_type_error.rb +0 -8
  130. data/lib/transbank/sdk/webpay/errors/webpay_error.rb +0 -14
  131. data/lib/transbank/sdk/webpay/webpay_plus/base.rb +0 -62
  132. data/lib/transbank/sdk/webpay/webpay_plus/deferred/deferred_transaction.rb +0 -108
  133. data/lib/transbank/sdk/webpay/webpay_plus/deferred/errors/transaction_capture_error.rb +0 -16
  134. data/lib/transbank/sdk/webpay/webpay_plus/deferred/errors/webpay_plus_deferred_errors.rb +0 -1
  135. data/lib/transbank/sdk/webpay/webpay_plus/deferred/responses/transaction_capture_response.rb +0 -22
  136. data/lib/transbank/sdk/webpay/webpay_plus/deferred/responses/webpay_plus_deferred_responses.rb +0 -1
  137. data/lib/transbank/sdk/webpay/webpay_plus/errors/transaction_commit_error.rb +0 -17
  138. data/lib/transbank/sdk/webpay/webpay_plus/errors/transaction_create_error.rb +0 -16
  139. data/lib/transbank/sdk/webpay/webpay_plus/errors/transaction_refund_error.rb +0 -16
  140. data/lib/transbank/sdk/webpay/webpay_plus/errors/transaction_status_error.rb +0 -16
  141. data/lib/transbank/sdk/webpay/webpay_plus/errors/webpay_plus_errors.rb +0 -13
  142. data/lib/transbank/sdk/webpay/webpay_plus/mall/mall_transaction.rb +0 -88
  143. data/lib/transbank/sdk/webpay/webpay_plus/mall/responses/mall_transaction_commit_response.rb +0 -23
  144. data/lib/transbank/sdk/webpay/webpay_plus/mall/responses/mall_transaction_status_response.rb +0 -21
  145. data/lib/transbank/sdk/webpay/webpay_plus/mall/responses/webpay_plus_mall_responses.rb +0 -2
  146. data/lib/transbank/sdk/webpay/webpay_plus/mall_deferred/mall_deferred_transaction.rb +0 -109
  147. data/lib/transbank/sdk/webpay/webpay_plus/options.rb +0 -9
  148. data/lib/transbank/sdk/webpay/webpay_plus/responses/transaction_commit_response.rb +0 -20
  149. data/lib/transbank/sdk/webpay/webpay_plus/responses/transaction_create_response.rb +0 -15
  150. data/lib/transbank/sdk/webpay/webpay_plus/responses/transaction_refund_response.rb +0 -19
  151. data/lib/transbank/sdk/webpay/webpay_plus/responses/transaction_status_response.rb +0 -21
  152. data/lib/transbank/sdk/webpay/webpay_plus/responses/webpay_plus_responses.rb +0 -4
  153. data/lib/transbank/sdk/webpay/webpay_plus/webpay_plus.rb +0 -24
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 62ac152a6eb7fefb2a0f5341a4dbaeeae98c9d8b3862a59a333cdb527f5a9b8e
4
- data.tar.gz: 36dfa3d5a4b18f73bc812f72565caa23c19bfeec77f6fcce3937838dde01d390
3
+ metadata.gz: 256bc0c3ced136ec4077152e1a70b5bd8ea2c62dea6acffad29cb9dff3ea8921
4
+ data.tar.gz: eac1beeaef40af4e68141d0ac6bfa4b67d6f24bc16d78a8c27a53039c2aed2dc
5
5
  SHA512:
6
- metadata.gz: 5d6d1980f31ed54a49a5fcc4232b7e2468f3b76d10f6eae3456d333a1b29fab500c3f40240ca01991f25fed2bcbcc720439591f91a3e0ae3a2cd499b2edca565
7
- data.tar.gz: e4cd58219149d73c0b5961eb62e4ba4426644df1da9674b79cb9f80acf4eec8d1b571ee249d4b21b9e6ca79d0f3907dc0a403df4fef5883dcd05163eb88c0f7f
6
+ metadata.gz: ae2e6b60df22a2baff554a9ab2c5be814d6d3c94e3b303871dbb23f5298c0d805b8aa1c955678f2d18c4ea6768e78fde8b981cd9bf94bbf37c6093ac8acdf899
7
+ data.tar.gz: 34bdd0c1c17ff3444121c60b2387417a2b7616b1e3dd950d94104f7c2a3978b7115353d600a7ff7c279486c6860be21bf72aa01b7a5ce9dfe550b2d28cfee428
data/CHANGELOG.md CHANGED
@@ -4,8 +4,48 @@ 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.3.1] - 2020-10-29
7
+ ## [2.0.0] - 2022-01-03
8
+
9
+ ### Removed
10
+
11
+ - Se elimina Onepay
12
+
13
+ ### Changed
14
+
15
+ - Se agrega soporte a Webpay Modal
16
+ - Se migra el api desde la versión 1.0 a la versión 1.2
17
+ - Ahora el método de retorno al crear la transacción en WebPayPlus debe tener soporte GET (cuando es exitosa) y POST (cuando se retorna sin concluir el ingreso de la tarjeta)
18
+ - Ahora el método de retorno al inscribirse en Oneclick debe tener soporte GET (cuando es exitosa) y POST (cuando se retorna sin concluir la inscripción)
19
+ - Se refactoriza y migra todos los productos desde clases estáticas a clases instanciables
20
+ - Se unifica 'Transaction' y 'DeferredTransaction' en WebpayPlus
21
+ - Se unifica 'MallTransaction' y 'MallDeferredTransaction' en WebpayPlus y Oneclick
8
22
 
23
+ ### Added
24
+
25
+ - Se agrega soporte a Webpay Modal
26
+ - Se agregan validaciones de obligatoriedad y tamaño de los parámetros a los métodos de WebpayPlus, Oneclick, Webpay Modal, Transacción Completa
27
+ - Se agrega un módulo de constantes con los códigos de comercio de integración: 'IntegrationCommerceCodes'
28
+ - Se agrega un módulo de constantes con las claves de comercio de integración: 'IntegrationApiKeys'
29
+
30
+ ## [1.5.1] - 2021-04-12
31
+ ### Added
32
+ - Se agrega captura diferida en Transacción Completa y Transacción Completa Mall
33
+
34
+ ## [1.4.1] - 2021-03-30
35
+ ### Fixed
36
+ - Se agrega parámetro de estado faltante en respuesta de Commit y Status en Webpay Plus
37
+ - Se agrega dependencia JSON (~> 2.0) para evitar problemas al recibir respuesta de Commit
38
+ - Se arregla endpoint de captura en Webpay Plus
39
+
40
+ ## [1.4.0] - 2020-12-03
41
+ ### Added
42
+ - Se agregan métodos de configuración para integración a Webpay Plus en sus modalidades diferidas y mall diferida.
43
+ - Se agregan métodos de configuración para integración a Webpay Oneclick en su modalidad mall diferida.
44
+
45
+ ### Fixed
46
+ - Se arregla forma en que se lee configuración del SDK, estaba tomando valores de una constante en vez de la variable de clase correspondiente. Este arreglo es para todos los productos con la excepción de Onepay
47
+
48
+ ## [1.3.1] - 2020-10-29
9
49
  ### Fixed
10
50
  - Se revierte commit que elimina requires necesarios para productos REST
11
51
 
data/README.md CHANGED
@@ -29,10 +29,8 @@ Actualmente este SDK contiene sólo Onepay.
29
29
 
30
30
  La documentación relevante para usar este SDK es:
31
31
 
32
- - Documentación general sobre [Onepay](https://www.transbankdevelopers.cl/producto/onepay).
33
32
  - Documentación sobre [ambientes, deberes del comercio, puesta en producción,
34
33
  etc](https://www.transbankdevelopers.cl/documentacion/como_empezar#ambientes).
35
- - Referencia detallada sobre [Onepay](https://www.transbankdevelopers.cl/referencia/onepay).
36
34
 
37
35
  ## Información para contribuir y desarrollar este SDK
38
36
 
@@ -0,0 +1,23 @@
1
+ module Transbank
2
+ module Common
3
+ module ApiConstants
4
+ WEBPAY_ENDPOINT = 'rswebpaytransaction/api/webpay/v1.2'.freeze
5
+ ONECLICK_ENDPOINT = 'rswebpaytransaction/api/oneclick/v1.2'.freeze
6
+ PATPASS_ENDPOINT = 'restpatpass/v1/services'.freeze
7
+
8
+ BUY_ORDER_LENGTH = 26;
9
+ SESSION_ID_LENGTH = 61;
10
+ RETURN_URL_LENGTH = 255;
11
+ AUTHORIZATION_CODE_LENGTH = 6;
12
+ CARD_EXPIRATION_DATE_LENGTH = 5;
13
+ CARD_NUMBER_LENGTH = 19;
14
+ TBK_USER_LENGTH = 40;
15
+ USER_NAME_LENGTH = 40;
16
+ COMMERCE_CODE_LENGTH = 12;
17
+ TOKEN_LENGTH = 64;
18
+ EMAIL_LENGTH = 100;
19
+ end
20
+ end
21
+ end
22
+
23
+
@@ -0,0 +1,18 @@
1
+ module Transbank
2
+ module Common
3
+ class BaseTransaction
4
+
5
+ def initialize(commerce_code = ::Transbank::Common::IntegrationCommerceCodes::WEBPAY_PLUS, api_key = ::Transbank::Common::IntegrationApiKeys::WEBPAY, environment = DEFAULT_ENVIRONMENT)
6
+ @commerce_code = commerce_code
7
+ @api_key = api_key
8
+ unless %i[production integration].include?(environment)
9
+ raise ArgumentError, "Environment must be either 'integration' or 'production'"
10
+ end
11
+
12
+ @environment = environment
13
+ end
14
+ end
15
+ end
16
+ end
17
+
18
+
@@ -0,0 +1,9 @@
1
+ # Contains the Webpay, Oneclick and Patpass Comercio constants for testing.
2
+ module Transbank
3
+ module Common
4
+ module IntegrationApiKeys
5
+ WEBPAY = '579B532A7440BB0C9079DED94D31EA1615BACEB56610332264630D42D0A36B1C'.freeze
6
+ PATPASS_COMERCIO = 'cxxXQgGD9vrVe4M41FIt'.freeze
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,68 @@
1
+ # Contains the Webpay, Oneclick and Patpass Comercio constants for testing.
2
+ module Transbank
3
+ module Common
4
+ module IntegrationCommerceCodes
5
+ WEBPAY_PLUS = '597055555532'.freeze
6
+ WEBPAY_PLUS_MODAL = '597055555584'.freeze
7
+ WEBPAY_PLUS_DEFERRED = '597055555540'.freeze
8
+
9
+ WEBPAY_PLUS_MALL = '597055555535'.freeze
10
+ WEBPAY_PLUS_MALL_CHILD1 = '597055555536'.freeze
11
+ WEBPAY_PLUS_MALL_CHILD2 = '597055555537'.freeze
12
+ WEBPAY_PLUS_MALL_CHILD_COMMERCE_CODES = [
13
+ '597055555582'.freeze,
14
+ '597055555583'.freeze
15
+ ].freeze
16
+
17
+ WEBPAY_PLUS_MALL_DEFERRED = '597055555581'.freeze
18
+ WEBPAY_PLUS_MALL_DEFERRED_CHILD1 = '597055555582'.freeze
19
+ WEBPAY_PLUS_MALL_DEFERRED_CHILD2 = '597055555583'.freeze
20
+ ONECLICK_MALL = '597055555541'.freeze
21
+
22
+ ONECLICK_MALL_CHILD_COMMERCE_CODES = [
23
+ '597055555542'.freeze,
24
+ '597055555543'.freeze
25
+ ].freeze
26
+
27
+ ONECLICK_MALL_DEFERRED = '597055555547'.freeze
28
+
29
+ ONECLICK_MALL_DEFERRED_CHILD_COMMERCE_CODES = [
30
+ '597055555548'.freeze,
31
+ '597055555549'.freeze
32
+ ].freeze
33
+
34
+ TRANSACCION_COMPLETA = '597055555530'.freeze
35
+ TRANSACCION_COMPLETA_SIN_CVV = '597055555557'.freeze
36
+ TRANSACCION_COMPLETA_DEFERRED = '597055555531'.freeze
37
+ TRANSACCION_COMPLETA_DEFERRED_SIN_CVV = '597055555556'.freeze
38
+
39
+ TRANSACCION_COMPLETA_MALL = '597055555573'.freeze
40
+ TRANSACCION_COMPLETA_MALL_CHILD1 = '597055555574'.freeze
41
+ TRANSACCION_COMPLETA_MALL_CHILD2 = '597055555575'.freeze
42
+ TRANSACCION_COMPLETA_MALL_CHILD = [
43
+ '597055555574'.freeze,
44
+ '597055555575'.freeze
45
+ ].freeze
46
+
47
+ TRANSACCION_COMPLETA_MALL_SIN_CVV = '597055555551'.freeze
48
+ TRANSACCION_COMPLETA_MALL_SIN_CVV_CHILD = [
49
+ '597055555552'.freeze,
50
+ '597055555553'.freeze
51
+ ].freeze
52
+
53
+ TRANSACCION_COMPLETA_MALL_DEFERRED = '597055555576'.freeze
54
+ TRANSACCION_COMPLETA_MALL_DEFERRED_CHILD1 = '597055555577'.freeze
55
+ TRANSACCION_COMPLETA_MALL_DEFERRED_CHILD2 = '597055555578'.freeze
56
+ TRANSACCION_COMPLETA_MALL_DEFERRED_CHILD = [
57
+ '597055555577'.freeze,
58
+ '597055555578'.freeze
59
+ ].freeze
60
+
61
+ TRANSACCION_COMPLETA_MALL_DEFERRED_SIN_CVV = '597055555561'.freeze
62
+ TRANSACCION_COMPLETA_MALL_DEFERRED_SIN_CVV_CHILD1 = '597055555562'.freeze
63
+ TRANSACCION_COMPLETA_MALL_DEFERRED_SIN_CVV_CHILD2 = '597055555563'.freeze
64
+ PATPASS_COMERCIO = '28299257'.freeze
65
+ PATPASS_BY_WEBPAY = "597055555550".freeze
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,19 @@
1
+
2
+ module Transbank
3
+ module Common
4
+ class Validation
5
+
6
+ def self.has_text_with_max_length(value, value_max_length, value_name)
7
+ if value.empty?
8
+ raise Transbank::Shared::TransbankError, "Transbank Error: %s is empty" % [value_name]
9
+ end
10
+ if value.length() > value_max_length
11
+ raise Transbank::Shared::TransbankError, "%s is too long, the maximum length is %s"% [value_name, value_max_length]
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+
18
+
19
+
@@ -1,93 +1,41 @@
1
1
  module Transbank
2
2
  module Patpass
3
3
  module PatpassByWebpay
4
- class Transaction
5
- extend Transbank::Utils::NetHelper
6
- CREATE_TRANSACTION_ENDPOINT = 'rswebpaytransaction/api/webpay/v1.0/transactions'
7
- COMMIT_TRANSACTION_ENDPOINT = 'rswebpaytransaction/api/webpay/v1.0/transactions'
8
- TRANSACTION_STATUS_ENDPOINT = 'rswebpaytransaction/api/webpay/v1.0/transactions'
9
-
10
- class << self
11
-
12
- def create(buy_order:, session_id:, amount:, return_url:, details: ,options: nil)
13
-
14
- api_key = options&.api_key || default_integration_params[:api_key]
15
- commerce_code = options&.commerce_code || default_integration_params[:commerce_code]
16
- integration_type = options&.integration_type || default_integration_params[:integration_type]
17
- base_url = integration_type.nil? ? PatpassByWebpay::Base::integration_types[:TEST] : PatpassByWebpay::Base.integration_type_url(integration_type)
18
-
19
- wpm_detail = wpm_details(details)
20
- body = {
21
- buy_order: buy_order,
22
- session_id: session_id,
23
- amount: amount,
24
- return_url: return_url,
25
- wpm_detail: wpm_detail
26
- }
27
-
28
- url = base_url + CREATE_TRANSACTION_ENDPOINT
29
- headers = webpay_headers(commerce_code: commerce_code, api_key: api_key)
30
- resp = http_post(uri_string: url, body: body, headers: headers, camel_case_keys: false)
31
- body = JSON.parse(resp.body)
32
-
33
- return ::Transbank::Patpass::PatpassByWebpay::TransactionCreateResponse.new(body) if resp.kind_of? Net::HTTPSuccess
34
- raise Errors::TransactionCreateError.new(body['error_message'], resp.code)
35
- end
36
-
37
- def commit(token:, options: nil)
38
-
39
- api_key = options&.api_key || default_integration_params[:api_key]
40
- commerce_code = options&.commerce_code || default_integration_params[:commerce_code]
41
- base_url = PatpassByWebpay::Base.integration_types[options&.integration_type] || default_integration_params[:base_url]
42
-
43
- url = base_url + COMMIT_TRANSACTION_ENDPOINT + "/#{token}"
44
- headers = webpay_headers(commerce_code: commerce_code, api_key: api_key)
45
-
46
- resp = http_put(uri_string: url, body: nil, headers: headers)
47
- body = JSON.parse(resp.body)
48
- return ::Transbank::Patpass::PatpassByWebpay::TransactionCommitResponse.new(body) if resp.kind_of? Net::HTTPSuccess
49
- raise Errors::TransactionCommitError.new(body['error_message'], resp.code)
50
- end
51
-
52
- def status(token:, 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
- base_url = PatpassByWebpay::Base.integration_types[options&.integration_type] || default_integration_params[:base_url]
56
-
57
- url = base_url + "#{TRANSACTION_STATUS_ENDPOINT}/#{token}"
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::Patpass::PatpassByWebpay::TransactionStatusResponse.new(body) if resp.kind_of? Net::HTTPSuccess
62
- raise Errors::TransactionStatusError.new(body['error_message'], resp.code)
63
- end
64
-
65
- def default_integration_params
66
- {
67
- api_key: PatpassByWebpay::Base::DEFAULT_API_KEY,
68
- commerce_code: PatpassByWebpay::Base::DEFAULT_COMMERCE_CODE,
69
- base_url: PatpassByWebpay::Base::current_integration_type_url
70
- }
71
- end
72
-
73
- private
74
- def wpm_details(details)
75
- # Check against the wpm_detail_fields
76
- # If one is missing, KeyError will be raised
77
- wpm_detail_fields.reduce({}) do |acc, field|
78
- acc[field] = details.fetch(field) { details.fetch(field.to_s) }
79
- acc
80
- end
81
- end
4
+ class Transaction < ::Transbank::Common::BaseTransaction
5
+ DEFAULT_ENVIRONMENT = :integration
6
+ RESOURCES_URL = ::Transbank::Common::ApiConstants::WEBPAY_ENDPOINT
7
+ CREATE_ENDPOINT = (RESOURCES_URL + '/transactions/').freeze
8
+ COMMIT_ENDPOINT = (RESOURCES_URL + '/transactions/%{token}').freeze
9
+ STATUS_ENDPOINT = (RESOURCES_URL + '/transactions/%{token}').freeze
10
+
11
+ def initialize(commerce_code = ::Transbank::Common::IntegrationCommerceCodes::PATPASS_BY_WEBPAY, api_key = ::Transbank::Common::IntegrationApiKeys::WEBPAY, environment = DEFAULT_ENVIRONMENT)
12
+ super
13
+ end
14
+
15
+ def create(buy_order, session_id, amount, return_url, details)
16
+ request_service = ::Transbank::Shared::RequestService.new(
17
+ @environment, CREATE_ENDPOINT, @commerce_code, @api_key
18
+ )
19
+ request_service.post({
20
+ buy_order: buy_order, session_id: session_id, amount: amount, return_url: return_url, wpm_detail: details
21
+ })
22
+ end
23
+
24
+ def commit(token)
25
+ request_service = ::Transbank::Shared::RequestService.new(
26
+ @environment, format(COMMIT_ENDPOINT, token: token), @commerce_code, @api_key
27
+ )
28
+ request_service.put({})
29
+ end
82
30
 
83
- def wpm_detail_fields
84
- %i(service_id card_holder_id card_holder_name card_holder_last_name1
85
- card_holder_last_name2 card_holder_mail cellphone_number expiration_date
86
- commerce_mail uf_flag)
87
- end
31
+ def status(token)
32
+ request_service = ::Transbank::Shared::RequestService.new(
33
+ @environment, format(STATUS_ENDPOINT, token: token), @commerce_code, @api_key
34
+ )
35
+ request_service.get
88
36
  end
37
+
89
38
  end
90
39
  end
91
40
  end
92
- end
93
-
41
+ end
@@ -1,79 +1,56 @@
1
1
  module Transbank
2
2
  module Patpass
3
3
  module PatpassComercio
4
- class Inscription
5
- extend Utils::NetHelper
6
-
7
- START_INSCRIPTION_ENDPOINT = 'restpatpass/v1/services/patInscription'.freeze
8
- INSCRIPTION_STATUS_ENDPOINT = 'restpatpass/v1/services/status'.freeze
9
-
10
-
11
- FIELDS = %i(
12
- url name first_last_name second_last_name rut service_id final_url max_amount
13
- phone_number mobile_number patpass_name person_email commerce_email address city
14
- )
15
-
16
- class << self
17
- def start(url:, name:, first_last_name:, second_last_name:, rut:, service_id:, final_url:, max_amount:,
18
- phone_number:, mobile_number:, patpass_name:, person_email:, commerce_email:, address:, city:, options: nil)
19
- api_key = options&.api_key || default_integration_params[:api_key]
20
- commerce_code = options&.commerce_code || default_integration_params[:commerce_code]
21
- integration_type = options&.integration_type || default_integration_params[:integration_type]
22
- base_url = integration_type.nil? ? PatpassComercio::Base::integration_types[:TEST] : PatpassComercio::Base.integration_type_url(integration_type)
23
-
24
- body = {
25
- url: url,
26
- nombre: name,
27
- pApellido: first_last_name,
28
- sApellido: second_last_name,
29
- rut: rut,
30
- serviceId: service_id,
31
- finalUrl: final_url,
32
- commerceCode: commerce_code,
33
- montoMaximo: max_amount,
34
- telefonoFijo: phone_number,
35
- telefonoCelular: mobile_number,
36
- nombrePatPass: patpass_name,
37
- correoPersona: person_email,
38
- correoComercio: commerce_email,
39
- direccion: address,
40
- ciudad: city
41
- }
42
- url = base_url + START_INSCRIPTION_ENDPOINT
43
- headers = patpass_comercio_headers(commerce_code: commerce_code, api_key: api_key)
44
- resp = http_post(uri_string: url, body: body, headers: headers, camel_case_keys: false)
45
- resp_body = JSON.parse(resp.body)
46
- return ::Transbank::Patpass::PatpassComercio::InscriptionStartResponse.new(resp_body) if resp.kind_of? Net::HTTPSuccess
47
- raise Errors::InscriptionStartError.new(resp_body['description'], resp.code)
48
- end
49
-
50
- def status(token: ,options: nil)
51
- api_key = options&.api_key || default_integration_params[:api_key]
52
- commerce_code = options&.commerce_code || default_integration_params[:commerce_code]
53
- integration_type = options&.integration_type || default_integration_params[:integration_type]
54
- base_url = integration_type.nil? ? PatpassComercio::Base::integration_types[:TEST] : PatpassComercio::Base.integration_type_url(integration_type)
55
-
56
- body = {
57
- token: token
58
- }
59
- url = base_url + INSCRIPTION_STATUS_ENDPOINT
60
- headers = patpass_comercio_headers(commerce_code: commerce_code, api_key: api_key)
61
- resp = http_post(uri_string: url, body: body, headers: headers, camel_case_keys: false)
62
- resp_body = JSON.parse(resp.body)
63
- return ::Transbank::Patpass::PatpassComercio::InscriptionStatusResponse.new(resp_body) if resp.kind_of? Net::HTTPSuccess
64
- raise Errors::InscriptionStatusError.new(resp_body['description'], resp.code)
65
- end
4
+ class Inscription < ::Transbank::Common::BaseTransaction
5
+ DEFAULT_ENVIRONMENT = :integration
6
+ RESOURCES_URL = ::Transbank::Common::ApiConstants::PATPASS_ENDPOINT
7
+ START_ENDPOINT = (RESOURCES_URL + '/patInscription').freeze
8
+ STATUS_ENDPOINT = (RESOURCES_URL + '/status').freeze
9
+
10
+ ENVIRONMENTS = {
11
+ production: 'https://www.pagoautomaticocontarjetas.cl',
12
+ integration: 'https://pagoautomaticocontarjetasint.transbank.cl/'
13
+ }
14
+
15
+ def initialize(commerce_code = ::Transbank::Common::IntegrationCommerceCodes::PATPASS_COMERCIO, api_key = ::Transbank::Common::IntegrationApiKeys::PATPASS_COMERCIO, environment = DEFAULT_ENVIRONMENT)
16
+ super(commerce_code, api_key, environment)
17
+ end
18
+
19
+ def start(url, name, last_name, second_last_name, rut, service_id, final_url, max_amount, phone, cell_phone, patpass_name, person_email, commerce_email, address, city)
20
+ request_service = ::Transbank::Shared::RequestService.new(
21
+ ENVIRONMENTS[@environment] + START_ENDPOINT, @commerce_code, @api_key
22
+ )
23
+ request_service.set_patpass();
24
+ request_service.post({
25
+ url: url,
26
+ nombre: name,
27
+ pApellido: last_name,
28
+ sApellido: second_last_name,
29
+ rut: rut,
30
+ serviceId: service_id,
31
+ finalUrl: final_url,
32
+ commerceCode: @commerce_code,
33
+ montoMaximo: max_amount,
34
+ telefonoFijo: phone,
35
+ telefonoCelular: cell_phone,
36
+ nombrePatPass: patpass_name,
37
+ correoPersona: person_email,
38
+ correoComercio: commerce_email,
39
+ direccion: address,
40
+ ciudad: city
41
+ })
42
+
43
+ end
66
44
 
67
- def default_integration_params
68
- {
69
- api_key: Patpass::PatpassComercio::Base::DEFAULT_API_KEY,
70
- commerce_code: Patpass::PatpassComercio::Base::DEFAULT_COMMERCE_CODE,
71
- integration_type: Patpass::PatpassComercio::Base::integration_type,
72
- base_url: Patpass::PatpassComercio::Base::current_integration_type_url
73
- }
74
- end
45
+ def status(token)
46
+ request_service = ::Transbank::Shared::RequestService.new(
47
+ ENVIRONMENTS[@environment] + format(STATUS_ENDPOINT, token: token), @commerce_code, @api_key
48
+ )
49
+ request_service.set_patpass();
50
+ request_service.post({token: token})
75
51
  end
52
+
76
53
  end
77
54
  end
78
55
  end
79
- end
56
+ end
@@ -0,0 +1,93 @@
1
+ module Transbank
2
+ module Shared
3
+ class RequestService
4
+ ENVIRONMENTS = {
5
+ production: 'https://webpay3g.transbank.cl/',
6
+ integration: 'https://webpay3gint.transbank.cl/'
7
+ }
8
+
9
+ def initialize(environment=nil, endpoint, commerce_code, api_key)
10
+ @commerce_code = commerce_code
11
+ @api_key = api_key
12
+ if environment.nil?
13
+ @url = endpoint
14
+ else
15
+ @url = ENVIRONMENTS[environment] + endpoint
16
+ end
17
+ @headers = headers(@commerce_code, @api_key)
18
+ end
19
+
20
+ def set_patpass()
21
+ @headers = headers_patpass(@commerce_code, @api_key)
22
+ end
23
+
24
+ def post(body)
25
+ build_http_request('post', body)
26
+ end
27
+
28
+ def put(body)
29
+ build_http_request('put', body)
30
+ end
31
+
32
+ def get
33
+ build_http_request('get')
34
+ end
35
+
36
+ def delete(body)
37
+ build_http_request('delete', body)
38
+ end
39
+
40
+ private
41
+
42
+ def build_http_request(method, body = nil)
43
+ # raise TransbankError, 'Transbank Error: Incorrect Request type' unless %w[put post].include?(method.downcase)
44
+
45
+ uri, http = build_client
46
+ http_method = build_method(method, uri, body)
47
+
48
+ response = http.request(http_method)
49
+ if response.is_a? Net::HTTPSuccess
50
+ return nil if response.body.empty?
51
+ return JSON.parse(response.body)
52
+ end
53
+ body = JSON.parse(response.body)
54
+ if body.key?("description")
55
+ raise TransbankError, "Transbank Error: #{body['code']} - #{body['description']}"
56
+ else
57
+ raise TransbankError, "Transbank Error: #{body['error_message']}"
58
+ end
59
+ end
60
+
61
+ def build_client
62
+ uri = URI.parse(@url)
63
+ http = Net::HTTP.new(uri.host, uri.port)
64
+ http.use_ssl = uri.scheme == 'https'
65
+ [uri, http]
66
+ end
67
+
68
+ def build_method(method, uri, body = nil)
69
+ http_method = Object.const_get("Net::HTTP::#{method.capitalize}").new(uri.path, @headers)
70
+ if !body.nil?
71
+ http_method.body = body.to_json
72
+ end
73
+ http_method
74
+ end
75
+
76
+ def headers(commerce_code, api_key)
77
+ {
78
+ 'Tbk-Api-Key-Id' => commerce_code.to_s,
79
+ 'Tbk-Api-Key-Secret' => api_key,
80
+ 'Content-Type' => 'application/json'
81
+ }
82
+ end
83
+
84
+ def headers_patpass(commerce_code, api_key)
85
+ {
86
+ 'commercecode' => commerce_code.to_s,
87
+ 'Authorization' => api_key,
88
+ 'Content-Type' => 'application/json'
89
+ }
90
+ end
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,5 @@
1
+ module Transbank
2
+ module Shared
3
+ class TransbankError < StandardError; end
4
+ end
5
+ end
@@ -1,5 +1,5 @@
1
1
  module Transbank
2
2
  module Sdk
3
- VERSION = "1.3.1"
3
+ VERSION = '2.0.0'
4
4
  end
5
5
  end
@@ -0,0 +1,52 @@
1
+ module Transbank
2
+ module Webpay
3
+ module Oneclick
4
+ class MallInscription < ::Transbank::Common::BaseTransaction
5
+ DEFAULT_ENVIRONMENT = :integration
6
+ RESOURCES_URL = ::Transbank::Common::ApiConstants::ONECLICK_ENDPOINT
7
+ START_ENDPOINT = (RESOURCES_URL + '/inscriptions').freeze
8
+ FINISH_ENDPOINT = (RESOURCES_URL + '/inscriptions/%{token}').freeze
9
+ DELETE_ENDPOINT = (RESOURCES_URL + '/inscriptions').freeze
10
+
11
+ def initialize(commerce_code = ::Transbank::Common::IntegrationCommerceCodes::ONECLICK_MALL, api_key = ::Transbank::Common::IntegrationApiKeys::WEBPAY, environment = DEFAULT_ENVIRONMENT)
12
+ super
13
+ end
14
+
15
+ def start(username, email, response_url)
16
+
17
+ Transbank::Common::Validation.has_text_with_max_length(username, Transbank::Common::ApiConstants::USER_NAME_LENGTH, "username")
18
+ Transbank::Common::Validation.has_text_with_max_length(email, Transbank::Common::ApiConstants::EMAIL_LENGTH, "email")
19
+ Transbank::Common::Validation.has_text_with_max_length(response_url, Transbank::Common::ApiConstants::RETURN_URL_LENGTH, "response_url")
20
+
21
+ request_service = ::Transbank::Shared::RequestService.new(
22
+ @environment, START_ENDPOINT, @commerce_code, @api_key
23
+ )
24
+ request_service.post({
25
+ username: username, email: email, response_url: response_url
26
+ })
27
+ end
28
+
29
+ def finish(token)
30
+
31
+ Transbank::Common::Validation.has_text_with_max_length(token, Transbank::Common::ApiConstants::TOKEN_LENGTH, "token")
32
+
33
+ request_service = ::Transbank::Shared::RequestService.new(
34
+ @environment, format(FINISH_ENDPOINT, token: token), @commerce_code, @api_key
35
+ )
36
+ request_service.put({})
37
+ end
38
+
39
+ def delete(tbk_user, username)
40
+
41
+ Transbank::Common::Validation.has_text_with_max_length(tbk_user, Transbank::Common::ApiConstants::TBK_USER_LENGTH, "tbk_user")
42
+ Transbank::Common::Validation.has_text_with_max_length(username, Transbank::Common::ApiConstants::USER_NAME_LENGTH, "username")
43
+
44
+ request_service = ::Transbank::Shared::RequestService.new(
45
+ @environment, DELETE_ENDPOINT, @commerce_code, @api_key
46
+ )
47
+ request_service.delete({tbk_user: tbk_user, username: username})
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end