depois de muito quebrar a cabeça, localizei um artigo na net ótimo que converte a DLL que o itaú fornece pra integração de sites com o shopline... graças ao CAIO....
meu site tá comunicando com o itaú... até gerou boletos em minha conta... td ok... ele me dá o retorno, só que meu problema está aí... esse retorno vem criptografado e eu não estou conseguindo decriptá-lo... o função que tenho não está funcionando... pelo - comigo...
Alguém que já desenvolveu essa integração pode me ajudar?
existe a DLL ou a CLASS... mas não consegui usá-las ... o que melhor funcionou foi mesmo a em php.... além de que meu SO é Windows... e do servidor onde a página é hospedada é Linux... e DLL não funciona em Linux....
Obrigada....
abaixo estou postando o código que o Caio me passou... (ah... já pedi ajuda pra ele, mas acredito que não está lendo o forum onde o encontrei pois não me respondeu ainda....)
essa é a minha classe_iatu.php
<?php
class Itaucripto {
public $codEmp;
public $pedido;
public $valor;
public $observacao;
public $nomeSacado;
public $codigoInscricao;
public $numeroInscricao;
public $enderecoSacado;
public $bairroSacado;
public $cepSacado;
public $cidadeSacado;
public $estadoSacado;
public $dataVencimento;
public $urlRetorna;
public $obsAd1;
public $obsAd2;
public $obsAd3;
private $CHAVE_ITAU = 'SEGUNDA12345ITAU';
private $TAM_COD_EMP = 26;
private $TAM_CHAVE = 16;
private $sbox;
private $key;
private function Algoritmo($s, $s1) {
$k = 0;
$l = 0;
$r = '';
$this->Inicializa($s1);
for($j = 1; $j <= strlen($s); $j++) {
$k = ($k + 1) % 256;
$l = ($l + $this->sbox[$k]) % 256;
$i = $this->sbox[$k];
$this->sbox[$k] = $this->sbox[$l];
$this->sbox[$l] = $i;
$i1 = $this->sbox[($this->sbox[$k] + $this->sbox[$l]) % 256];
$j1 = ord(substr($s, $j - 1, 1)) ^ $i1;
$r = $r.chr($j1);
} // for
return $r;
} // function Algoritmo
private function Inicializa($s) {
$len = strlen($s);
for ($j = 0; $j <= 255; $j++) {
$this->key[$j] = ord(substr($s, $j % $len, 1));
$this->sbox[$j] = $j;
} // for
$l = 0;
for ($k = 0; $k <= 255; $k++) {
$l = ($l + $this->sbox[$k] + $this->key[$k]) % 256;
$i = $this->sbox[$k];
$this->sbox[$k] = $this->sbox[$l];
$this->sbox[$l] = $i;
} // for
} // function Inicializa
private function Converte($s) {
for($i = 0, $r = chr(rand(65, 90)); $i < strlen($s); $i++) {
$r = $r.ord(strval(substr($s, $i, 1))).chr(rand(65, 90));
} // for
return $r;
} // function Converte
private function Desconverte($s) {
return join(array_map('chr', split('[A-Z]', substr(substr($s, 1), 0, strlen($s) - 2))));
} // function Desconverte
private function Corta($str, $n) {
return str_pad(substr($str, 0, $n), $n, ' ', STR_PAD_RIGHT);
} // function Corta
public function geraDados($codEmp,$pedido,$valor,$obs,$chave,$nomeSacado,$codigoInscricao,$numeroInscricao,
$enderecoSacado,$bairroSacado,$cepSacado,$cidadeSacado,$estadoSacado,$dataVencimento,$urlRetorna,$obsAd1,$obsAd2,
$obsAd3) {
if (strlen($codEmp) != $this->TAM_COD_EMP) {
throw new Exception('Tamanho do código da empresa diferente de 26 posições');
} // if
if (strlen($chave) != $this->TAM_CHAVE) {
throw new Exception('Tamanho da chave diferente de 16 posições');
} // if
if ((int) $pedido == 0 || (int) $pedido > 99999999) {
throw new Exception('Número do pedido inválido');
} // if
if (!preg_match('!^\d{2,8}\,\d{2}$!', $valor)) {
throw new Exception('Valor da compra inválido. Formato [000000]00,00');
} // if
if ((int) $codigoInscricao < 1 || (int) $codigoInscricao > 2) {
throw new Exception('Código de inscrição inválido');
} // if
if (($numeroInscricao = preg_replace('!\D!', '', $numeroInscricao)) && strlen($numeroInscricao) > 14) {
throw new Exception('Número de inscrição inválido');
} // if
if (($cepSacado = preg_replace('!\D!', '', $cepSacado)) && strlen($cepSacado) < 8) {
throw new Exception('CEP inválido');
} // if
if (strlen($estadoSacado) < 2 || strlen($estadoSacado) > 2) {
throw new Exception('O estado deve ser uma sigla de no máximo 2 caracteres (UF)');
} // if
if (!preg_match('!^(3[0-1]|0[1-9]|[1-2][0-9])(0[1-9]|1[0-2])2[0-9]{3}$!', $dataVencimento)) {
throw new Exception('Data de vencimento inválida');
} // if
if (strlen($obsAd1) > 60) {
throw new Exception('Observação opcional #1 inválida');
} // if
if (strlen($obsAd2) > 60) {
throw new Exception('Observação opcional #2 inválida');
} // if
if (strlen($obsAd3) > 60) {
throw new Exception('Observação opcional #3 inválida');
} // if
$codEmp = strtoupper($codEmp);
$valor = substr($valor, 0, strlen($valor) - 3).substr($valor, -2);
$valor = str_pad($valor, 10, '0', STR_PAD_LEFT);
$pedido = str_pad($pedido, 8, '0', STR_PAD_LEFT);
$obs = $this->Corta($obs, 40);
$nomeSacado = $this->Corta($nomeSacado, 30);
$codigoInscricao = $this->Corta($codigoInscricao, 2);
$numeroInscricao = $this->Corta($numeroInscricao, 14);
$enderecoSacado = $this->Corta($enderecoSacado, 40);
$bairroSacado = $this->Corta($bairroSacado, 15);
$cepSacado = $this->Corta($cepSacado, 8);
$cidadeSacado = $this->Corta($cidadeSacado, 15);
$estadoSacado = $this->Corta($estadoSacado, 2);
$dataVencimento = $this->Corta($dataVencimento, 29);
$urlRetorna = $this->Corta($urlRetorna, 60);
$obsAd1 = $this->Corta($obsAd1, 60);
$obsAd2 = $this->Corta($obsAd2, 60);
$obsAd3 = $this->Corta($obsAd3, 60);
$chave = strtoupper($chave);
$ret_DC = $pedido . $valor . $obs . $nomeSacado . $codigoInscricao . $numeroInscricao . $enderecoSacado . $bairroSacado . $cepSacado . $cidadeSacado . $estadoSacado . $dataVencimento . $urlRetorna . $obsAd1 . $obsAd2 . $obsAd3;
$ret_DC = $this->Algoritmo($ret_DC, $chave);
$ret_DC = $this->Algoritmo($codEmp.$ret_DC, $this->CHAVE_ITAU);
return $this->Converte($ret_DC);
} // function geraDados
private function decripto($ret_DC, $chave) {
$s = $this->Desconverte($ret_DC);
$s = $this->Algoritmo($s, $this->CHAVE_ITAU);
$this->codEmp = substr($s, 0, 26);
$s = $this->Algoritmo(substr($s, 26), $chave);
$this->pedido = substr($s, 0, 8);
$this->valor = substr($s, 8, 10);
$this->observacao = substr($s, 18, 40);
$this->nomeSacado = substr($s, 58, 30);
$this->codigoInscricao = substr($s, 88, 2);
$this->numeroInscricao = substr($s, 90, 14);
$this->enderecoSacado = substr($s, 104, 40);
$this->bairroSacado = substr($s, 144, 15);
$this->cepSacado = substr($s, 159, 8);
$this->cidadeSacado = substr($s, 167, 15);
$this->estadoSacado = substr($s, 182, 2);
$this->dataVencimento = substr($s, 184, 29);
$this->urlRetorna = substr($s, 213, 60);
$this->obsAd1 = substr($s, 273, 60);
$this->obsAd2 = substr($s, 333, 60);
$this->obsAd3 = substr($s, 393, 60);
$this->valor = number_format((int) $this->valor / 100, 2, ',', '.');
} // function decripto
} // class Itaucripto
?>
Pergunta
mhfferreira
olá pessoal... estou ficando quase louca aqui...
depois de muito quebrar a cabeça, localizei um artigo na net ótimo que converte a DLL que o itaú fornece pra integração de sites com o shopline... graças ao CAIO....
meu site tá comunicando com o itaú... até gerou boletos em minha conta... td ok... ele me dá o retorno, só que meu problema está aí... esse retorno vem criptografado e eu não estou conseguindo decriptá-lo... o função que tenho não está funcionando... pelo - comigo...
Alguém que já desenvolveu essa integração pode me ajudar?
existe a DLL ou a CLASS... mas não consegui usá-las ... o que melhor funcionou foi mesmo a em php.... além de que meu SO é Windows... e do servidor onde a página é hospedada é Linux... e DLL não funciona em Linux....
Obrigada....
abaixo estou postando o código que o Caio me passou... (ah... já pedi ajuda pra ele, mas acredito que não está lendo o forum onde o encontrei pois não me respondeu ainda....)
essa é a minha classe_iatu.php
essa é a minha classe_iatu.php meu ret_itau.phpdesculpem... o nome correto do 1º código é classe_itau.php
e o segundo código é a minha chamada a tela do shopline do itau
Link para o comentário
Compartilhar em outros sites
5 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.