Class: Braspag::CreditCard

Inherits:
PaymentMethod show all
Defined in:
lib/rbraspag/credit_card.rb

Constant Summary collapse

PAYMENT_METHODS =
{
  # BRASIL
  :amex_2p                  => 18,  # American Express 2 Party
  :cielo_noauth_visa        => 71,  # Cielo webservice captura automática sem autenticação - Visa
  :cielo_preauth_visa       => 73,  # Cielo webservice preauth sem autenticação - Visa
  :cielo_noauth_mastercard  => 120, # Cielo webservice captura automática sem autenticação - Mastercard
  :cielo_preauth_mastercard => 122, # Cielo webservice preauth sem autenticação - Mastercard
  :redecard                 => 20,  # Redecard Mastercard/Diners/Visa
  :redecard_preauth         => 42,  # Redecard preauth Mastercard/Diners/Visa
  :cielo_sitef              => 57,  # Cielo SITEF
  :hipercard_sitef          => 62,  # Hipercard SITEF
  :hipercard_moip           => 90,  # Hipercard MOIP
  :oi_paggo                 => 55,  # OiPaggo
  :amex_sitef               => 58,  # Amex SITEF
  :aura_dtef                => 37,  # Aura DTEF
  :redecard_sitef           => 44,  # Redecard SITEF - Mastercard/Diners
  # MÉXICO
  :mex_amex_2p            => 45, # American Express 2 Party
  :mex_banorte_visa       => 50, # Banorte Visa
  :mex_banorte_diners     => 52, # Banorte Diners
  :mex_banorte_mastercard => 53, # Banorte Mastercard
  # COLÔMBIA
  :col_visa   => 63, # Visa
  :col_amex   => 65, # Amex
  :col_diners => 66, # Diners
  # INTERNACIONAL
  :paypal_express => 35 # PayPal Express Checkout
}
MAPPING =
{
  :merchant_id => "merchantId",
  :order_id => "orderId",
  :customer_name => "customerName",
  :amount => "amount",
  :payment_method => "paymentMethod",
  :holder => "holder",
  :card_number => "cardNumber",
  :expiration => "expiration",
  :security_code => "securityCode",
  :number_payments => "numberPayments",
  :type => "typePayment",
}

Class Method Summary collapse

Methods inherited from PaymentMethod

payment_method_from_id

Class Method Details

.authorize(params = {}) ⇒ Object

Raises:



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/rbraspag/credit_card.rb', line 55

def self.authorize(params = {})
  connection = Braspag::Connection.instance
  params[:merchant_id] = connection.merchant_id

  [:order_id, :customer_name, :amount, :payment_method, :holder,
    :card_number, :expiration, :security_code, :number_payments, :type].each do |param|
    raise IncompleteParams unless params.include?(param)
  end

  raise InvalidOrderId unless (1..20).include?(params[:order_id].to_s.size)
  raise InvalidCustomerName unless (1..100).include?(params[:customer_name].to_s.size)
  raise InvalidAmount unless (1..10).include?(params[:amount].to_s.size)
  raise InvalidHolder unless (1..100).include?(params[:holder].to_s.size)
  raise InvalidExpirationDate unless (1..7).include?(params[:expiration].to_s.size)
  raise InvalidSecurityCode unless (1..4).include?(params[:security_code].to_s.size)
  raise InvalidNumberPayments unless (1..2).include?(params[:number_payments].to_s.size)
  raise InvalidType unless (1..2).include?(params[:type].to_s.size)

  params[:payment_method] = PAYMENT_METHODS[params[:payment_method]] if params[:payment_method].is_a?(Symbol)

  data =  MAPPING.inject({}) do |memo, k|
    if k[0] == :amount
      memo[k[1]] = Utils.convert_decimal_to_string(params[:amount])
    else
      memo[k[1]] = params[k[0]] || "";
    end
    memo
  end

  request = ::HTTPI::Request.new uri_authorize
  request.body = data
  response = ::HTTPI.post request
  Utils::convert_to_map(response.body, {
      :amount => nil,
      :number => "authorisationNumber",
      :message => 'message',
      :return_code => 'returnCode',
      :status => 'status',
      :transaction_id => "transactionId"
    })
end

.capture(order_id) ⇒ Object

Raises:



97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# File 'lib/rbraspag/credit_card.rb', line 97

def self.capture(order_id)
  connection = Braspag::Connection.instance
  merchant_id = connection.merchant_id

  raise InvalidOrderId unless (1..20).include?(order_id.to_s.size)

  data = {MAPPING[:order_id] => order_id, "merchantId" => merchant_id }
  request = ::HTTPI::Request.new uri_capture

  request.body = data
  response = ::HTTPI.post(request)

  Utils::convert_to_map(response.body, {
      :amount => nil,
      :number => "authorisationNumber",
      :message => 'message',
      :return_code => 'returnCode',
      :status => 'status',
      :transaction_id => "transactionId"
    })
end

.info(order_id) ⇒ Object

Raises:



120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
# File 'lib/rbraspag/credit_card.rb', line 120

def self.info(order_id)
  connection = Braspag::Connection.instance

  raise InvalidOrderId unless order_id.is_a?(String) || order_id.is_a?(Fixnum)
  raise InvalidOrderId unless (1..50).include?(order_id.to_s.size)

  request = ::HTTPI::Request.new("#{connection.braspag_url}/pagador/webservice/pedido.asmx/GetDadosCartao")
  request.body = {:loja => connection.merchant_id, :numeroPedido => order_id.to_s}

  response = ::HTTPI.post(request)

  response = Utils::convert_to_map(response.body, {
      :checking_number => "NumeroComprovante",
      :certified => "Autenticada",
      :autorization_number => "NumeroAutorizacao",
      :card_number => "NumeroCartao",
      :transaction_number => "NumeroTransacao"
    })

  raise UnknownError if response[:checking_number].nil?
  response

end

.uri_authorizeObject



47
48
49
# File 'lib/rbraspag/credit_card.rb', line 47

def self.uri_authorize
  "#{Braspag::Connection.instance.braspag_url}/webservices/pagador/Pagador.asmx/Authorize"
end

.uri_captureObject



51
52
53
# File 'lib/rbraspag/credit_card.rb', line 51

def self.uri_capture
  "#{Braspag::Connection.instance.braspag_url}/webservices/pagador/Pagador.asmx/Capture"
end