transbank-sdk 1.1.0 → 1.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (125) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE/reporte-de-error.md +40 -0
  3. data/.gitignore +3 -1
  4. data/.travis.yml +3 -1
  5. data/CHANGELOG.md +38 -0
  6. data/Makefile +1 -1
  7. data/README.md +4 -7
  8. data/lib/transbank/sdk.rb +9 -5
  9. data/lib/transbank/sdk/oneclick/base.rb +64 -0
  10. data/lib/transbank/sdk/oneclick/errors/oneclick_error.rb +16 -0
  11. data/lib/transbank/sdk/oneclick/inscription/errors/mall_inscription_delete_error.rb +16 -0
  12. data/lib/transbank/sdk/oneclick/inscription/errors/mall_inscription_finish_error.rb +16 -0
  13. data/lib/transbank/sdk/oneclick/inscription/errors/mall_inscription_start_error.rb +16 -0
  14. data/lib/transbank/sdk/oneclick/inscription/errors/oneclick_mall_inscription_errors.rb +3 -0
  15. data/lib/transbank/sdk/oneclick/inscription/inscription.rb +3 -0
  16. data/lib/transbank/sdk/oneclick/inscription/responses/mall_inscription_delete_response.rb +18 -0
  17. data/lib/transbank/sdk/oneclick/inscription/responses/mall_inscription_finish_response.rb +15 -0
  18. data/lib/transbank/sdk/oneclick/inscription/responses/mall_inscription_start_response.rb +14 -0
  19. data/lib/transbank/sdk/oneclick/inscription/responses/oneclick_mall_inscription_responses.rb +3 -0
  20. data/lib/transbank/sdk/oneclick/mall/errors/mall_transaction_authorize_error.rb +16 -0
  21. data/lib/transbank/sdk/oneclick/mall/errors/mall_transaction_refund_error.rb +16 -0
  22. data/lib/transbank/sdk/oneclick/mall/errors/mall_transaction_status_error.rb +16 -0
  23. data/lib/transbank/sdk/oneclick/mall/errors/oneclick_mall_errors.rb +4 -0
  24. data/lib/transbank/sdk/oneclick/mall/mall_inscription.rb +73 -0
  25. data/lib/transbank/sdk/oneclick/mall/mall_transaction.rb +97 -0
  26. data/lib/transbank/sdk/oneclick/mall/oneclick_mall.rb +4 -0
  27. data/lib/transbank/sdk/oneclick/mall/responses/mall_transaction_authorize_response.rb +16 -0
  28. data/lib/transbank/sdk/oneclick/mall/responses/mall_transaction_refund_response.rb +16 -0
  29. data/lib/transbank/sdk/oneclick/mall/responses/mall_transaction_status_response.rb +15 -0
  30. data/lib/transbank/sdk/oneclick/mall/responses/oneclick_mall_responses.rb +4 -0
  31. data/lib/transbank/sdk/oneclick/mall_deferred/errors/mall_deferred_transaction_capture_error.rb +16 -0
  32. data/lib/transbank/sdk/oneclick/mall_deferred/mall_deferred_inscription.rb +20 -0
  33. data/lib/transbank/sdk/oneclick/mall_deferred/mall_deferred_transaction.rb +42 -0
  34. data/lib/transbank/sdk/oneclick/mall_deferred/responses/mall_deferred_transaction_capture_response.rb +16 -0
  35. data/lib/transbank/sdk/oneclick/oneclick.rb +12 -0
  36. data/lib/transbank/sdk/onepay/models/item.rb +1 -1
  37. data/lib/transbank/sdk/onepay/models/refund.rb +4 -5
  38. data/lib/transbank/sdk/onepay/models/shopping_cart.rb +1 -1
  39. data/lib/transbank/sdk/onepay/models/transaction.rb +11 -9
  40. data/lib/transbank/sdk/onepay/requests/request.rb +1 -1
  41. data/lib/transbank/sdk/onepay/responses/response.rb +1 -1
  42. data/lib/transbank/sdk/patpass/errors/integration_type_error.rb +8 -0
  43. data/lib/transbank/sdk/patpass/errors/patpass_error.rb +15 -0
  44. data/lib/transbank/sdk/patpass/patpass_by_webpay/base.rb +47 -0
  45. data/lib/transbank/sdk/patpass/patpass_by_webpay/errors/patpass_by_webpay_errors.rb +12 -0
  46. data/lib/transbank/sdk/patpass/patpass_by_webpay/errors/transaction_commit_error.rb +15 -0
  47. data/lib/transbank/sdk/patpass/patpass_by_webpay/errors/transaction_create_error.rb +15 -0
  48. data/lib/transbank/sdk/patpass/patpass_by_webpay/errors/transaction_status_error.rb +15 -0
  49. data/lib/transbank/sdk/patpass/patpass_by_webpay/options.rb +9 -0
  50. data/lib/transbank/sdk/patpass/patpass_by_webpay/patpass_by_webpay.rb +16 -0
  51. data/lib/transbank/sdk/patpass/patpass_by_webpay/responses/patpass_by_webpay_responses.rb +3 -0
  52. data/lib/transbank/sdk/patpass/patpass_by_webpay/responses/transaction_commit_response.rb +20 -0
  53. data/lib/transbank/sdk/patpass/patpass_by_webpay/responses/transaction_create_response.rb +15 -0
  54. data/lib/transbank/sdk/patpass/patpass_by_webpay/responses/transaction_status_response.rb +21 -0
  55. data/lib/transbank/sdk/patpass/patpass_by_webpay/transaction.rb +93 -0
  56. data/lib/transbank/sdk/patpass/patpass_comercio/base.rb +47 -0
  57. data/lib/transbank/sdk/patpass/patpass_comercio/errors/inscription_start_error.rb +15 -0
  58. data/lib/transbank/sdk/patpass/patpass_comercio/errors/inscription_status_error.rb +15 -0
  59. data/lib/transbank/sdk/patpass/patpass_comercio/errors/patpass_comercio_errors.rb +2 -0
  60. data/lib/transbank/sdk/patpass/patpass_comercio/inscription.rb +79 -0
  61. data/lib/transbank/sdk/patpass/patpass_comercio/options.rb +9 -0
  62. data/lib/transbank/sdk/patpass/patpass_comercio/patpass_comercio.rb +5 -0
  63. data/lib/transbank/sdk/patpass/patpass_comercio/responses/inscription_start_response.rb +13 -0
  64. data/lib/transbank/sdk/patpass/patpass_comercio/responses/inscription_status_response.rb +13 -0
  65. data/lib/transbank/sdk/patpass/patpass_comercio/responses/patpass_comercio_responses.rb +2 -0
  66. data/lib/transbank/sdk/transaccion_completa/base.rb +49 -0
  67. data/lib/transbank/sdk/transaccion_completa/errors/transaccion_completa_error.rb +16 -0
  68. data/lib/transbank/sdk/transaccion_completa/errors/transaccion_completa_errors.rb +6 -0
  69. data/lib/transbank/sdk/transaccion_completa/errors/transaction_commit_error.rb +14 -0
  70. data/lib/transbank/sdk/transaccion_completa/errors/transaction_create_error.rb +14 -0
  71. data/lib/transbank/sdk/transaccion_completa/errors/transaction_installments_error.rb +14 -0
  72. data/lib/transbank/sdk/transaccion_completa/errors/transaction_refund_error.rb +14 -0
  73. data/lib/transbank/sdk/transaccion_completa/errors/transaction_status_error.rb +14 -0
  74. data/lib/transbank/sdk/transaccion_completa/mall/mall_transaction.rb +164 -0
  75. data/lib/transbank/sdk/transaccion_completa/mall/responses/mall_transaction_commit_response.rb +14 -0
  76. data/lib/transbank/sdk/transaccion_completa/mall/responses/mall_transaction_installments_response.rb +11 -0
  77. data/lib/transbank/sdk/transaccion_completa/mall/responses/mall_transaction_responses.rb +3 -0
  78. data/lib/transbank/sdk/transaccion_completa/mall/responses/mall_transaction_status_response.rb +14 -0
  79. data/lib/transbank/sdk/transaccion_completa/options.rb +7 -0
  80. data/lib/transbank/sdk/transaccion_completa/responses/transaccion_completa_responses.rb +5 -0
  81. data/lib/transbank/sdk/transaccion_completa/responses/transaction_commit_response.rb +16 -0
  82. data/lib/transbank/sdk/transaccion_completa/responses/transaction_create_response.rb +10 -0
  83. data/lib/transbank/sdk/transaccion_completa/responses/transaction_installments_response.rb +13 -0
  84. data/lib/transbank/sdk/transaccion_completa/responses/transaction_refund_response.rb +14 -0
  85. data/lib/transbank/sdk/transaccion_completa/responses/transaction_status_response.rb +16 -0
  86. data/lib/transbank/sdk/transaccion_completa/transaccion_completa.rb +5 -0
  87. data/lib/transbank/sdk/transaccion_completa/transaction.rb +117 -0
  88. data/lib/transbank/sdk/transbank_error.rb +6 -0
  89. data/lib/transbank/sdk/utils/json_utils.rb +75 -0
  90. data/lib/transbank/sdk/utils/net_helper.rb +82 -0
  91. data/lib/transbank/sdk/{onepay/utils → utils}/request_builder.rb +0 -0
  92. data/lib/transbank/sdk/{onepay/utils → utils}/signature_utils.rb +0 -0
  93. data/lib/transbank/sdk/utils/utils.rb +9 -0
  94. data/lib/transbank/sdk/version.rb +1 -1
  95. data/lib/transbank/sdk/webpay/errors/integration_type_error.rb +8 -0
  96. data/lib/transbank/sdk/webpay/errors/webpay_error.rb +14 -0
  97. data/lib/transbank/sdk/webpay/webpay_plus/base.rb +74 -0
  98. data/lib/transbank/sdk/webpay/webpay_plus/deferred/deferred_transaction.rb +108 -0
  99. data/lib/transbank/sdk/webpay/webpay_plus/deferred/errors/transaction_capture_error.rb +16 -0
  100. data/lib/transbank/sdk/webpay/webpay_plus/deferred/errors/webpay_plus_deferred_errors.rb +1 -0
  101. data/lib/transbank/sdk/webpay/webpay_plus/deferred/responses/transaction_capture_response.rb +22 -0
  102. data/lib/transbank/sdk/webpay/webpay_plus/deferred/responses/webpay_plus_deferred_responses.rb +1 -0
  103. data/lib/transbank/sdk/webpay/webpay_plus/errors/transaction_commit_error.rb +17 -0
  104. data/lib/transbank/sdk/webpay/webpay_plus/errors/transaction_create_error.rb +16 -0
  105. data/lib/transbank/sdk/webpay/webpay_plus/errors/transaction_refund_error.rb +16 -0
  106. data/lib/transbank/sdk/webpay/webpay_plus/errors/transaction_status_error.rb +16 -0
  107. data/lib/transbank/sdk/webpay/webpay_plus/errors/webpay_plus_errors.rb +13 -0
  108. data/lib/transbank/sdk/webpay/webpay_plus/mall/mall_transaction.rb +88 -0
  109. data/lib/transbank/sdk/webpay/webpay_plus/mall/responses/mall_transaction_commit_response.rb +23 -0
  110. data/lib/transbank/sdk/webpay/webpay_plus/mall/responses/mall_transaction_status_response.rb +21 -0
  111. data/lib/transbank/sdk/webpay/webpay_plus/mall/responses/webpay_plus_mall_responses.rb +2 -0
  112. data/lib/transbank/sdk/webpay/webpay_plus/mall_deferred/mall_deferred_transaction.rb +109 -0
  113. data/lib/transbank/sdk/webpay/webpay_plus/options.rb +9 -0
  114. data/lib/transbank/sdk/webpay/webpay_plus/responses/transaction_commit_response.rb +20 -0
  115. data/lib/transbank/sdk/webpay/webpay_plus/responses/transaction_create_response.rb +15 -0
  116. data/lib/transbank/sdk/webpay/webpay_plus/responses/transaction_refund_response.rb +19 -0
  117. data/lib/transbank/sdk/webpay/webpay_plus/responses/transaction_status_response.rb +21 -0
  118. data/lib/transbank/sdk/webpay/webpay_plus/responses/webpay_plus_responses.rb +4 -0
  119. data/lib/transbank/sdk/webpay/webpay_plus/transaction.rb +89 -0
  120. data/lib/transbank/sdk/webpay/webpay_plus/webpay_plus.rb +24 -0
  121. data/transbank-sdk.gemspec +10 -8
  122. metadata +148 -31
  123. data/lib/transbank/sdk/onepay/utils/json_utils.rb +0 -77
  124. data/lib/transbank/sdk/onepay/utils/net_helper.rb +0 -38
  125. data/lib/transbank/sdk/onepay/utils/utils.rb +0 -9
@@ -0,0 +1,10 @@
1
+ module Transbank
2
+ module TransaccionCompleta
3
+ class TransactionCreateResponse
4
+ attr_accessor :token
5
+ def initialize(json)
6
+ @token = json['token']
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,13 @@
1
+ module Transbank
2
+ module TransaccionCompleta
3
+ class TransactionInstallmentsResponse
4
+ attr_accessor :installments_amount, :id_query_installments,
5
+ :deferred_periods
6
+ def initialize(json)
7
+ @installments_amount = json['installments_amount']
8
+ @id_query_installments = json['id_query_installments']
9
+ @deferred_periods = json['deferred_periods']
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,14 @@
1
+ module Transbank
2
+ module TransaccionCompleta
3
+ class TransactionRefundResponse
4
+ FIELDS = %i(
5
+ type authorization_code authorization_date
6
+ nullified_amount balance response_code
7
+ )
8
+ attr_accessor *FIELDS
9
+ def initialize(json)
10
+ FIELDS.each { |field| send("#{field}=", json["#{field}"])}
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,16 @@
1
+ module Transbank
2
+ module TransaccionCompleta
3
+ class TransactionStatusResponse
4
+ FIELDS = %i(
5
+ vci amount status buy_order session_id card_number
6
+ accounting_date transaction_date authorization_code
7
+ payment_type_code response_code installments_number
8
+ installments_amount balance
9
+ )
10
+ attr_accessor *FIELDS
11
+ def initialize(json)
12
+ FIELDS.each { |field| send("#{field}=", json["#{field}"])}
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,5 @@
1
+ require 'transbank/sdk/transaccion_completa/errors/transaccion_completa_errors'
2
+ require 'transbank/sdk/transaccion_completa/responses/transaccion_completa_responses'
3
+ require 'transbank/sdk/transaccion_completa/options'
4
+ require 'transbank/sdk/transaccion_completa/base'
5
+ require 'transbank/sdk/transaccion_completa/transaction'
@@ -0,0 +1,117 @@
1
+ module Transbank
2
+ module TransaccionCompleta
3
+ class Transaction
4
+ extend Utils::NetHelper
5
+
6
+ CREATE_TRANSACTION_ENDPOINT = 'rswebpaytransaction/api/webpay/v1.0/transactions'
7
+ TRANSACTION_INSTALLMENTS_ENDPOINT = 'rswebpaytransaction/api/webpay/v1.0/transactions/:token/installments'
8
+ COMMIT_TRANSACTION_ENDPOINT = 'rswebpaytransaction/api/webpay/v1.0/transactions/:token'
9
+ TRANSACTION_STATUS_ENDPOINT = 'rswebpaytransaction/api/webpay/v1.0/transactions/:token'
10
+ REFUND_TRANSACTION_ENDPOINT = 'rswebpaytransaction/api/webpay/v1.0/transactions/:token/refunds'
11
+
12
+ class << self
13
+ def create(buy_order:, session_id:, amount:, card_number:, cvv:,
14
+ card_expiration_date:, options:nil)
15
+ api_key = options&.api_key || default_integration_params[:api_key]
16
+ commerce_code = options&.commerce_code || default_integration_params[:commerce_code]
17
+ integration_type = options&.integration_type || default_integration_params[:integration_type]
18
+ base_url = integration_type.nil? ? TransaccionCompleta::Base::integration_type[:TEST] : TransaccionCompleta::Base.integration_type_url(integration_type)
19
+
20
+ body = {
21
+ buy_order: buy_order, session_id: session_id,
22
+ amount: amount, card_number: card_number, cvv: cvv,
23
+ card_expiration_date: card_expiration_date
24
+ }
25
+
26
+ url = base_url + CREATE_TRANSACTION_ENDPOINT
27
+ headers = webpay_headers(commerce_code: commerce_code, api_key: api_key)
28
+ resp = http_post(uri_string: url, body: body, headers: headers, camel_case_keys: false)
29
+ body = JSON.parse(resp.body)
30
+ return ::Transbank::TransaccionCompleta::TransactionCreateResponse.new(body) if resp.kind_of? Net::HTTPSuccess
31
+ raise Errors::TransactionCreateError.new(body['error_message'], resp.code)
32
+ end
33
+
34
+ def installments(token:, installments_number:, options:nil)
35
+ api_key = options&.api_key || default_integration_params[:api_key]
36
+ commerce_code = options&.commerce_code || default_integration_params[:commerce_code]
37
+ integration_type = options&.integration_type || default_integration_params[:integration_type]
38
+ base_url = integration_type.nil? ? TransaccionCompleta::Base::integration_type[:TEST] : TransaccionCompleta::Base.integration_type_url(integration_type)
39
+
40
+ url = base_url + TRANSACTION_INSTALLMENTS_ENDPOINT.gsub(':token', token)
41
+ headers = webpay_headers(commerce_code: commerce_code, api_key: api_key)
42
+
43
+ body = {installments_number: installments_number}
44
+
45
+ resp = http_post(uri_string: url, body: body, headers: headers, camel_case_keys: false)
46
+ body = JSON.parse(resp.body)
47
+ return ::Transbank::TransaccionCompleta::TransactionInstallmentsResponse.new(body) if resp.kind_of? Net::HTTPSuccess
48
+ raise Errors::TransactionInstallmentsError.new(body['error_message'], resp.code)
49
+ end
50
+
51
+ def commit(token:, id_query_installments:, deferred_period_index:,
52
+ grace_period:, options:nil)
53
+ api_key = options&.api_key || default_integration_params[:api_key]
54
+ commerce_code = options&.commerce_code || default_integration_params[:commerce_code]
55
+ integration_type = options&.integration_type || default_integration_params[:integration_type]
56
+ base_url = integration_type.nil? ? TransaccionCompleta::Base::integration_type[:TEST] : TransaccionCompleta::Base.integration_type_url(integration_type)
57
+
58
+ url = base_url + COMMIT_TRANSACTION_ENDPOINT.gsub(':token', token)
59
+ headers = webpay_headers(commerce_code: commerce_code, api_key: api_key)
60
+ body = {
61
+ id_query_installments: id_query_installments,
62
+ deferred_period_index: deferred_period_index,
63
+ grace_period: grace_period
64
+ }
65
+
66
+ resp = http_put(uri_string: url, body: body, headers: headers)
67
+ body = JSON.parse(resp.body)
68
+ return ::Transbank::TransaccionCompleta::TransactionCommitResponse.new(body) if resp.kind_of? Net::HTTPSuccess
69
+ raise Errors::TransactionCommitError.new(body['error_message'], resp.code)
70
+ end
71
+
72
+ def status(token:, options: nil)
73
+ api_key = options&.api_key || default_integration_params[:api_key]
74
+ commerce_code = options&.commerce_code || default_integration_params[:commerce_code]
75
+ integration_type = options&.integration_type || default_integration_params[:integration_type]
76
+ base_url = integration_type.nil? ? TransaccionCompleta::Base::integration_type[:TEST] : TransaccionCompleta::Base.integration_type_url(integration_type)
77
+
78
+ url = base_url + TRANSACTION_STATUS_ENDPOINT.gsub(':token', token)
79
+ headers = webpay_headers(commerce_code: commerce_code, api_key: api_key)
80
+ resp = http_get(uri_string: url, headers: headers)
81
+ body = JSON.parse(resp.body)
82
+ return ::Transbank::TransaccionCompleta::TransactionStatusResponse.new(body) if resp.kind_of? Net::HTTPSuccess
83
+ raise Errors::TransactionStatusError.new(body['error_message'], resp.code)
84
+ end
85
+
86
+ def refund(token:, amount:, options:nil)
87
+ api_key = options&.api_key || default_integration_params[:api_key]
88
+ commerce_code = options&.commerce_code || default_integration_params[:commerce_code]
89
+ integration_type = options&.integration_type || default_integration_params[:integration_type]
90
+ base_url = integration_type.nil? ? TransaccionCompleta::Base::integration_type[:TEST] : TransaccionCompleta::Base.integration_type_url(integration_type)
91
+
92
+ body = {
93
+ amount: amount
94
+ }
95
+
96
+ url = base_url + REFUND_TRANSACTION_ENDPOINT.gsub(':token', token)
97
+ headers = webpay_headers(commerce_code: commerce_code, api_key: api_key)
98
+ resp = http_post(uri_string: url, body: body, headers: headers, camel_case_keys: false)
99
+ body = JSON.parse(resp.body)
100
+ return ::Transbank::TransaccionCompleta::TransactionRefundResponse.new(body) if resp.kind_of? Net::HTTPSuccess
101
+ raise Errors::TransactionRefundError.new(body['error_message'], resp.code)
102
+ end
103
+
104
+ def default_integration_params
105
+ {
106
+ api_key: TransaccionCompleta::Base.api_key,
107
+ commerce_code: TransaccionCompleta::Base.commerce_code,
108
+ integration_type: TransaccionCompleta::Base::integration_type,
109
+ base_url: TransaccionCompleta::Base::current_integration_type_url
110
+ }
111
+ end
112
+ end
113
+ end
114
+ end
115
+ end
116
+
117
+
@@ -0,0 +1,6 @@
1
+ module Transbank
2
+ module Errors
3
+ class TransbankError < StandardError
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,75 @@
1
+ module Transbank
2
+ module Utils
3
+ module JSONUtils
4
+ def self.included(mod)
5
+ # Implement #to_h if the class that includes this module doesn't have it
6
+ # implemented. Used in several model classes to make them easier to
7
+ # transform to hashes so they can be transformed to JSON afterwards
8
+ unless mod.respond_to? :to_h
9
+ mod.send(:define_method, :to_h) do
10
+ JSON.parse(self.jsonify)
11
+ end
12
+ end
13
+ end
14
+ # Get all instance variables of an instance of a class,
15
+ # then for all of these variables,
16
+ # if the instance of the class' respond_to? returns true,
17
+ # #send the variable name (so, you'll get the value of the instance variable's
18
+ # getter), then save that to a Hash where [key] is the instance variable's name
19
+ # and [value] is its value
20
+ #
21
+ # Finally, generate a JSON string from this hash
22
+ # @return [String] a JSON string created from the Hash resulting from the
23
+ # above operation
24
+ def jsonify
25
+ instance_vars = instance_variables.map! { |var| var.to_s.gsub!(/^@/, '') }
26
+ instance_as_hash =
27
+ instance_vars.reduce({}) do |resulting_hash, instance_variable|
28
+ if respond_to? instance_variable
29
+ value = send(instance_variable)
30
+ # Safe navigation operator is Ruby 2.3+
31
+ value = value.to_h if value && value.respond_to?(:to_h) unless value.is_a? Array
32
+ value = value.to_a if value && value.respond_to?(:to_a) unless value.is_a? Hash
33
+ if value.is_a? Array
34
+ value = value.map {|x| x.respond_to?(:jsonify) ? JSON.parse(x.jsonify) : x }
35
+ end
36
+
37
+ value = value.jsonify if value.respond_to? :jsonify
38
+ resulting_hash[instance_variable] = value
39
+ end
40
+ resulting_hash
41
+ end
42
+ # Some values can't be null and must be removed if they are
43
+ instance_as_hash.reject! do |key, value|
44
+ %w[commerce_logo_url width_height].include?(key) && value.nil?
45
+ end
46
+ JSON.generate instance_as_hash
47
+ end
48
+
49
+ # Receive a Hash and return a new hash same as the one we received,
50
+ # but all keys that were strings or camelCase'd are snake_case'd and
51
+ # turned into symbols.
52
+ # Example: {'camelCaseKey': "somevalue"}
53
+ # Would return: {camel_case_key: "somevalue"}
54
+ def transform_hash_keys(hash)
55
+ hash.reduce({}) do |new_hsh, (key, val)|
56
+ new_key = underscore(key).to_sym
57
+ new_hsh[new_key] = val
58
+ new_hsh
59
+ end
60
+ end
61
+
62
+ # FROM https://stackoverflow.com/a/1509957
63
+ # Transforms camelCaseWords to snake_case_words
64
+ def underscore(camel_cased_word)
65
+ camel_cased_word.to_s.gsub(/::/, '/')
66
+ .gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2')
67
+ .gsub(/([a-z\d])([A-Z])/,'\1_\2')
68
+ .tr("-", "_")
69
+ .downcase
70
+ end
71
+ end
72
+ end
73
+ end
74
+
75
+
@@ -0,0 +1,82 @@
1
+ module Transbank
2
+ module Utils
3
+ module NetHelper
4
+ def http_get(uri_string:, headers:nil)
5
+ uri = URI.parse(uri_string)
6
+ http = Net::HTTP.new(uri.host, uri.port)
7
+ http.use_ssl = uri.scheme == 'https'
8
+ request_headers = {'Content-Type' => 'application/json'}.merge(headers || {})
9
+ request = Net::HTTP::Get.new(uri.path, request_headers)
10
+ http.request(request)
11
+ end
12
+ # POST a request to Transbank's servers, and return the parsed response
13
+ # @param uri_string [String] an URI to post to
14
+ # @param body [Hash] the body of your POST request
15
+ # @return [Hash] the JSON.parse'd response body
16
+ def http_post(uri_string:, body: nil, headers: nil, camel_case_keys: true)
17
+ uri = URI.parse(uri_string)
18
+ http = Net::HTTP.new(uri.host, uri.port)
19
+ http.use_ssl = uri.scheme == 'https'
20
+
21
+ request_headers = {'Content-Type' => 'application/json'}.merge(headers || {})
22
+ request = Net::HTTP::Post.new(uri.path, request_headers)
23
+ sendable_body = camel_case_keys ? keys_to_camel_case(body) : body
24
+ request.body = sendable_body.to_json
25
+ http.request(request)
26
+ end
27
+
28
+ def http_put(uri_string:, body: nil, headers: nil)
29
+ uri = URI.parse(uri_string)
30
+ http = Net::HTTP.new(uri.host, uri.port)
31
+ http.use_ssl = uri.scheme == 'https'
32
+
33
+ request_headers = {'Content-Type' => 'application/json'}.merge(headers || {})
34
+ request = Net::HTTP::Put.new(uri.path, request_headers)
35
+ request.body = JSON.generate(body)
36
+ http.request(request)
37
+ end
38
+
39
+ def http_delete(uri_string:, body: nil, headers: nil)
40
+ uri = URI.parse(uri_string)
41
+ http = Net::HTTP.new(uri.host, uri.port)
42
+ http.use_ssl = uri.scheme == 'https'
43
+
44
+ request_headers = {'Content-Type' => 'application/json'}.merge(headers || {})
45
+ request = Net::HTTP::Delete.new(uri.path, request_headers)
46
+ request.body = JSON.generate(body)
47
+ http.request(request)
48
+ end
49
+
50
+ # Required for sending data to Transbank on Onepay.
51
+ def keys_to_camel_case(hash)
52
+ hash.reduce({}) do |new_hash, (key, val)|
53
+ if val.is_a? Array
54
+ val = val.map {|value| value.is_a?(Hash) ? keys_to_camel_case(value) : value }
55
+ end
56
+ new_key = snake_to_camel_case(key.to_s)
57
+ new_hash[new_key] = val
58
+ new_hash
59
+ end
60
+ end
61
+
62
+ def snake_to_camel_case(str)
63
+ str.split('_').reduce { |string, current_word| string + current_word.capitalize }
64
+ end
65
+
66
+ def webpay_headers(commerce_code:, api_key:)
67
+ {
68
+ "Tbk-Api-Key-Id" => commerce_code,
69
+ "Tbk-Api-Key-Secret" => api_key
70
+ }
71
+ end
72
+
73
+ def patpass_comercio_headers(commerce_code:, api_key:)
74
+ {
75
+ "commercecode" => commerce_code,
76
+ "Authorization" => api_key
77
+ }
78
+ end
79
+
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,9 @@
1
+ require 'transbank/sdk/utils/json_utils'
2
+ require 'transbank/sdk/utils/net_helper'
3
+ require 'transbank/sdk/utils/signature_utils'
4
+ require 'transbank/sdk/utils/request_builder'
5
+
6
+ module Transbank
7
+ module Onepay
8
+ end
9
+ end
@@ -1,5 +1,5 @@
1
1
  module Transbank
2
2
  module Sdk
3
- VERSION = "1.1.0"
3
+ VERSION = "1.4.1"
4
4
  end
5
5
  end
@@ -0,0 +1,8 @@
1
+ module Transbank
2
+ module Webpay
3
+ module Errors
4
+ class IntegrationTypeError < ::Transbank::Errors::TransbankError
5
+ end
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,14 @@
1
+ module Transbank
2
+ module Webpay
3
+ module Errors
4
+ class WebpayError < ::Transbank::Errors::TransbankError
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,74 @@
1
+ module Transbank
2
+ module Webpay
3
+ module WebpayPlus
4
+ class Base
5
+
6
+ DEFAULT_API_KEY = '579B532A7440BB0C9079DED94D31EA1615BACEB56610332264630D42D0A36B1C'.freeze
7
+ DEFAULT_COMMERCE_CODE = '597055555532'.freeze
8
+ DEFAULT_DEFERRED_COMMERCE_CODE = '597055555540'.freeze
9
+
10
+ DEFAULT_MALL_COMMERCE_CODE = '597055555535'.freeze
11
+ DEFAULT_MALL_CHILD_COMMERCE_CODES = ['597055555536'.freeze,'597055555537'.freeze].freeze;
12
+ DEFAULT_MALL_DEFERRED_COMMERCE_CODE = '597055555544 '.freeze
13
+ DEFAULT_MALL_DEFERRED_CHILD_COMMERCE_CODES = ['597055555545'.freeze,
14
+ '597055555546'.freeze].freeze
15
+
16
+
17
+ @api_key = DEFAULT_API_KEY
18
+ @commerce_code = DEFAULT_COMMERCE_CODE
19
+ @integration_type = :TEST
20
+ @integration_types = {
21
+ LIVE: "https://webpay3g.transbank.cl/",
22
+ TEST: "https://webpay3gint.transbank.cl/"
23
+ }
24
+ class << self
25
+ attr_reader :integration_types
26
+ attr_accessor :api_key, :integration_type, :commerce_code
27
+
28
+
29
+ def integration_type_url(integration_type)
30
+ type = integration_type.upcase.to_sym
31
+ return @integration_types[type] unless @integration_types[type].nil?
32
+ valid_values = @integration_types.keys.join(', ')
33
+ raise Transbank::Webpay::Errors::IntegrationTypeError, "Invalid integration type, valid values are #{valid_values}"
34
+ end
35
+
36
+ def current_integration_type_url
37
+ @integration_types[@integration_type]
38
+ end
39
+
40
+ def integration_type=(integration_type)
41
+ type = integration_type.upcase.to_sym
42
+ return @integration_type = type unless @integration_types[type].nil?
43
+ valid_values = @integration_types.keys.join(', ')
44
+ raise Transbank::Webpay::Errors::IntegrationTypeError, "Invalid integration type, valid values are #{valid_values}"
45
+ end
46
+
47
+ def configure_for_testing
48
+ @api_key = DEFAULT_API_KEY
49
+ @commerce_code = DEFAULT_COMMERCE_CODE
50
+ self.integration_type = :TEST
51
+ end
52
+
53
+ def configure_mall_for_testing
54
+ @api_key = DEFAULT_API_KEY
55
+ @commerce_code = DEFAULT_MALL_COMMERCE_CODE
56
+ self.integration_type = :TEST
57
+ end
58
+
59
+ def configure_deferred_for_testing
60
+ @api_key = DEFAULT_API_KEY
61
+ @commerce_code = DEFAULT_DEFERRED_COMMERCE_CODE
62
+ self.integration_type = :TEST
63
+ end
64
+
65
+ def configure_mall_deferred_for_testing
66
+ @api_key = DEFAULT_API_KEY
67
+ @commerce_code = DEFAULT_MALL_DEFERRED_COMMERCE_CODE
68
+ self.integration_type = :TEST
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end