tbk-sdk 1.5.0.pre.ruby2.3

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 (158) hide show
  1. checksums.yaml +7 -0
  2. data/.built +0 -0
  3. data/.bundled +0 -0
  4. data/.github/ISSUE_TEMPLATE/reporte-de-error.md +40 -0
  5. data/.gitignore +16 -0
  6. data/.rakeTasks +7 -0
  7. data/.travis.yml +10 -0
  8. data/CHANGELOG.md +63 -0
  9. data/Dockerfile +5 -0
  10. data/Gemfile +6 -0
  11. data/LICENSE.md +11 -0
  12. data/Makefile +24 -0
  13. data/README.md +87 -0
  14. data/Rakefile +10 -0
  15. data/bin/console +14 -0
  16. data/bin/setup +8 -0
  17. data/docker-compose.yml +20 -0
  18. data/lib/transbank/sdk/oneclick/base.rb +64 -0
  19. data/lib/transbank/sdk/oneclick/errors/oneclick_error.rb +16 -0
  20. data/lib/transbank/sdk/oneclick/inscription/errors/mall_inscription_delete_error.rb +16 -0
  21. data/lib/transbank/sdk/oneclick/inscription/errors/mall_inscription_finish_error.rb +16 -0
  22. data/lib/transbank/sdk/oneclick/inscription/errors/mall_inscription_start_error.rb +16 -0
  23. data/lib/transbank/sdk/oneclick/inscription/errors/oneclick_mall_inscription_errors.rb +3 -0
  24. data/lib/transbank/sdk/oneclick/inscription/inscription.rb +3 -0
  25. data/lib/transbank/sdk/oneclick/inscription/responses/mall_inscription_delete_response.rb +18 -0
  26. data/lib/transbank/sdk/oneclick/inscription/responses/mall_inscription_finish_response.rb +15 -0
  27. data/lib/transbank/sdk/oneclick/inscription/responses/mall_inscription_start_response.rb +14 -0
  28. data/lib/transbank/sdk/oneclick/inscription/responses/oneclick_mall_inscription_responses.rb +3 -0
  29. data/lib/transbank/sdk/oneclick/mall/errors/mall_transaction_authorize_error.rb +16 -0
  30. data/lib/transbank/sdk/oneclick/mall/errors/mall_transaction_refund_error.rb +16 -0
  31. data/lib/transbank/sdk/oneclick/mall/errors/mall_transaction_status_error.rb +16 -0
  32. data/lib/transbank/sdk/oneclick/mall/errors/oneclick_mall_errors.rb +4 -0
  33. data/lib/transbank/sdk/oneclick/mall/mall_inscription.rb +73 -0
  34. data/lib/transbank/sdk/oneclick/mall/mall_transaction.rb +97 -0
  35. data/lib/transbank/sdk/oneclick/mall/oneclick_mall.rb +4 -0
  36. data/lib/transbank/sdk/oneclick/mall/responses/mall_transaction_authorize_response.rb +16 -0
  37. data/lib/transbank/sdk/oneclick/mall/responses/mall_transaction_refund_response.rb +16 -0
  38. data/lib/transbank/sdk/oneclick/mall/responses/mall_transaction_status_response.rb +15 -0
  39. data/lib/transbank/sdk/oneclick/mall/responses/oneclick_mall_responses.rb +4 -0
  40. data/lib/transbank/sdk/oneclick/mall_deferred/errors/mall_deferred_transaction_capture_error.rb +16 -0
  41. data/lib/transbank/sdk/oneclick/mall_deferred/mall_deferred_inscription.rb +20 -0
  42. data/lib/transbank/sdk/oneclick/mall_deferred/mall_deferred_transaction.rb +42 -0
  43. data/lib/transbank/sdk/oneclick/mall_deferred/responses/mall_deferred_transaction_capture_response.rb +16 -0
  44. data/lib/transbank/sdk/oneclick/oneclick.rb +12 -0
  45. data/lib/transbank/sdk/onepay/base.rb +125 -0
  46. data/lib/transbank/sdk/onepay/errors/errors.rb +17 -0
  47. data/lib/transbank/sdk/onepay/errors/integration_type_error.rb +8 -0
  48. data/lib/transbank/sdk/onepay/errors/invalid_options_error.rb +8 -0
  49. data/lib/transbank/sdk/onepay/errors/item_error.rb +8 -0
  50. data/lib/transbank/sdk/onepay/errors/refund_create_error.rb +8 -0
  51. data/lib/transbank/sdk/onepay/errors/response_error.rb +8 -0
  52. data/lib/transbank/sdk/onepay/errors/shopping_cart_error.rb +8 -0
  53. data/lib/transbank/sdk/onepay/errors/signature_error.rb +8 -0
  54. data/lib/transbank/sdk/onepay/errors/transaction_commit_error.rb +8 -0
  55. data/lib/transbank/sdk/onepay/errors/transaction_create_error.rb +8 -0
  56. data/lib/transbank/sdk/onepay/errors/transbank_error.rb +9 -0
  57. data/lib/transbank/sdk/onepay/models/channels.rb +15 -0
  58. data/lib/transbank/sdk/onepay/models/item.rb +103 -0
  59. data/lib/transbank/sdk/onepay/models/models.rb +10 -0
  60. data/lib/transbank/sdk/onepay/models/refund.rb +50 -0
  61. data/lib/transbank/sdk/onepay/models/shopping_cart.rb +65 -0
  62. data/lib/transbank/sdk/onepay/models/transaction.rb +143 -0
  63. data/lib/transbank/sdk/onepay/requests/refund_create_request.rb +45 -0
  64. data/lib/transbank/sdk/onepay/requests/request.rb +18 -0
  65. data/lib/transbank/sdk/onepay/requests/requests.rb +9 -0
  66. data/lib/transbank/sdk/onepay/requests/transaction_commit_request.rb +48 -0
  67. data/lib/transbank/sdk/onepay/requests/transaction_create_request.rb +85 -0
  68. data/lib/transbank/sdk/onepay/responses/refund_create_response.rb +24 -0
  69. data/lib/transbank/sdk/onepay/responses/response.rb +18 -0
  70. data/lib/transbank/sdk/onepay/responses/responses.rb +9 -0
  71. data/lib/transbank/sdk/onepay/responses/transaction_commit_response.rb +39 -0
  72. data/lib/transbank/sdk/onepay/responses/transaction_create_response.rb +32 -0
  73. data/lib/transbank/sdk/patpass/errors/integration_type_error.rb +8 -0
  74. data/lib/transbank/sdk/patpass/errors/patpass_error.rb +15 -0
  75. data/lib/transbank/sdk/patpass/patpass_by_webpay/base.rb +47 -0
  76. data/lib/transbank/sdk/patpass/patpass_by_webpay/errors/patpass_by_webpay_errors.rb +12 -0
  77. data/lib/transbank/sdk/patpass/patpass_by_webpay/errors/transaction_commit_error.rb +15 -0
  78. data/lib/transbank/sdk/patpass/patpass_by_webpay/errors/transaction_create_error.rb +15 -0
  79. data/lib/transbank/sdk/patpass/patpass_by_webpay/errors/transaction_status_error.rb +15 -0
  80. data/lib/transbank/sdk/patpass/patpass_by_webpay/options.rb +9 -0
  81. data/lib/transbank/sdk/patpass/patpass_by_webpay/patpass_by_webpay.rb +16 -0
  82. data/lib/transbank/sdk/patpass/patpass_by_webpay/responses/patpass_by_webpay_responses.rb +3 -0
  83. data/lib/transbank/sdk/patpass/patpass_by_webpay/responses/transaction_commit_response.rb +20 -0
  84. data/lib/transbank/sdk/patpass/patpass_by_webpay/responses/transaction_create_response.rb +15 -0
  85. data/lib/transbank/sdk/patpass/patpass_by_webpay/responses/transaction_status_response.rb +21 -0
  86. data/lib/transbank/sdk/patpass/patpass_by_webpay/transaction.rb +93 -0
  87. data/lib/transbank/sdk/patpass/patpass_comercio/base.rb +47 -0
  88. data/lib/transbank/sdk/patpass/patpass_comercio/errors/inscription_start_error.rb +15 -0
  89. data/lib/transbank/sdk/patpass/patpass_comercio/errors/inscription_status_error.rb +15 -0
  90. data/lib/transbank/sdk/patpass/patpass_comercio/errors/patpass_comercio_errors.rb +2 -0
  91. data/lib/transbank/sdk/patpass/patpass_comercio/inscription.rb +79 -0
  92. data/lib/transbank/sdk/patpass/patpass_comercio/options.rb +9 -0
  93. data/lib/transbank/sdk/patpass/patpass_comercio/patpass_comercio.rb +5 -0
  94. data/lib/transbank/sdk/patpass/patpass_comercio/responses/inscription_start_response.rb +13 -0
  95. data/lib/transbank/sdk/patpass/patpass_comercio/responses/inscription_status_response.rb +13 -0
  96. data/lib/transbank/sdk/patpass/patpass_comercio/responses/patpass_comercio_responses.rb +2 -0
  97. data/lib/transbank/sdk/transaccion_completa/base.rb +51 -0
  98. data/lib/transbank/sdk/transaccion_completa/errors/transaccion_completa_error.rb +16 -0
  99. data/lib/transbank/sdk/transaccion_completa/errors/transaccion_completa_errors.rb +7 -0
  100. data/lib/transbank/sdk/transaccion_completa/errors/transaction_capture_error.rb +14 -0
  101. data/lib/transbank/sdk/transaccion_completa/errors/transaction_commit_error.rb +14 -0
  102. data/lib/transbank/sdk/transaccion_completa/errors/transaction_create_error.rb +14 -0
  103. data/lib/transbank/sdk/transaccion_completa/errors/transaction_installments_error.rb +14 -0
  104. data/lib/transbank/sdk/transaccion_completa/errors/transaction_refund_error.rb +14 -0
  105. data/lib/transbank/sdk/transaccion_completa/errors/transaction_status_error.rb +14 -0
  106. data/lib/transbank/sdk/transaccion_completa/mall/mall_transaction.rb +197 -0
  107. data/lib/transbank/sdk/transaccion_completa/mall/responses/mall_transaction_capture_response.rb +12 -0
  108. data/lib/transbank/sdk/transaccion_completa/mall/responses/mall_transaction_commit_response.rb +15 -0
  109. data/lib/transbank/sdk/transaccion_completa/mall/responses/mall_transaction_installments_response.rb +11 -0
  110. data/lib/transbank/sdk/transaccion_completa/mall/responses/mall_transaction_responses.rb +4 -0
  111. data/lib/transbank/sdk/transaccion_completa/mall/responses/mall_transaction_status_response.rb +14 -0
  112. data/lib/transbank/sdk/transaccion_completa/options.rb +7 -0
  113. data/lib/transbank/sdk/transaccion_completa/responses/transaccion_completa_responses.rb +6 -0
  114. data/lib/transbank/sdk/transaccion_completa/responses/transaction_capture_response.rb +12 -0
  115. data/lib/transbank/sdk/transaccion_completa/responses/transaction_commit_response.rb +16 -0
  116. data/lib/transbank/sdk/transaccion_completa/responses/transaction_create_response.rb +10 -0
  117. data/lib/transbank/sdk/transaccion_completa/responses/transaction_installments_response.rb +13 -0
  118. data/lib/transbank/sdk/transaccion_completa/responses/transaction_refund_response.rb +14 -0
  119. data/lib/transbank/sdk/transaccion_completa/responses/transaction_status_response.rb +16 -0
  120. data/lib/transbank/sdk/transaccion_completa/transaccion_completa.rb +7 -0
  121. data/lib/transbank/sdk/transaccion_completa/transaction.rb +144 -0
  122. data/lib/transbank/sdk/transbank_error.rb +6 -0
  123. data/lib/transbank/sdk/utils/json_utils.rb +75 -0
  124. data/lib/transbank/sdk/utils/net_helper.rb +82 -0
  125. data/lib/transbank/sdk/utils/request_builder.rb +96 -0
  126. data/lib/transbank/sdk/utils/signature_utils.rb +49 -0
  127. data/lib/transbank/sdk/utils/utils.rb +9 -0
  128. data/lib/transbank/sdk/version.rb +5 -0
  129. data/lib/transbank/sdk/webpay/errors/integration_type_error.rb +8 -0
  130. data/lib/transbank/sdk/webpay/errors/webpay_error.rb +14 -0
  131. data/lib/transbank/sdk/webpay/webpay_plus/base.rb +74 -0
  132. data/lib/transbank/sdk/webpay/webpay_plus/deferred/deferred_transaction.rb +108 -0
  133. data/lib/transbank/sdk/webpay/webpay_plus/deferred/errors/transaction_capture_error.rb +16 -0
  134. data/lib/transbank/sdk/webpay/webpay_plus/deferred/errors/webpay_plus_deferred_errors.rb +1 -0
  135. data/lib/transbank/sdk/webpay/webpay_plus/deferred/responses/transaction_capture_response.rb +22 -0
  136. data/lib/transbank/sdk/webpay/webpay_plus/deferred/responses/webpay_plus_deferred_responses.rb +1 -0
  137. data/lib/transbank/sdk/webpay/webpay_plus/errors/transaction_commit_error.rb +17 -0
  138. data/lib/transbank/sdk/webpay/webpay_plus/errors/transaction_create_error.rb +16 -0
  139. data/lib/transbank/sdk/webpay/webpay_plus/errors/transaction_refund_error.rb +16 -0
  140. data/lib/transbank/sdk/webpay/webpay_plus/errors/transaction_status_error.rb +16 -0
  141. data/lib/transbank/sdk/webpay/webpay_plus/errors/webpay_plus_errors.rb +13 -0
  142. data/lib/transbank/sdk/webpay/webpay_plus/mall/mall_transaction.rb +88 -0
  143. data/lib/transbank/sdk/webpay/webpay_plus/mall/responses/mall_transaction_commit_response.rb +23 -0
  144. data/lib/transbank/sdk/webpay/webpay_plus/mall/responses/mall_transaction_status_response.rb +21 -0
  145. data/lib/transbank/sdk/webpay/webpay_plus/mall/responses/webpay_plus_mall_responses.rb +2 -0
  146. data/lib/transbank/sdk/webpay/webpay_plus/mall_deferred/mall_deferred_transaction.rb +109 -0
  147. data/lib/transbank/sdk/webpay/webpay_plus/options.rb +9 -0
  148. data/lib/transbank/sdk/webpay/webpay_plus/responses/transaction_commit_response.rb +20 -0
  149. data/lib/transbank/sdk/webpay/webpay_plus/responses/transaction_create_response.rb +15 -0
  150. data/lib/transbank/sdk/webpay/webpay_plus/responses/transaction_refund_response.rb +19 -0
  151. data/lib/transbank/sdk/webpay/webpay_plus/responses/transaction_status_response.rb +21 -0
  152. data/lib/transbank/sdk/webpay/webpay_plus/responses/webpay_plus_responses.rb +4 -0
  153. data/lib/transbank/sdk/webpay/webpay_plus/transaction.rb +89 -0
  154. data/lib/transbank/sdk/webpay/webpay_plus/webpay_plus.rb +24 -0
  155. data/lib/transbank/sdk.rb +27 -0
  156. data/sdk_test.sh +2 -0
  157. data/transbank-sdk.gemspec +35 -0
  158. metadata +340 -0
@@ -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,197 @@
1
+ module Transbank
2
+ module TransaccionCompleta
3
+ class MallTransaction
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
+ CAPTURE_TRANSACTION_ENDPOINT = 'rswebpaytransaction/api/webpay/v1.0/transactions/:token/capture'
12
+
13
+ class << self
14
+ def create(
15
+ buy_order:, session_id:, card_number:, card_expiration_date:, details:, cvv: nil, options: nil
16
+ )
17
+ api_key = options&.api_key || default_integration_params[:api_key]
18
+ commerce_code = options&.commerce_code || default_integration_params[:commerce_code]
19
+ integration_type = options&.integration_type || default_integration_params[:integration_type]
20
+ base_url = integration_type.nil? ? TransaccionCompleta::Base.integration_type[:TEST] : TransaccionCompleta::Base.integration_type_url(integration_type)
21
+
22
+ detail = create_details(details)
23
+ body = {
24
+ buy_order: buy_order, session_id: session_id,
25
+ card_number: card_number, card_expiration_date: card_expiration_date,
26
+ details: detail
27
+ }
28
+ body[:cvv] = cvv unless cvv.nil?
29
+
30
+ url = base_url + CREATE_TRANSACTION_ENDPOINT
31
+ headers = webpay_headers(commerce_code: commerce_code, api_key: api_key)
32
+ resp = http_post(uri_string: url, body: body, headers: headers, camel_case_keys: false)
33
+ body = JSON.parse(resp.body)
34
+ return ::Transbank::TransaccionCompleta::TransactionCreateResponse.new(body) if resp.is_a? Net::HTTPSuccess
35
+
36
+ raise Errors::TransactionCreateError.new(body['error_message'], resp.code)
37
+ end
38
+
39
+ def installments(token:, details:, options: nil)
40
+ api_key = options&.api_key || default_integration_params[:api_key]
41
+ base_commerce_code = options&.commerce_code || default_integration_params[:commerce_code]
42
+ integration_type = options&.integration_type || default_integration_params[:integration_type]
43
+ base_url = integration_type.nil? ? TransaccionCompleta::Base.integration_type[:TEST] : TransaccionCompleta::Base.integration_type_url(integration_type)
44
+
45
+ url = base_url + TRANSACTION_INSTALLMENTS_ENDPOINT.gsub(':token', token)
46
+ headers = webpay_headers(commerce_code: base_commerce_code, api_key: api_key)
47
+
48
+ detail = installments_details(details)
49
+
50
+ resp = detail.map do |det|
51
+ body = {
52
+ commerce_code: det[:commerce_code],
53
+ buy_order: det[:buy_order],
54
+ installments_number: det[:installments_number]
55
+ }
56
+ http_post(uri_string: url, body: body, headers: headers, camel_case_keys: false)
57
+ end
58
+
59
+ if resp.all? { |res| res.is_a? Net::HTTPSuccess }
60
+ return resp.map do |res|
61
+ body = JSON.parse(res.body)
62
+ ::Transbank::TransaccionCompleta::TransactionInstallmentsResponse.new(body)
63
+ end
64
+ end
65
+
66
+ raise Errors::TransactionInstallmentsError.new(resp, resp.code)
67
+ end
68
+
69
+ def commit(token:, details:, options: nil)
70
+ api_key = options&.api_key || default_integration_params[:api_key]
71
+ commerce_code = options&.commerce_code || default_integration_params[:commerce_code]
72
+ integration_type = options&.integration_type || default_integration_params[:integration_type]
73
+ base_url = integration_type.nil? ? TransaccionCompleta::Base.integration_type[:TEST] : TransaccionCompleta::Base.integration_type_url(integration_type)
74
+
75
+ url = base_url + COMMIT_TRANSACTION_ENDPOINT.gsub(':token', token)
76
+ headers = webpay_headers(commerce_code: commerce_code, api_key: api_key)
77
+
78
+ detail = commit_details(details)
79
+ body = { details: detail }
80
+
81
+ resp = http_put(uri_string: url, body: body, headers: headers)
82
+ body = JSON.parse(resp.body)
83
+ if resp.is_a? Net::HTTPSuccess
84
+ return ::Transbank::TransaccionCompleta::MallTransactionCommitResponse.new(body)
85
+ end
86
+
87
+ raise Errors::TransactionCommitError.new(body['error_message'], resp.code)
88
+ end
89
+
90
+ def status(token:, options: nil)
91
+ api_key = options&.api_key || default_integration_params[:api_key]
92
+ commerce_code = options&.commerce_code || default_integration_params[:commerce_code]
93
+ integration_type = options&.integration_type || default_integration_params[:integration_type]
94
+ base_url = integration_type.nil? ? TransaccionCompleta::Base.integration_type[:TEST] : TransaccionCompleta::Base.integration_type_url(integration_type)
95
+
96
+ url = base_url + TRANSACTION_STATUS_ENDPOINT.gsub(':token', token)
97
+ headers = webpay_headers(commerce_code: commerce_code, api_key: api_key)
98
+ resp = http_get(uri_string: url, headers: headers)
99
+ body = JSON.parse(resp.body)
100
+ if resp.is_a? Net::HTTPSuccess
101
+ return ::Transbank::TransaccionCompleta::MallTransactionStatusResponse.new(body)
102
+ end
103
+
104
+ raise Errors::TransactionStatusError.new(body['error_message'], resp.code)
105
+ end
106
+
107
+ def refund(token:, child_buy_order:, child_commerce_code:, amount:, options: nil)
108
+ api_key = options&.api_key || default_integration_params[:api_key]
109
+ commerce_code = options&.commerce_code || default_integration_params[:commerce_code]
110
+ integration_type = options&.integration_type || default_integration_params[:integration_type]
111
+ base_url = integration_type.nil? ? TransaccionCompleta::Base.integration_type[:TEST] : TransaccionCompleta::Base.integration_type_url(integration_type)
112
+
113
+ body = {
114
+ buy_order: child_buy_order,
115
+ commerce_code: child_commerce_code,
116
+ amount: amount
117
+ }
118
+
119
+ url = base_url + REFUND_TRANSACTION_ENDPOINT.gsub(':token', token)
120
+ headers = webpay_headers(commerce_code: commerce_code, api_key: api_key)
121
+ resp = http_post(uri_string: url, body: body, headers: headers, camel_case_keys: false)
122
+ body = JSON.parse(resp.body)
123
+ return ::Transbank::TransaccionCompleta::TransactionRefundResponse.new(body) if resp.is_a? Net::HTTPSuccess
124
+
125
+ raise Errors::TransactionRefundError.new(body['error_message'], resp.code)
126
+ end
127
+
128
+ def capture(token:, commerce_code:, buy_order:, authorization_code:, capture_amount:, options: nil)
129
+ api_key = options&.api_key || default_integration_params[:api_key]
130
+ parent_commerce_code = options&.commerce_code || default_integration_params[:commerce_code]
131
+ integration_type = options&.integration_type || default_integration_params[:integration_type]
132
+ base_url = integration_type.nil? ? TransaccionCompleta::Base.integration_type[:TEST] : TransaccionCompleta::Base.integration_type_url(integration_type)
133
+
134
+ body = {
135
+ commerce_code: commerce_code,
136
+ buy_order: buy_order,
137
+ authorization_code: authorization_code,
138
+ capture_amount: capture_amount
139
+ }
140
+
141
+ url = base_url + CAPTURE_TRANSACTION_ENDPOINT.gsub(':token', token)
142
+ headers = webpay_headers(commerce_code: parent_commerce_code, api_key: api_key)
143
+ resp = http_put(uri_string: url, body: body, headers: headers)
144
+ body = JSON.parse(resp.body)
145
+ if resp.is_a? Net::HTTPSuccess
146
+ return ::Transbank::TransaccionCompleta::MallTransactionCaptureResponse.new(body)
147
+ end
148
+
149
+ raise Errors::TransactionCaptureError.new(body['error_message'], resp.code)
150
+ end
151
+
152
+ def default_integration_params
153
+ {
154
+ api_key: TransaccionCompleta::Base.api_key,
155
+ commerce_code: TransaccionCompleta::Base.commerce_code,
156
+ integration_type: TransaccionCompleta::Base.integration_type,
157
+ base_url: TransaccionCompleta::Base.current_integration_type_url
158
+ }
159
+ end
160
+
161
+ private
162
+
163
+ def create_details(details)
164
+ details.map do |det|
165
+ {
166
+ amount: det.fetch('amount') { det.fetch(:amount) },
167
+ commerce_code: det.fetch('commerce_code') { det.fetch(:commerce_code) },
168
+ buy_order: det.fetch('buy_order') { det.fetch(:buy_order) }
169
+ }
170
+ end
171
+ end
172
+
173
+ def commit_details(details)
174
+ details.map do |det|
175
+ {
176
+ commerce_code: det.fetch('commerce_code') { det.fetch(:commerce_code) },
177
+ buy_order: det.fetch('buy_order') { det.fetch(:buy_order) },
178
+ id_query_installments: det.fetch('id_query_installments') { det.fetch(:id_query_installments) },
179
+ deferred_period_index: det.fetch('deferred_period_index') { det.fetch(:deferred_period_index) },
180
+ grace_period: det.fetch('grace_period') { det.fetch(:grace_period) }
181
+ }
182
+ end
183
+ end
184
+
185
+ def installments_details(details)
186
+ details.map do |det|
187
+ {
188
+ installments_number: det.fetch('installments_number') { det.fetch(:installments_number) },
189
+ buy_order: det.fetch('buy_order') { det.fetch(:buy_order) },
190
+ commerce_code: det.fetch('commerce_code') { det.fetch(:commerce_code) }
191
+ }
192
+ end
193
+ end
194
+ end
195
+ end
196
+ end
197
+ end
@@ -0,0 +1,12 @@
1
+ module Transbank
2
+ module TransaccionCompleta
3
+ class MallTransactionCaptureResponse
4
+ FIELDS = %i[token authorization_code authorization_date captured_amount response_code].freeze
5
+ attr_accessor(*FIELDS)
6
+
7
+ def initialize(json)
8
+ FIELDS.each { |field| send("#{field}=", json[field.to_s]) }
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,15 @@
1
+ module Transbank
2
+ module TransaccionCompleta
3
+ class MallTransactionCommitResponse
4
+ FIELDS = %i[
5
+ 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.to_s]) }
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,11 @@
1
+ module Transbank
2
+ module TransaccionCompleta
3
+ class MallTransactionInstallmentsResponse
4
+
5
+ attr_accessor :value
6
+ def initialize(responses)
7
+ @value = responses
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,4 @@
1
+ require 'transbank/sdk/transaccion_completa/mall/responses/mall_transaction_commit_response'
2
+ require 'transbank/sdk/transaccion_completa/mall/responses/mall_transaction_status_response'
3
+ require 'transbank/sdk/transaccion_completa/mall/responses/mall_transaction_installments_response'
4
+ require 'transbank/sdk/transaccion_completa/mall/responses/mall_transaction_capture_response'
@@ -0,0 +1,14 @@
1
+ module Transbank
2
+ module TransaccionCompleta
3
+ class MallTransactionStatusResponse
4
+ FIELDS = %i(
5
+ buy_order session_id card_detail expiration_date
6
+ accounting_date transaction_date details
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,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,6 @@
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'
6
+ require 'transbank/sdk/transaccion_completa/responses/transaction_capture_response'
@@ -0,0 +1,12 @@
1
+ module Transbank
2
+ module TransaccionCompleta
3
+ class TransactionCaptureResponse
4
+ FIELDS = %i[token authorization_code authorization_date captured_amount response_code].freeze
5
+ attr_accessor(*FIELDS)
6
+
7
+ def initialize(json)
8
+ FIELDS.each { |field| send("#{field}=", json[field.to_s]) }
9
+ end
10
+ end
11
+ end
12
+ end
@@ -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,7 @@
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'
6
+ require 'transbank/sdk/transaccion_completa/mall/mall_transaction'
7
+ require 'transbank/sdk/transaccion_completa/mall/responses/mall_transaction_responses'
@@ -0,0 +1,144 @@
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
+ CAPTURE_TRANSACTION_ENDPOINT = 'rswebpaytransaction/api/webpay/v1.0/transactions/:token/capture'
12
+
13
+ class << self
14
+ def create(buy_order:, session_id:, amount:, card_number:, cvv:,
15
+ card_expiration_date:, options: nil)
16
+ api_key = options&.api_key || default_integration_params[:api_key]
17
+ commerce_code = options&.commerce_code || default_integration_params[:commerce_code]
18
+ integration_type = options&.integration_type || default_integration_params[:integration_type]
19
+ base_url = integration_type.nil? ? TransaccionCompleta::Base.integration_type[:TEST] : TransaccionCompleta::Base.integration_type_url(integration_type)
20
+
21
+ body = {
22
+ buy_order: buy_order, session_id: session_id,
23
+ amount: amount, card_number: card_number, cvv: cvv,
24
+ card_expiration_date: card_expiration_date
25
+ }
26
+
27
+ url = base_url + CREATE_TRANSACTION_ENDPOINT
28
+ headers = webpay_headers(commerce_code: commerce_code, api_key: api_key)
29
+ resp = http_post(uri_string: url, body: body, headers: headers, camel_case_keys: false)
30
+ body = JSON.parse(resp.body)
31
+ return ::Transbank::TransaccionCompleta::TransactionCreateResponse.new(body) if resp.is_a? Net::HTTPSuccess
32
+
33
+ raise Errors::TransactionCreateError.new(body['error_message'], resp.code)
34
+ end
35
+
36
+ def installments(token:, installments_number:, options: nil)
37
+ api_key = options&.api_key || default_integration_params[:api_key]
38
+ commerce_code = options&.commerce_code || default_integration_params[:commerce_code]
39
+ integration_type = options&.integration_type || default_integration_params[:integration_type]
40
+ base_url = integration_type.nil? ? TransaccionCompleta::Base.integration_type[:TEST] : TransaccionCompleta::Base.integration_type_url(integration_type)
41
+
42
+ url = base_url + TRANSACTION_INSTALLMENTS_ENDPOINT.gsub(':token', token)
43
+ headers = webpay_headers(commerce_code: commerce_code, api_key: api_key)
44
+
45
+ body = { installments_number: installments_number }
46
+
47
+ resp = http_post(uri_string: url, body: body, headers: headers, camel_case_keys: false)
48
+ body = JSON.parse(resp.body)
49
+ if resp.is_a? Net::HTTPSuccess
50
+ return ::Transbank::TransaccionCompleta::TransactionInstallmentsResponse.new(body)
51
+ end
52
+
53
+ raise Errors::TransactionInstallmentsError.new(body['error_message'], resp.code)
54
+ end
55
+
56
+ def commit(token:, id_query_installments:, deferred_period_index:,
57
+ grace_period:, options: nil)
58
+ api_key = options&.api_key || default_integration_params[:api_key]
59
+ commerce_code = options&.commerce_code || default_integration_params[:commerce_code]
60
+ integration_type = options&.integration_type || default_integration_params[:integration_type]
61
+ base_url = integration_type.nil? ? TransaccionCompleta::Base.integration_type[:TEST] : TransaccionCompleta::Base.integration_type_url(integration_type)
62
+
63
+ url = base_url + COMMIT_TRANSACTION_ENDPOINT.gsub(':token', token)
64
+ headers = webpay_headers(commerce_code: commerce_code, api_key: api_key)
65
+ body = {
66
+ id_query_installments: id_query_installments,
67
+ deferred_period_index: deferred_period_index,
68
+ grace_period: grace_period
69
+ }
70
+
71
+ resp = http_put(uri_string: url, body: body, headers: headers)
72
+ body = JSON.parse(resp.body)
73
+ return ::Transbank::TransaccionCompleta::TransactionCommitResponse.new(body) if resp.is_a? Net::HTTPSuccess
74
+
75
+ raise Errors::TransactionCommitError.new(body['error_message'], resp.code)
76
+ end
77
+
78
+ def status(token:, options: nil)
79
+ api_key = options&.api_key || default_integration_params[:api_key]
80
+ commerce_code = options&.commerce_code || default_integration_params[:commerce_code]
81
+ integration_type = options&.integration_type || default_integration_params[:integration_type]
82
+ base_url = integration_type.nil? ? TransaccionCompleta::Base.integration_type[:TEST] : TransaccionCompleta::Base.integration_type_url(integration_type)
83
+
84
+ url = base_url + TRANSACTION_STATUS_ENDPOINT.gsub(':token', token)
85
+ headers = webpay_headers(commerce_code: commerce_code, api_key: api_key)
86
+ resp = http_get(uri_string: url, headers: headers)
87
+ body = JSON.parse(resp.body)
88
+ return ::Transbank::TransaccionCompleta::TransactionStatusResponse.new(body) if resp.is_a? Net::HTTPSuccess
89
+
90
+ raise Errors::TransactionStatusError.new(body['error_message'], resp.code)
91
+ end
92
+
93
+ def refund(token:, amount:, options: nil)
94
+ api_key = options&.api_key || default_integration_params[:api_key]
95
+ commerce_code = options&.commerce_code || default_integration_params[:commerce_code]
96
+ integration_type = options&.integration_type || default_integration_params[:integration_type]
97
+ base_url = integration_type.nil? ? TransaccionCompleta::Base.integration_type[:TEST] : TransaccionCompleta::Base.integration_type_url(integration_type)
98
+
99
+ body = {
100
+ amount: amount
101
+ }
102
+
103
+ url = base_url + REFUND_TRANSACTION_ENDPOINT.gsub(':token', token)
104
+ headers = webpay_headers(commerce_code: commerce_code, api_key: api_key)
105
+ resp = http_post(uri_string: url, body: body, headers: headers, camel_case_keys: false)
106
+ body = JSON.parse(resp.body)
107
+ return ::Transbank::TransaccionCompleta::TransactionRefundResponse.new(body) if resp.is_a? Net::HTTPSuccess
108
+
109
+ raise Errors::TransactionRefundError.new(body['error_message'], resp.code)
110
+ end
111
+
112
+ def capture(token:, buy_order:, authorization_code:, capture_amount:, options: nil)
113
+ api_key = options&.api_key || default_integration_params[:api_key]
114
+ commerce_code = options&.commerce_code || default_integration_params[:commerce_code]
115
+ integration_type = options&.integration_type || default_integration_params[:integration_type]
116
+ base_url = integration_type.nil? ? TransaccionCompleta::Base.integration_type[:TEST] : TransaccionCompleta::Base.integration_type_url(integration_type)
117
+
118
+ body = {
119
+ buy_order: buy_order,
120
+ authorization_code: authorization_code,
121
+ capture_amount: capture_amount
122
+ }
123
+
124
+ url = base_url + CAPTURE_TRANSACTION_ENDPOINT.gsub(':token', token)
125
+ headers = webpay_headers(commerce_code: commerce_code, api_key: api_key)
126
+ resp = http_put(uri_string: url, body: body, headers: headers)
127
+ body = JSON.parse(resp.body)
128
+ return ::Transbank::TransaccionCompleta::TransactionCaptureResponse.new(body) if resp.is_a? Net::HTTPSuccess
129
+
130
+ raise Errors::TransactionCaptureError.new(body['error_message'], resp.code)
131
+ end
132
+
133
+ def default_integration_params
134
+ {
135
+ api_key: TransaccionCompleta::Base.api_key,
136
+ commerce_code: TransaccionCompleta::Base.commerce_code,
137
+ integration_type: TransaccionCompleta::Base.integration_type,
138
+ base_url: TransaccionCompleta::Base.current_integration_type_url
139
+ }
140
+ end
141
+ end
142
+ end
143
+ end
144
+ end
@@ -0,0 +1,6 @@
1
+ module Transbank
2
+ module Errors
3
+ class TransbankError < StandardError
4
+ end
5
+ end
6
+ end