class Superpay::Transacao

Constants

IDIOMAS

CONSTANTES

STATUS

Public Class Methods

cancelar(dados) click to toggle source
# File lib/superpay/transacao.rb, line 86
def self.cancelar(dados)
  raise 'Not implemented yet'
end
consultar(numero_transacao) click to toggle source

Consulta uma transação de acordo com seu número (código).

# File lib/superpay/transacao.rb, line 68
def self.consultar(numero_transacao)
  dados = {
    codigo_estabelecimento: ::Superpay.config.estabelecimento,
    numero_transacao: numero_transacao
  }
  retorno = Superpay.conector.call(:consulta_transacao_especifica, {consulta_transacao_w_s: dados})
  resposta = retorno.to_array(:consulta_transacao_especifica_response, :return).first
  # Verifica se a resposta veio correta ou se deu problema
  return {erros: retorno} if !resposta
  # Se o estabelecimento retornado for diferente da configuração, deu coisa errada
  if resposta[:codigo_estabelecimento] != ::Superpay.config.estabelecimento.to_s
    raise "Código do estabelecimento não é o da configuração: #{resposta[:codigo_estabelecimento]}"
  end

  # Sobrecarga com dados tratados e retorna
  return Transacao.tratar_retorno(resposta)
end
pagar(dados) click to toggle source

Faz o pagamento da transação, a partir dos dados do gateway. Se a transação já foi feita, seu status de retorno será 31: ja_efetuada. Caso deseje saber qual o real status da transação, faça uma consulta.

# File lib/superpay/transacao.rb, line 31
def self.pagar(dados)
  # Valida os dados passados
  raise 'Campo obrigatório: numero_transacao' if dados[:numero_transacao].blank?
  raise 'Campo obrigatório: codigo_forma_pagamento' if dados[:codigo_forma_pagamento].blank?
  raise 'Campo obrigatório: valor' if dados[:valor].blank?
  raise 'Campo obrigatório: nome_titular_cartao_credito' if dados[:nome_titular_cartao_credito].blank?
  raise 'Campo obrigatório: numero_cartao_credito' if dados[:numero_cartao_credito].blank?
  raise 'Campo obrigatório: codigo_seguranca' if dados[:codigo_seguranca].blank?
  raise 'Campo obrigatório: data_validade_cartao' if dados[:data_validade_cartao].blank?
  raise 'Campo obrigatório: dados_usuario_transacao' if dados[:dados_usuario_transacao].blank?
  raise 'Campo obrigatório: itens_do_pedido' if dados[:itens_do_pedido].blank?

  # Sobrecarga com dados default
  dados[:codigo_estabelecimento] = ::Superpay.config.estabelecimento

  # Tratamento dos valores de envio
  dados = Transacao.tratar_envio(dados)

  # Verifica se a resposta veio correta ou se deu problema
  begin
    retorno = Superpay.conector.call(:pagamento_transacao_completa, {transacao: dados})
    resposta = retorno.to_array(:pagamento_transacao_completa_response, :return).first
  rescue Savon::SOAPFault => error
    return {error: error.to_hash[:fault][:faultstring]}
  end
  
  # Se o estabelecimento retornado for diferente da configuração, deu coisa errada
  if resposta[:codigo_estabelecimento] != ::Superpay.config.estabelecimento.to_s
    raise "Código do estabelecimento não é o da configuração: #{resposta[:codigo_estabelecimento]}"
  end

  # Sobrecarga com dados tratados e retorna
  return Transacao.tratar_retorno(resposta)
end
pagar_com_varios_cartoes(dados) click to toggle source
# File lib/superpay/transacao.rb, line 90
def self.pagar_com_varios_cartoes(dados)
  raise 'Not implemented yet'
end
tratar_envio(transacao) click to toggle source

Trata os dados de envio da transação. Transforma valores e datas

# File lib/superpay/transacao.rb, line 108
def self.tratar_envio(transacao)
  # valores da transação
  transacao[:valor] = Helper.to_superpay_number(transacao[:valor]) unless transacao[:valor].blank?
  transacao[:valor_desconto] = Helper.to_superpay_number(transacao[:valor_desconto]) unless transacao[:valor_desconto].blank?
  transacao[:taxa_embarque] = Helper.to_superpay_number(transacao[:taxa_embarque]) unless transacao[:taxa_embarque].blank?

  # valor dos itens do pedido
  if transacao[:itens_do_pedido].is_a?(Hash)
    transacao[:itens_do_pedido] = [transacao[:itens_do_pedido]]
  end
  transacao[:itens_do_pedido].each do |item|
    item[:valor_unitario_produto] = Helper.to_superpay_number(item[:valor_unitario_produto]) unless item[:valor_unitario_produto].blank?
  end

  # dados do usuário
  transacao[:dados_usuario_transacao][:cep_endereco_comprador] = Helper.cep_to_superpay(transacao[:dados_usuario_transacao][:cep_endereco_comprador]) unless transacao[:dados_usuario_transacao][:cep_endereco_comprador].blank?
  transacao[:dados_usuario_transacao][:cep_endereco_entrega] = Helper.cep_to_superpay(transacao[:dados_usuario_transacao][:cep_endereco_entrega]) unless transacao[:dados_usuario_transacao][:cep_endereco_entrega].blank?
  transacao[:dados_usuario_transacao][:data_nascimento_comprador] = transacao[:dados_usuario_transacao][:data_nascimento_comprador].to_date.strftime('%d/%m/%Y') unless transacao[:dados_usuario_transacao][:data_nascimento_comprador].blank?

  return transacao
end
tratar_retorno(transacao) click to toggle source

Trata o retorno das transações: converte valores e datas para objetos.

# File lib/superpay/transacao.rb, line 96
def self.tratar_retorno(transacao)
  transacao[:status] = STATUS[transacao[:status_transacao].to_i] unless transacao[:status_transacao].blank?
  transacao[:valor] = Helper.superpay_number_to_decimal(transacao[:valor]) unless transacao[:valor].blank?
  transacao[:valor_desconto] = Helper.superpay_number_to_decimal(transacao[:valor_desconto]) unless transacao[:valor_desconto].blank?
  transacao[:taxa_embarque] = Helper.superpay_number_to_decimal(transacao[:taxa_embarque]) unless transacao[:taxa_embarque].blank?
  transacao[:data_aprovacao_operadora] = transacao[:data_aprovacao_operadora].to_date unless transacao[:data_aprovacao_operadora].blank?
  return transacao
end