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,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.api_key,
64
+ commerce_code: Oneclick::Base.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.api_key,
88
+ commerce_code: Oneclick::Base.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
@@ -0,0 +1,4 @@
1
+ require 'transbank/sdk/oneclick/mall/errors/oneclick_mall_errors'
2
+ require 'transbank/sdk/oneclick/mall/responses/oneclick_mall_responses'
3
+ require 'transbank/sdk/oneclick/mall/mall_inscription'
4
+ require 'transbank/sdk/oneclick/mall/mall_transaction'
@@ -0,0 +1,16 @@
1
+ module Transbank
2
+ module Webpay
3
+ module Oneclick
4
+ class MallTransactionAuthorizeResponse
5
+ FIELDS = [:buy_order, :session_id, :card_detail, :expiration_date,
6
+ :accounting_date, :transaction_date, :details]
7
+
8
+ attr_accessor *FIELDS
9
+
10
+ def initialize(json)
11
+ FIELDS.each {|field| send("#{field}=", json["#{field}"]) }
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ module Transbank
2
+ module Webpay
3
+ module Oneclick
4
+ class MallTransactionRefundResponse
5
+ FIELDS = [:type, :authorization_code, :authorization_date,
6
+ :nullified_amount, :balance, :response_code]
7
+
8
+ attr_accessor *FIELDS
9
+
10
+ def initialize(json)
11
+ FIELDS.each {|field| send("#{field}=", json["#{field}"]) }
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,15 @@
1
+ module Transbank
2
+ module Webpay
3
+ module Oneclick
4
+ class MallTransactionStatusResponse
5
+ FIELDS = [:buy_order, :session_id, :card_detail, :expiration_date,
6
+ :accounting_date, :transaction_date, :details]
7
+ attr_accessor *FIELDS
8
+
9
+ def initialize(json)
10
+ FIELDS.each {|field| send("#{field}=", json["#{field}"]) }
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,4 @@
1
+ require 'transbank/sdk/oneclick/mall/responses/mall_transaction_authorize_response'
2
+ require 'transbank/sdk/oneclick/mall/responses/mall_transaction_status_response'
3
+ require 'transbank/sdk/oneclick/mall/responses/mall_transaction_refund_response'
4
+ require 'transbank/sdk/oneclick/mall_deferred/responses/mall_deferred_transaction_capture_response'
@@ -0,0 +1,16 @@
1
+ module Transbank
2
+ module Webpay
3
+ module Oneclick
4
+ module Errors
5
+ class MallDeferredTransactionCaptureError < 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,20 @@
1
+ module Transbank
2
+ module Webpay
3
+ module Oneclick
4
+ class MallDeferredInscription < Transbank::Webpay::Oneclick::MallInscription
5
+ extend Transbank::Utils::NetHelper
6
+
7
+ class << self
8
+ def default_integration_params
9
+ {
10
+ api_key: Oneclick::Base.api_key,
11
+ commerce_code: Oneclick::Base.commerce_code,
12
+ integration_type: Oneclick::Base::integration_type,
13
+ base_url: Oneclick::Base::current_integration_type_url
14
+ }
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,42 @@
1
+ module Transbank
2
+ module Webpay
3
+ module Oneclick
4
+ class MallDeferredTransaction < Transbank::Webpay::Oneclick::MallTransaction
5
+ extend Transbank::Utils::NetHelper
6
+ TRANSACTION_CAPTURE_ENDPOINT = 'rswebpaytransaction/api/oneclick/v1.0/transactions/capture'.freeze
7
+
8
+ class << self
9
+
10
+ def capture(child_commerce_code:, child_buy_order:, authorization_code:, amount:, options: nil)
11
+ api_key = options&.api_key || default_integration_params[:api_key]
12
+ commerce_code = options&.commerce_code || default_integration_params[:commerce_code]
13
+ integration_type = options&.integration_type || default_integration_params[:integration_type]
14
+ base_url = integration_type.nil? ? Oneclick::Base::integration_type[:TEST] : Oneclick::Base.integration_type_url(integration_type)
15
+
16
+ url = base_url + TRANSACTION_CAPTURE_ENDPOINT
17
+ headers = webpay_headers(commerce_code: commerce_code, api_key: api_key)
18
+ body = {
19
+ commerce_code: child_commerce_code,
20
+ buy_order: child_buy_order,
21
+ authorization_code: authorization_code,
22
+ capture_amount: amount
23
+ }
24
+ resp = http_put(uri_string: url, headers: headers, body: body)
25
+ body = JSON.parse(resp.body)
26
+ return ::Transbank::Webpay::Oneclick::MallDeferredTransactionCaptureResponse.new(body) if resp.kind_of? Net::HTTPSuccess
27
+ raise Oneclick::Errors::MallDeferredTransactionCaptureError.new(body['error_message'], resp.code)
28
+ end
29
+
30
+ def default_integration_params
31
+ {
32
+ api_key: Oneclick::Base.api_key,
33
+ commerce_code: Oneclick::Base.commerce_code,
34
+ integration_type: Oneclick::Base::integration_type,
35
+ base_url: Oneclick::Base::current_integration_type_url
36
+ }
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,16 @@
1
+ module Transbank
2
+ module Webpay
3
+ module Oneclick
4
+ class MallDeferredTransactionCaptureResponse
5
+
6
+ FIELDS = %i[authorization_code authorization_date captured_amount response_code]
7
+ attr_accessor *FIELDS
8
+
9
+ def initialize(json)
10
+ FIELDS.each {|field| send("#{field}=", json["#{field}"]) }
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+
@@ -0,0 +1,12 @@
1
+ require 'transbank/sdk/oneclick/base'
2
+ require 'transbank/sdk/oneclick/errors/oneclick_error'
3
+ require 'transbank/sdk/oneclick/inscription/inscription'
4
+ require 'transbank/sdk/oneclick/mall/oneclick_mall'
5
+ require 'transbank/sdk/oneclick/mall_deferred/mall_deferred_transaction'
6
+ require 'transbank/sdk/oneclick/mall_deferred/mall_deferred_inscription'
7
+
8
+ module Transbank
9
+ module Webpay
10
+ module Oneclick; end
11
+ end
12
+ end
@@ -0,0 +1,125 @@
1
+ module Transbank
2
+ module Onepay
3
+ class Base
4
+ # The base class for Transbank Onepay
5
+ DEFAULT_CALLBACK = "http://no.callback.has/been.set".freeze
6
+ DEFAULT_API_KEY = 'dKVhq1WGt_XapIYirTXNyUKoWTDFfxaEV63-O5jcsdw'.freeze
7
+ DEFAULT_SHARED_SECRET = '?XW#WOLG##FBAGEAYSNQ5APD#JF@$AYZ'.freeze
8
+
9
+ @app_keys = {TEST: '1a0c0639-bd2f-4846-8d26-81f43187e797',
10
+ LIVE: '2B571C49-C1B6-4AD1-9806-592AC68023B7',
11
+ MOCK: '04533c31-fe7e-43ed-bbc4-1c8ab1538afp'}.freeze
12
+ @integration_types = {TEST: 'https://onepay.ionix.cl'.freeze,
13
+ LIVE: 'https://www.onepay.cl'.freeze,
14
+ MOCK: 'https://transbank-onepay-ewallet-mock.herokuapp.com'.freeze}.freeze
15
+ @callback_url = self::DEFAULT_CALLBACK
16
+ @api_key = ENV['ONEPAY_API_KEY'].nil? ? DEFAULT_API_KEY : ENV['ONEPAY_API_KEY']
17
+ @shared_secret = ENV['ONEPAY_SHARED_SECRET'].nil? ? DEFAULT_SHARED_SECRET : ENV['ONEPAY_SHARED_SECRET']
18
+
19
+ @integration_type = :TEST
20
+ @app_scheme = nil
21
+ @default_channel = Transbank::Onepay::Channel::WEB
22
+
23
+ class << self
24
+ # Contains all valid integration types
25
+ # @return [Hash<String, String>]
26
+ attr_reader :integration_types
27
+
28
+ # Your Api key, given by Transbank
29
+ # @return [String]
30
+ attr_writer :api_key
31
+
32
+ # Your callback URL, used to resume the payment process after validating with
33
+ # Transbank when paying on Channel::MOBILE
34
+ # @param [String]
35
+ # @return [String]
36
+ attr_accessor :callback_url
37
+
38
+ # Your shared secret, given by Transbank
39
+ # @param [String]
40
+ # @return [String]
41
+ attr_writer :shared_secret
42
+
43
+ # The current integration type
44
+ # @param [String, Symbol]
45
+ # @return [Symbol]
46
+ attr_reader :integration_type
47
+
48
+ # The URI for the app (eg the Android Intent that starts the app/the iOS
49
+ # equivalent)
50
+ # @param [String]
51
+ # @return [String]
52
+ attr_writer :app_scheme
53
+
54
+ # The default channel. Value must be in Channel.values
55
+ # @return [String] One of the values from Channel.values
56
+ attr_reader :default_channel
57
+
58
+ # The width and height in pixels for the returned QR.
59
+ # @param [Integer]
60
+ # @return [Integer]
61
+ attr_accessor :qr_width_height
62
+
63
+ # The url of the commerce logo to be displayed in the Onepay mobile app.
64
+ # @param [String]
65
+ # @return [String]
66
+ attr_accessor :commerce_logo_url
67
+
68
+ # @return [String] the URL that is used by the current integration type
69
+ def current_integration_type_url
70
+ @integration_types[@integration_type]
71
+ end
72
+
73
+ # @return [String] the app key used by the current integration type
74
+ def current_integration_type_app_key
75
+ @app_keys[@integration_type]
76
+ end
77
+
78
+ # Sets the current integration type
79
+ # @param type [String] Type of integration to be set. Must be included one
80
+ # of the keys of self.integration_types
81
+ # @raise [IntegrationTypeError] if the given type is not valid
82
+ def integration_type=(type)
83
+ return @integration_type = type.to_sym unless @integration_types[type.to_sym].nil?
84
+ valid_values = @integration_types.keys.join(', ')
85
+ raise Transbank::Onepay::Errors::IntegrationTypeError, "Invalid integration type, valid values are #{valid_values}"
86
+ end
87
+
88
+ # Returns the app_scheme
89
+ # @return [String] the app scheme, either the one set on @app_scheme or,
90
+ # failing that, the value of ENV['ONEPAY_APP_SCHEME'] (your env variable)
91
+ def app_scheme
92
+ return ENV['ONEPAY_APP_SCHEME'] unless @app_scheme
93
+ @app_scheme
94
+ end
95
+
96
+ def api_key
97
+ return ENV['ONEPAY_API_KEY'] if @api_key.nil?
98
+ @api_key
99
+ end
100
+
101
+ # Returns the 'ONEPAY_API_KEY' env variable, or, if ONEPAY_API_KEY
102
+ # doesn't exist, returns a default api key
103
+ # @return [String] ENV['ONEPAY_API_KEY] or DEFAULT_API_KEY
104
+ def default_api_key
105
+ env_api_key = ENV['ONEPAY_API_KEY']
106
+ env_api_key.nil? ? DEFAULT_API_KEY : env_api_key
107
+ end
108
+
109
+ def shared_secret
110
+ return ENV['ONEPAY_SHARED_SECRET'] if @shared_secret.nil?
111
+ @shared_secret
112
+ end
113
+
114
+ # Returns the 'ONEPAY_SHARED_SECRET' env variable, or, if ONEPAY_SHARED_SECRET
115
+ # doesn't exist, returns a default shared secret
116
+ # @return [String] ENV['ONEPAY_SHARED_SECRET'] or DEFAULT_SHARED_SECRET
117
+ def default_shared_secret
118
+ env_shared_secret = ENV['ONEPAY_SHARED_SECRET']
119
+ env_shared_secret.nil? ? DEFAULT_SHARED_SECRET : env_shared_secret
120
+ end
121
+ end
122
+
123
+ end
124
+ end
125
+ end
@@ -0,0 +1,17 @@
1
+ require 'transbank/sdk/onepay/errors/transbank_error'
2
+ require 'transbank/sdk/onepay/errors/integration_type_error'
3
+ require 'transbank/sdk/onepay/errors/invalid_options_error'
4
+ require 'transbank/sdk/onepay/errors/item_error'
5
+ require 'transbank/sdk/onepay/errors/refund_create_error'
6
+ require 'transbank/sdk/onepay/errors/response_error'
7
+ require 'transbank/sdk/onepay/errors/shopping_cart_error'
8
+ require 'transbank/sdk/onepay/errors/signature_error'
9
+ require 'transbank/sdk/onepay/errors/transaction_commit_error'
10
+ require 'transbank/sdk/onepay/errors/transaction_create_error'
11
+
12
+ module Transbank
13
+ module Onepay
14
+ module Errors
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,8 @@
1
+ module Transbank
2
+ module Onepay
3
+ module Errors
4
+ class IntegrationTypeError < TransbankError
5
+ end
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ module Transbank
2
+ module Onepay
3
+ module Errors
4
+ class InvalidOptionsError < TransbankError
5
+ end
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ module Transbank
2
+ module Onepay
3
+ module Errors
4
+ class ItemError < TransbankError
5
+ end
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ module Transbank
2
+ module Onepay
3
+ module Errors
4
+ class RefundCreateError < TransbankError
5
+ end
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ module Transbank
2
+ module Onepay
3
+ module Errors
4
+ class ResponseError < TransbankError
5
+ end
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ module Transbank
2
+ module Onepay
3
+ module Errors
4
+ class ShoppingCartError < TransbankError
5
+ end
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ module Transbank
2
+ module Onepay
3
+ module Errors
4
+ class SignatureError < TransbankError
5
+ end
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ module Transbank
2
+ module Onepay
3
+ module Errors
4
+ class TransactionCommitError < TransbankError
5
+ end
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ module Transbank
2
+ module Onepay
3
+ module Errors
4
+ class TransactionCreateError < TransbankError
5
+ end
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,9 @@
1
+ module Transbank
2
+ module Onepay
3
+ module Errors
4
+ class TransbankError < StandardError
5
+ end
6
+ end
7
+ end
8
+ end
9
+
@@ -0,0 +1,15 @@
1
+ module Transbank
2
+ module Onepay
3
+ class Channel
4
+ ## Contains static values for all possible channel values
5
+
6
+ WEB = 'WEB'.freeze
7
+ MOBILE = 'MOBILE'.freeze
8
+ APP = 'APP'.freeze
9
+
10
+ def self.values
11
+ constants.map { |const| const_get const }
12
+ end
13
+ end
14
+ end
15
+ end