Quem está começando a fazer a integração de sua loja virtual com o Komerci e está lendo o manual da versão Integrada, se deparou com a parte da geração do código de verificação. Eles disponibilizam uma classe Java denominada CodVer.class. Daí você pensa: "Para eles disponibilizarem uma classe específica em Java deve ser porque é algo muito específico ou cabuloso!". Mas não é... Não sei porque no próprio manual eles não colocam um pseudo-algoritmo ou diagramas que possam facilitar para a elaboração nas demais linguagens. No mesmo manual eles dizem que disponibilizam um ActiveX para quem usa ASP Clássico. É de dar risada! Bem, o código é bem simples. Já converti do Java para C# e, para quem está familiarizado com C/Java, vai entender o algoritmo rapidinho e elaborar o seu também:
public string GeraCodigoVerificao(string _numfil, string _valor)
{
// Início da codificação
string codigo = string.Empty;
// Número da filiação
int numfil = 0;
numfil = int.Parse(_numfil);
// Total
int total = 0;
string parteInteira = _valor.Substring(0, _valor.IndexOf('.'));
total = int.Parse(parteInteira);
// Codificação a hora
int segundosAgora = DateTime.Now.Second;
int segundosAgoraCodificados = 0;
switch (segundosAgora)
{
case 0:
segundosAgoraCodificados = 11;
break;
case 1:
segundosAgoraCodificados = 17;
break;
case 2:
segundosAgoraCodificados = 21;
break;
case 3:
segundosAgoraCodificados = 31;
break;
case 4:
segundosAgoraCodificados = 56;
break;
case 5:
segundosAgoraCodificados = 34;
break;
case 6:
segundosAgoraCodificados = 42;
break;
case 7:
segundosAgoraCodificados = 3;
break;
case 8:
segundosAgoraCodificados = 18;
break;
case 9:
segundosAgoraCodificados = 13;
break;
case 10:
segundosAgoraCodificados = 12;
break;
case 11:
segundosAgoraCodificados = 18;
break;
case 12:
segundosAgoraCodificados = 22;
break;
case 13:
segundosAgoraCodificados = 32;
break;
case 14:
segundosAgoraCodificados = 57;
break;
case 15:
segundosAgoraCodificados = 35;
break;
case 16:
segundosAgoraCodificados = 43;
break;
case 17:
segundosAgoraCodificados = 4;
break;
case 18:
segundosAgoraCodificados = 19;
break;
case 19:
segundosAgoraCodificados = 14;
break;
case 20:
segundosAgoraCodificados = 9;
break;
case 21:
segundosAgoraCodificados = 20;
break;
case 22:
segundosAgoraCodificados = 23;
break;
case 23:
segundosAgoraCodificados = 33;
break;
case 24:
segundosAgoraCodificados = 58;
break;
case 25:
segundosAgoraCodificados = 36;
break;
case 26:
segundosAgoraCodificados = 44;
break;
case 27:
segundosAgoraCodificados = 5;
break;
case 28:
segundosAgoraCodificados = 24;
break;
case 29:
segundosAgoraCodificados = 15;
break;
case 30:
segundosAgoraCodificados = 62;
break;
case 31:
segundosAgoraCodificados = 25;
break;
case 32:
segundosAgoraCodificados = 34;
break;
case 33:
segundosAgoraCodificados = 59;
break;
case 34:
segundosAgoraCodificados = 37;
break;
case 35:
segundosAgoraCodificados = 45;
break;
case 36:
segundosAgoraCodificados = 6;
break;
case 37:
segundosAgoraCodificados = 25;
break;
case 38:
segundosAgoraCodificados = 16;
break;
case 39:
segundosAgoraCodificados = 27;
break;
case 40:
segundosAgoraCodificados = 63;
break;
case 41:
segundosAgoraCodificados = 26;
break;
case 42:
segundosAgoraCodificados = 35;
break;
case 43:
segundosAgoraCodificados = 60;
break;
case 44:
segundosAgoraCodificados = 38;
break;
case 45:
segundosAgoraCodificados = 46;
break;
case 46:
segundosAgoraCodificados = 7;
break;
case 47:
segundosAgoraCodificados = 26;
break;
case 48:
segundosAgoraCodificados = 17;
break;
case 49:
segundosAgoraCodificados = 28;
break;
case 50:
segundosAgoraCodificados = 14;
break;
case 51:
segundosAgoraCodificados = 36;
break;
case 52:
segundosAgoraCodificados = 2;
break;
case 53:
segundosAgoraCodificados = 39;
break;
case 54:
segundosAgoraCodificados = 47;
break;
case 55:
segundosAgoraCodificados = 8;
break;
case 56:
segundosAgoraCodificados = 29;
break;
case 57:
segundosAgoraCodificados = 22;
break;
case 58:
segundosAgoraCodificados = 55;
break;
case 59:
segundosAgoraCodificados = 33;
break;
}
// Cálculos e atribuições
segundosAgora = segundosAgoraCodificados;
string pad = string.Empty;
if (segundosAgora < 10)
pad = "0";
else
pad = "";
string ipremoto = Request.ServerVariables["REMOTE_ADDR"];
int tamIP = ipremoto.Length;
int i_5_ = total + segundosAgora;
int i_6_ = segundosAgora + tamIP;
int i_7_ = segundosAgora * numfil;
int i_8_ = i_7_.ToString().Length;
// Monta o código
codigo = i_7_.ToString() + i_5_.ToString() + i_6_.ToString() + "-" + i_8_.ToString() + pad + segundosAgora.ToString();
// Retorna
return codigo;
}
Mostrando postagens com marcador komerci. Mostrar todas as postagens
Mostrando postagens com marcador komerci. Mostrar todas as postagens
Dar POST em um Form e Redirecionar para Página Externa com ASP.NET
Recentemente estava programando o envio de informações de pagamento para o Komerci (estrutura de pagamentos da Redecard) e em certo momento precisaria realizar um POST a um endereço passando parâmetros/variáveis a ela. Antes de partir para a solução, vou revisar aqui alguns conceitos básicos que podem ser usados para esse tipo de envio:
Agora vamos criar um método que irá criar os inputs com atributo hidden e seus respectivos valores, montar um JavaScript que força o POST e "startar" o processo:
private void PostRedirectAspNet()
{
StringBuilder formulario = new StringBuilder();
// Adiciono todos os campos e seus valores que devem ser passados via POST
formulario.Append("<input type=\"hidden\" name=\"TRANSACAO\" value=\"04\">");
// Crio um JavaScript para forçar o POST na página corrente
formulario.Append("<script language=\"javascript\">");
formulario.Append("var theForm = document.forms['formAsp']; if (!theForm) { theForm = document.formAsp; } ");
formulario.Append("theForm.action = \"http://thiagomarcal.blogspot.com\";");
formulario.Append("theForm.method = \"post\";");
formulario.Append("theForm.submit();");
formulario.Append("</script>");
// Aplica o script gerado no Literal para iniciar o processo
FormularioPost.Text = formulario.ToString();
}
Assim, basta chamá-lo onde quiser que ele irá gerar as tags HTML contendo as informações desejadas, realizará o POST e, consequentemente, seu redirecionamento. Bem simples, não? Esse método (de fazer) pode ser aproveitado para quaisquer linguagem de programação (PHP, Java, ASP, .NET, CodFusion, etc). O importante é como providenciar seu funcionamento de acordo com a lógica.
- Responde.Redirect: Por esse método só podemos passar os parêmetros via GET;
- Server.Transfer: Por esse método podemos usar o POST mas se o destino estiver no mesmo domínio da aplicação;
- HttpWebRequest: Por esse método você pode fazer uma requisição através de uma conversão dos dados em bytes passando via POST/GET, contudo não há como fazer um redirecionamento;
- WebClient: Por esse método pode-se realizar a passagem de parâmetros, mas também não consegue fazer o redirecionamento após o envio.
Agora vamos criar um método que irá criar os inputs com atributo hidden e seus respectivos valores, montar um JavaScript que força o POST e "startar" o processo:
private void PostRedirectAspNet()
{
StringBuilder formulario = new StringBuilder();
// Adiciono todos os campos e seus valores que devem ser passados via POST
formulario.Append("<input type=\"hidden\" name=\"TRANSACAO\" value=\"04\">");
// Crio um JavaScript para forçar o POST na página corrente
formulario.Append("<script language=\"javascript\">");
formulario.Append("var theForm = document.forms['formAsp']; if (!theForm) { theForm = document.formAsp; } ");
formulario.Append("theForm.action = \"http://thiagomarcal.blogspot.com\";");
formulario.Append("theForm.method = \"post\";");
formulario.Append("theForm.submit();");
formulario.Append("</script>");
// Aplica o script gerado no Literal para iniciar o processo
FormularioPost.Text = formulario.ToString();
}
Assim, basta chamá-lo onde quiser que ele irá gerar as tags HTML contendo as informações desejadas, realizará o POST e, consequentemente, seu redirecionamento. Bem simples, não? Esse método (de fazer) pode ser aproveitado para quaisquer linguagem de programação (PHP, Java, ASP, .NET, CodFusion, etc). O importante é como providenciar seu funcionamento de acordo com a lógica.
