require 'rubygems' require_gem 'builder' require 'net/https' require "rexml/document" #endereço do webservice f2b endpoint = 'https://www.f2b.com.br/WSBilling' #instanciando o construtor XML xml = Builder::XmlMarkup.new #instruindo para que o XML seja versão 1 e codificação de caracteres ISO-8859-1 xml.instruct! :xml, :version => "1.0", :encoding => "ISO-8859-1" #abrindo tag soap:Envelope e passando o parâmetro xmlns:soap xml.soap :Envelope, "xmlns:soap" => "http://schemas.xmlsoap.org/soap/envelope/" do #abrindo a tag soap:Body xml.soap :Body do #abrindo tag m:F2bCobranca e passando o parâmetro xmlns:m xml.m :F2bCobranca, "xmlns:m" => "http://www.f2b.com.br/soap/wsbilling.xsd" do #cria tag com a data de envio e número de controle para administração do sistema por parte do cliente xml.mensagem(:data => "2007-01-08", :numero => "201636") #cria tag com dados do sacador #altere a conta e a senha para a criadas por você no registo da F2b xml.sacador("José da Silva", :conta => "8563255236581511", :senha => "56258522") #abre tag com dados de cobrança xml.cobranca :valor => "10.00", :taxa => "2.50", :tipo_taxa => "0", :tipo_cobranca => "" do xml.demonstrativo("Cobrança F2b") xml.demonstrativo("Pague em qualquer banco") xml.desconto(:valor => "2.00", :tipo_desconto => "0", :antecedencia => "5") xml.multa(:valor => "1.00", :tipo_multa => "0", :valor_dia => "0.10", :tipo_multa_dia => "0", :atraso => "20") #fecha tag de cobranca end #cria tag com dados de agendamento xml.agendamento("Imediato e Agendado", :vencimento => "2007-12-01", :ultimo_dia => "n", :antecedencia => "10", :periodicidade => "1", :periodos => "12", :sem_vencimento => "S") #abre tag com dados do sacado xml.sacado :grupo => "web service", :codigo => "000001", :envio => "e" do xml.nome("José Oliveira") #o e-mail utilizado é teste@f2b.com.br, para que não seja registrada a cobrança xml.email("teste@f2b.com.br") xml.endereco(:logradouro => "Rua das Pedras", :numero => "455", :complemento => "sala 23", :bairro => "Itaim Bibi", :cidade => "São Paulo", :estado => "SP", :cep => "04536000") xml.telefone(:ddd => "11", :numero => "35551234") xml.telefone_com(:ddd_com => "22", :numero_com => "22222222") xml.telefone_cel(:ddd_cel => "33", :numero_cel => "33333333") xml.cpf("12345678909") #fecha tag sacado end #fecha tag m:F2bCobranca end #fecha tag Body end #fecha tag soap:Envelope end #cria conexão http utilizando SSL uri = URI.parse(endpoint) http = Net::HTTP.new(uri.host,uri.port) http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE #cria o corpo da mensagem a ser enviado com resultado do XML criado req_body = xml.target! #para visualizar o debug do processo, descomente a linha abaixo #http.set_debug_output $stderr #cria o cabeçalho da mensagem a ser enviada req_headers= {'Content-Type' => 'text/xml; charset=iso-8859-1'} #envia a mensagem e recebe o resultado response = http.request_post(uri.path, req_body, req_headers) #processa o resultado(XML) para obtermos a tag log xml = REXML::Document.new(response.body) xml.elements.each do |b| b.elements.each do |t| t.elements.each do |h| h.elements.each('log') do |s| puts s.text end end end end