class Transbank::Patpass::PatpassByWebpay::Transaction

Constants

COMMIT_TRANSACTION_ENDPOINT
CREATE_TRANSACTION_ENDPOINT
TRANSACTION_STATUS_ENDPOINT

Public Class Methods

commit(token:, options: nil) click to toggle source
# File lib/transbank/sdk/patpass/patpass_by_webpay/transaction.rb, line 37
def commit(token:, options: nil)

  api_key = options&.api_key || default_integration_params[:api_key]
  commerce_code = options&.commerce_code || default_integration_params[:commerce_code]
  base_url = PatpassByWebpay::Base.integration_types[options&.integration_type] || default_integration_params[:base_url]

  url = base_url + COMMIT_TRANSACTION_ENDPOINT + "/#{token}"
  headers = webpay_headers(commerce_code: commerce_code, api_key: api_key)

  resp = http_put(uri_string: url, body: nil, headers: headers)
  body = JSON.parse(resp.body)
  return ::Transbank::Patpass::PatpassByWebpay::TransactionCommitResponse.new(body) if resp.kind_of? Net::HTTPSuccess
  raise Errors::TransactionCommitError.new(body['error_message'], resp.code)
end
create(buy_order:, session_id:, amount:, return_url:, details: ,options: nil) click to toggle source
# File lib/transbank/sdk/patpass/patpass_by_webpay/transaction.rb, line 12
def create(buy_order:, session_id:, amount:, return_url:, details: ,options: nil)

  api_key = options&.api_key || default_integration_params[:api_key]
  commerce_code = options&.commerce_code || default_integration_params[:commerce_code]
  integration_type = options&.integration_type || default_integration_params[:integration_type]
  base_url = integration_type.nil? ? PatpassByWebpay::Base::integration_types[:TEST] : PatpassByWebpay::Base.integration_type_url(integration_type)

  wpm_detail = wpm_details(details)
  body = {
      buy_order: buy_order,
      session_id: session_id,
      amount: amount,
      return_url: return_url,
      wpm_detail: wpm_detail
  }

  url = base_url + CREATE_TRANSACTION_ENDPOINT
  headers = webpay_headers(commerce_code: commerce_code, api_key: api_key)
  resp = http_post(uri_string: url, body: body, headers: headers, camel_case_keys: false)
  body = JSON.parse(resp.body)

  return ::Transbank::Patpass::PatpassByWebpay::TransactionCreateResponse.new(body) if resp.kind_of? Net::HTTPSuccess
  raise Errors::TransactionCreateError.new(body['error_message'], resp.code)
end
default_integration_params() click to toggle source
# File lib/transbank/sdk/patpass/patpass_by_webpay/transaction.rb, line 65
def default_integration_params
  {
      api_key: PatpassByWebpay::Base.api_key,
      commerce_code: PatpassByWebpay::Base.commerce_code,
      base_url: PatpassByWebpay::Base::current_integration_type_url
  }
end
status(token:, options: nil) click to toggle source
# File lib/transbank/sdk/patpass/patpass_by_webpay/transaction.rb, line 52
def status(token:, options: nil)
  api_key = options&.api_key || default_integration_params[:api_key]
  commerce_code = options&.commerce_code || default_integration_params[:commerce_code]
  base_url = PatpassByWebpay::Base.integration_types[options&.integration_type] || default_integration_params[:base_url]

  url = base_url + "#{TRANSACTION_STATUS_ENDPOINT}/#{token}"
  headers = webpay_headers(commerce_code: commerce_code, api_key: api_key)
  resp = http_get(uri_string: url, headers: headers)
  body = JSON.parse(resp.body)
  return ::Transbank::Patpass::PatpassByWebpay::TransactionStatusResponse.new(body) if resp.kind_of? Net::HTTPSuccess
  raise Errors::TransactionStatusError.new(body['error_message'], resp.code)
end

Private Class Methods

wpm_detail_fields() click to toggle source
# File lib/transbank/sdk/patpass/patpass_by_webpay/transaction.rb, line 83
def wpm_detail_fields
  %i(service_id card_holder_id card_holder_name card_holder_last_name1
     card_holder_last_name2 card_holder_mail cellphone_number expiration_date
     commerce_mail uf_flag)
end
wpm_details(details) click to toggle source
# File lib/transbank/sdk/patpass/patpass_by_webpay/transaction.rb, line 74
def wpm_details(details)
  # Check against the wpm_detail_fields
  # If one is missing, KeyError will be raised
  wpm_detail_fields.reduce({}) do |acc, field|
    acc[field] = details.fetch(field) { details.fetch(field.to_s) }
    acc
  end
end