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?
- 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.
- O invoic€xpress gera um token único para a referência
token = Digest::SHA1.hexdigest([Time.now, rand].join)
- Constroi o url para onde pretende ser notificado do pagamento, incluindo este token único
url = "https://www.invoicexpress.net/references/payed/#{@mbreference.token}" - 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") - Guarda a referência multibanco gerada na BD
@mbreference.reference = soapResponse.referencia
- O cliente desloca-se ao MB e efectua o pagamento
- O sistema compra-fácil notifica o invoic€xpress usando URL que indicámos no pedido (passo 3)
- 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.
