Class: Superpay::Transacao
- Inherits:
-
Object
- Object
- Superpay::Transacao
- Defined in:
- lib/superpay/transacao.rb
Constant Summary collapse
- IDIOMAS =
CONSTANTES
{portugues: 1, ingles: 2, espanhol: 3}
- STATUS =
{ 1 => :autorizado_confirmado, 2 => :autorizado, 3 => :nao_autorizado, 5 => :em_andamento, 6 => :boleto_em_compensacao, 8 => :aguardando_pagamento, 9 => :falha_na_operadora, 13 => :cancelada, 14 => :estornada, 15 => :em_analise_risco, 17 => :recusado_analise_risco, 18 => :falha_envio_analise_risco, 21 => :boleto_pago_menor, 22 => :boleto_pago_maior, 30 => :em_curso, 31 => :ja_efetuada }
Class Method Summary collapse
- .cancelar(dados) ⇒ Object
-
.consultar(numero_transacao) ⇒ Object
Consulta uma transação de acordo com seu número (código).
-
.pagar(dados) ⇒ Object
Faz o pagamento da transação, a partir dos dados do gateway.
- .pagar_com_varios_cartoes(dados) ⇒ Object
-
.tratar_envio(transacao) ⇒ Object
Trata os dados de envio da transação.
-
.tratar_retorno(transacao) ⇒ Object
Trata o retorno das transações: converte valores e datas para objetos.
Class Method Details
.cancelar(dados) ⇒ Object
87 88 89 |
# File 'lib/superpay/transacao.rb', line 87 def self.cancelar(dados) raise 'Not implemented yet' end |
.consultar(numero_transacao) ⇒ Object
Consulta uma transação de acordo com seu número (código).
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/superpay/transacao.rb', line 69 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) ⇒ Object
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.
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/superpay/transacao.rb', line 32 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) ⇒ Object
91 92 93 |
# File 'lib/superpay/transacao.rb', line 91 def self.pagar_com_varios_cartoes(dados) raise 'Not implemented yet' end |
.tratar_envio(transacao) ⇒ Object
Trata os dados de envio da transação. Transforma valores e datas
109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
# File 'lib/superpay/transacao.rb', line 109 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) ⇒ Object
Trata o retorno das transações: converte valores e datas para objetos.
97 98 99 100 101 102 103 104 |
# File 'lib/superpay/transacao.rb', line 97 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 |