Integração: Entendendo a comunicação
Este guia o conduzirá através do processo de integração do WALK Server com um sistema de autorização hospedado na internet
Este guia o conduziu através do processo de integração do WALK Server com um sistema de autorização feito em Sinatra, hospedado na internet.
O próximo passo é entender como o WALK Server e o autorizador trocam informações.
Autorizador exemplo
1. WALK Server submete um post ao autorizador
O WALK Server recebe a transação do terminal POS, formata o pacote de dados e submete uma requisição post ao autorizador.
Note que o WALK Server delimita as informações do pacote de dados com vírgula
| Entenda o formato do pacote de dados |
2. Autorizador retorna a resposta para o WALK Server
O trecho de código abaixo (feito em Sinatra) é responsável por duas ações:
Processar o recebimento de dados do WALK Server
Retornar para o WALK Server o resultado da operação
post '*' do
inf = params[:buffer].split(',')
if inf[2] == "1"
return "<pagina_retorno>\"msg=Venda: R$ #{(inf[3].to_f)/100}\""
end
if inf[2] == "2"
return "<pagina_retorno>\"msg=Saldo: R$ 10.44\""
end
return "<pagina_retorno>\"msg=Opcao Invalida\""
end
Observe que na segunda linha, a variável inf recebe o conteúdo do parâmetro buffer, enviado pelo WALK Server.
O comando split é utilizado para que a variável inf se transforme em um Array, e dessa forma, os dados enviados pelo WALK Server (separados por vírgula) podem ser lidos separadamente.
3. WALK Server retorna a página para o terminal POS
Assim que o WALK Server recebe a resposta do autorizador, este envia a página formatada para o terminal POS.
Observe que no trecho de código POSXML abaixo, é definido uma página chamada pagina_retorno, e que esta utiliza uma variável chamada msg, que é exatamente o que o autorizador está retornando.
<pagina nome="pagina_retorno">
<display coluna="0" linha="0" mensagem="** PLATAFORMA WALK **" />
<display coluna="0" linha="2" mensagem="[msg]" />
<esperatecla />
</pagina>
</aplicativoposxml>
Autorizador em outras linguagens
O mesmo código do autorizador exemplo (feito em Sinatra) pode ser feito na linguagem de programação do seu interesse. Segue abaixo alguns exemplos em outras linguagens:
ASP (classic)
<%
If ISNull(Request.QueryString("buffer")) Then
Response.Write("Buffer não informado")
Response.End()
End If
inf = split(Request.QueryString("buffer"), ",")
If inf(2) = "1" Then
valor = FormatCurrency(inf(3) / 100)
Response.Write("<pagina_retorno>""msg=Venda: " & valor & """")
Response.End()
End If
If inf(2) = "2" Then
valor = FormatCurrency(10.44)
Response.Write("<pagina_retorno>""msg=Saldo: " & valor & """")
Response.End()
End If
Response.Write("<pagina_retorno>""msg=Opcao Invalida""")
%>
ASP.NET (C#)
<%@ Page Language="C#" ValidateRequest="false" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e){
if (Request.Params["buffer"] == null){
Response.Write("Buffer não informado");
Response.End();
}
string[] inf = Request.Params["buffer"].Split(',');
if (inf[2] == "1"){
double valor = Convert.ToDouble(inf[3]) / (double)100;
Response.Write(string.Format("<pagina_retorno> \"msg=Venda: {0:c}\"", valor));
Response.End();
}
if (inf[2] == "2"){
Response.Write(string.Format("<pagina_retorno> \"msg=Saldo: {0:c}\"", 10.44));
Response.End();
}
Response.Write("<pagina_retorno> \"msg=Opcao Invalida\"");
}
</script>
ASP.NET (VB)
<%@ Page Language="VB" ValidateRequest="false" %>
<script runat="server">
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
If Request.Params("buffer") Is Nothing Then
Response.Write("Buffer não informado")
Response.End()
End If
Dim inf() As String = Request.Params("buffer").Split(",")
If inf(2) = "1" Then
Dim valor As Double = Convert.ToDouble(inf(3)) / 100
Response.Write(String.Format("<pagina_retorno>""msg=Venda: {0:c}""", valor))
Response.End()
End If
If inf(2) = "2" Then
Response.Write(String.Format("<pagina_retorno>""msg=Saldo: {0:c}""", 123.44))
Response.End()
End If
Response.Write("<pagina_retorno>""msg=Opcao Invalida""")
End Sub
</script>
Ruby on Rails
class AuthController < ApplicationController
def index
if params[:buffer].nil?
return render :text => "Buffer não informado"
end
inf = params[:buffer].split(',')
if inf[2] == "1"
return render :text => "<pagina_retorno>\"msg=Venda: R$ #{(inf[3].to_f)/100}\""
end
if inf[2] == "2"
return render :text => "<pagina_retorno>\"msg=Saldo: R$ 10.44\""
end
render :text => "<pagina_retorno>\"msg=Opcao Invalida\""
end
end
PHP
<?php
if ($_GET["buffer"] == null){
print("Buffer não informado");
return;
}
$inf = explode(',',$_GET["buffer"]);
if ($inf[2] == "1"){
$valor = floatval($inf[3]) / 100;
print("<pagina_retorno>\"msg=Venda: R$ " . $valor . "\"");
return;
}
if ($inf[2] == "2"){
print("<pagina_retorno>\"msg=Saldo: R$ 10.44\"");
return;
}
print("<pagina_retorno>\"msg=Opcao Invalida\"");
?>
JSP
<%
if(request.getParameter("buffer") == null){
out.print("Buffer não informado");
return;
}
String[] inf = request.getParameter("buffer").split(",");
if(inf[2].equals("1")) {
String valor = String.valueOf(Double.parseDouble(inf[3]) / 100);
out.print("<pagina_retorno>\"msg=Venda: R$ " + valor + "\"");
return;
}
if(inf[2].equals("2")) {
out.print("<pagina_retorno>\"msg=Saldo: R$ 10.44\"");
return;
}
out.print("<pagina_retorno> \"msg=Opcao Invalida\"");
%>
