Rupeal
RSSLinkedInTwitterFacebook

Posts Tagged ‘rails’

Pagar online – Vencer o medo em pt

Ao oferecer um serviço exclusivamente online em Portugal (www.invoicexpress.com) enfrentamos uma série de barreiras associadas ao medo da mudança / adopção de novas tecnologias.

O maior desses medos é o de fornecer dados bancários para efectuar o pagamento. Mesmo com o MBNET e o PAYPAL ainda há muita gente que prefere os meios mais tradicionais.

A forma que encontrá-mos para contornar este problema foi oferecer um meio de pagamento exclusivo para Portugal, suportando os nossos bem conhecidos MultiBancos.
Após analisar algumas alternativas escolhemos como parceiro para este serviço a Hi-Media e o seu Serviço Compra Fácil.

Este serviço desponibiliza um webservice através do qual podemos pedir a geração de referências multibanco notificando-nos quando estas são pagas.

De uma perspectiva mais técnica como decorre o processo e como o integramos na nossa aplicação Rails?

  1. O utilizador, cliente do invoic€xpress escolhe o plano desejado, selecciona a opção de pagamento com multibanco e selecciona a opção gerar referência.
  2. O invoic€xpress gera um token único para a referência
    token = Digest::SHA1.hexdigest([Time.now, rand].join)
  3. Constroi o url para onde pretende ser notificado do pagamento, incluindo este token único
    url = "https://www.invoicexpress.net/references/payed/#{@mbreference.token}"
  4. Coloca esse URL e os restantes parametros necessários no pedido para o webservice compra fácil e efectua o pedido.
    factory = SOAP::WSDLDriverFactory.new("http://hm.comprafacil.pt/SIBSClick/webservice/clicksmsV4.asmx?WSDL")
    soap = factory.create_rpc_driver
    soapResponse = soap.SaveCompraToBDValor1(:origem=>url, :IDCliente=>"cliente_teste",
     :password=>"teste_password", :valor=> value , :informacao=>"teste", :IDUserBackoffice=>"-1")
  5. Guarda a referência multibanco gerada na BD
    @mbreference.reference = soapResponse.referencia
  6. O cliente desloca-se ao MB e efectua o pagamento
  7. O sistema compra-fácil notifica o invoic€xpress usando URL que indicámos no pedido (passo 3)
  8. O invoic€xpress recebe a notificação, e procura a referência através do token único, activando assim a subscrição paga pelo cliente.
    mbreference = Mbreference.find_by_token(params[:reference_token])
    mbreference.state = "payed"
    mbreference.save

Para os mais distraidos foram menos de 20 linhas de código…

O código é apresentada numa versão simplificada apenas para efeitos demonstrativos.

Não poderá ser descurado o facto de estarmos a trabalhar com dinheiro e com dados de clientes, é sempre necessário garantir o máximo de segurança possível usando HTTPS.

Apesar de ser uma solução especifica para Portugal, é de simples implementação e é uma forte ajuda para quebrar uma barreira à adopção deste tipo de aplicações web.

Rui Alves on July 14th, 2009

Software Development

1
 

Ruby on Rails Scaling

Just came across with this article about RoR scaling issues. 

Some quotes:

“When it comes to handling massive HTTP traffic, you can scale a Rails application horizontally just like any other by replicating your front-end web servers behind a load balancer. There’s nothing about Rails that makes this more difficult than with any other technology.”

So if you don’t know how to scale with Java, C# or whatever you’re using… it’s useless to point your finger to RoR.

“There’s a lot of different things that can slow down a web application. Rails makes it easy to get your application running without worrying about any of the performance issues, and that’s a good thing. If you ignore everything about performance tuning, you’ll still have a working application, and from there you can tune. There’s little point in tuning for performance before you have something that is successful for a small group of people. And if you focus on building an optimally scalable site and end up late to market as a result, you’ll have achieved nothing.”

Bottom line: Build traffic first, worry about performance later. Comments?

Rui Alves on May 4th, 2008

Software Development

0