Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Carcleo

Problemas com xml

Recommended Posts

Ola pessoal.

 

To precisando de uma luz:

 

Seguinte:

 

Assim como no caso dos correios qe se usa simple_xml_load para receber por xml os valores das tarifas de sedex e pac, resolvi tentar tambem com o site da redecard.

 

Fiz o seguinte código:

    $url= "http://ecommerce.redecard.com.br/pos_virtual/confirma.asp?"
	      ."DATA=$DATA&"	
		  ."TRANSACAO=203&"
		  ."TRANSORIG=04&"
		  ."PARCELAS=00&"
		  ."FILIACAO=30355141&"
		  ."DISTRIBUIDOR=&"
		  ."TOTAL=$PRECO_TOTAL&"
		  ."NUMPEDIDO=$NUMPEDIDO&"
		  ."NUMAUTOR=$NUMAUTOR&"		  
		  ."NUMCV=$NUMCV&"		  
		  ."NUMSQN=$NUMSQN&"	  
		  ."ORIGEM_BIN=$ORIGEM_BIN&"
		  ."NUMPRG=$NUMPRG";	

         //AQUI JA FOI ENVIADA A SEGUNDA FASE3 E AGORA ESTA RECEBENDO O CÓDIGO DE CONFIRMAÇÃO.
		 //A função file irá enviar a url para a Redecard sem redirecionar(sair da NatureLavie) e, ao mesdo tempo, receber o rerorno da Redecdard
[code]		 
$file = simplexml_load_file($url); //linha 41
$CODRET = $file->xpath('CODRET');
$MSGRET = $file->xpath('MSGRET');

print "$CODRET";
print "<br>";
print "$MSGRET";		 
[/code]
E esta me rertornando o seguinte erro:
[code]
Warning: simplexml_load_file() [function.simplexml-load-file]: http://ecommerce.redecard.com.br/pos_virtual/confirma.asp?DATA=20100405&TRANSACAO=203&TRANSORIG=04&PARCELAS=00&FILIACAO=30355141&DISTRIBUIDOR=&TOTAL=71.3&NUMPEDIDO=27&NUMAUTOR=R71008&NUMCV=995688328&NUMSQN=995688328&ORIGEM_BIN=BRA&NUMPRG=0:1: parser error : Start tag expected, '<' not found in /home/nature/public_html/novo/retorno_cartao_conteudo.php on line 41

Warning: simplexml_load_file() [function.simplexml-load-file]: CODRET=4&MSGRET=TRANSACAO ESTORNADA in /home/nature/public_html/novo/retorno_cartao_conteudo.php on line 41

Warning: simplexml_load_file() [function.simplexml-load-file]: ^ in /home/nature/public_html/novo/retorno_cartao_conteudo.php on line 41

Fatal error: Call to a member function xpath() on a non-object in /home/nature/public_html/novo/retorno_cartao_conteudo.php on line 42

O que pode estar errado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu tentei este problema e descobri que o retorno não é um xml.

 

Rodei este código, que pode facilmente ser adaptado ao seu caso:

 

$url = "http://ecommerce.redecard.com.br/pos_virtual/confirma.asp?DATA=20100405&TRANSACAO=203&TRANSORIG=04&PARCELAS=00&FILIACAO=30355141&DISTRIBUIDOR=&TOTAL=71.3&NUMPEDIDO=27&NUMAUTOR=R71008&NUMCV=995688328&NUMSQN=995688328&ORIGEM_BIN=BRA&NUMPRG=0";
$file = file_get_contents($url); //linha 41
$file = parse_str($file);

print "$CODRET";
print "<br>";
print "$MSGRET";  

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pergunta de aprendiz:

 

Como voce fez esse texte para descobrir que o retorno não é um xml?

 

Outra pergunta.

 

Troquei o codigo que estava (embora dava resultado correto) antes e que eu não estava conseguindo manipular

print "<table align='center'";
		 print "<tr><td align='center'>";
		 
		  $file = file($url); 
			  $retorna = $file[0]; 
			  $arrLinhas = explode("&", $retorna);
			  $i = 0; 
			  foreach ($arrLinhas AS $line) { 
				 list($variavel, $valor) = explode('=', ($line)); 
				 $variavel = trim($variavel); 
				// $$variavel = $valor ; 
				 $i ++; 
				 print "<br>";
				 print $valor;	
			                                }
		 print "</td></tr>";				 
		 print "</table>";				 
							
pelo teu (que tambem deu certo)

$file = file_get_contents($url); //linha 41
$file = parse_str($file);
print "<table align='center'";
print "<tr><td align='center'>";
print "$CODRET";
print "<br>";
print "$MSGRET"; 		 
print "</td></tr>";				 
print "</table>";	
Pergunta: os resultados são osa mesmos? Não ha perca de transferencia de dados?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade, não. O resultado da requisição $url é um texto em formato de querystring (param1=valor1&param2=valor2...). A função parse_str é nativa do PHP e faz exatamente o mesmo que extract faz em um array associativo: Cria variáveis com os nomes iguais às chaves.

 

Esse foi o retorno obtido ao requisitar $url:

CODRET=4&MSGRET=TRANSACAO ESTORNADA

 

Saiba mais:

http://www.php.net/manual/pt_BR/function.extract.php

http://br.php.net/manual/pt_BR/function.parse-str.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só mais uma:

 

olha só:

 

na minha aplicação, o internauta faz a compra, escolhe o cartão e é direcionado para a Redecard onde colocará os dados do cartão.

 

Nesse ponto, assim que a redecard valida o cartão ela rertorna os códigos para o site da loja em target = blank e a pagina da validaçao da Rededard fica toda branca.

 

Mas dá tudo certo.

 

É assim mesmo?

 

E o serviço AVS?

Segue o codigo:

<?
//Abrindo conexao com o banco de dados 
$MySQL = new TMySQL();
$MySQL->connect($host, $db, $user, $pass);


$DATA = $_GET['DATA'];//8 Data da transação
$NUMPEDIDO = $_GET['NUMPEDIDO']; //16 Número do Pedido
$NR_CARTAO = $_GET['NR_CARTAO']; //16 Número do Cartão mascarado
$ORIGEM_BIN = $_GET['ORIGEM_BIN']; //3 Código de Nacionalidade do Emissor
$NUMAUTOR = $_GET['NUMAUTOR']; //6 Número de Autorização
$NUMCV = $_GET['NUMCV']; //9 Número do Comprovante de Venda (NSU)
$NUMAUTENT = $_GET['NUMAUTENT']; //27 Número de Autenticação
$NUMSQN = $_GET['NUMSQN']; //12 Número seqüencial único
$NUMPRG = $_GET['NUMPRG']; //1 Número correspondente ao programa de captura utilizado

///CASO DE ERROS
$CODRET = $_GET['CODRET']; //2 Código de erro
$MSGRET = $_GET['MSGRET']; //200 Mensagem de erro
if       ( !isset($CODRET)                             )  {
    $consulta=$MySQL->query("select PRECO_TOTAL from pedidos_cliente where ID_PEDIDO_CLIENTE=$NUMPEDIDO");	
	list($PRECO_TOTAL) = mysql_fetch_array($consulta);
    $url= "http://ecommerce.redecard.com.br/pos_virtual/confirma.asp?"
	      ."DATA=$DATA&"	
		  ."TRANSACAO=203&"
		  ."TRANSORIG=04&"
		  ."PARCELAS=00&"
		  ."FILIACAO=30355141&"
		  ."DISTRIBUIDOR=&"
		  ."TOTAL=$PRECO_TOTAL&"
		  ."NUMPEDIDO=$NUMPEDIDO&"
		  ."NUMAUTOR=$NUMAUTOR&"		  
		  ."NUMCV=$NUMCV&"		  
		  ."NUMSQN=$NUMSQN&"	  
		  ."ORIGEM_BIN=$ORIGEM_BIN&"
		  ."NUMPRG=$NUMPRG";	

         //AQUI JA FOI ENVIADA A SEGUNDA FASE3 E AGORA ESTA RECEBENDO O CÓDIGO DE CONFIRMAÇÃO.
		 //A função file irá enviar a url para a Redecard sem redirecionar(sair da NatureLavie) e, ao mesdo tempo, receber o rerorno da Redecdard
		 
$file = file_get_contents($url); 
$file = parse_str($file);
print "<table align='center'";
print "<tr><td align='center'>";
print "<br>";
print "Resultado da transaçao pela Redecard:";
print "<br>";
print "$MSGRET"; 		 
print "</td></tr>";				 
print "</table>";				 
							
   /*      print "<table align='center'";
		 print "<tr><td align='center'>";
		 
		  $file = file($url); 
			  $retorna = $file[0]; 
			  $arrLinhas = explode("&", $retorna);
			  $i = 0; 
			  foreach ($arrLinhas AS $line) { 
				 list($variavel, $valor) = explode('=', ($line)); 
				 $variavel = trim($variavel); 
				// $$variavel = $valor ; 
				 $i ++; 
				 print "<br>";
				 print $valor;	
			                                }
		 print "</td></tr>";				 
		 print "</table>";				 */
											
										
				$status = $_REQUEST['CODRET'];
	            if ($status > 1) {
	               $autent = $_REQUEST['MSGRET'];
	                             }
				else {
                       $URLCupom = "https://ecommerce.redecard.com.br/pos_virtual/cupom.asp?"
					   ."DATA=$_GET[DATA]&"
					   ."TRANSACAO=201&"
					   ."NUMAUTOR=$_GET[NUMAUTOR]&"
					   ."NUMCV=$_GET[NUMCV]&"
					   ."LANGUAGE=1";	
?>

<script LANGUAGE=javascript>
<!--
        vpos=window.open('<? echo $URLCupom; ?>','vpos','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=auto,resizable=no,copyhistory=no,width=280,height=440');
//-->
</SCRIPT>
<?                    }		  
                                                         }
else if (
		  $CODRET==50 or $CODRET==52 or $CODRET==54 or $CODRET==55 or $CODRET==57 or $CODRET==59 or $CODRET==61 or 
		  $CODRET==62 or $CODRET==64 or $CODRET==66 or $CODRET==67 or $CODRET==68 or $CODRET==70 or $CODRET==71 or 
		  $CODRET==73 or $CODRET==75 or $CODRET==78 or $CODRET==79 or $CODRET==80 or $CODRET==82 or $CODRET==83 or 
		  $CODRET==84 or $CODRET==85 or $CODRET==87 or $CODRET==89 or $CODRET==90 or $CODRET==91 or $CODRET==93 or 
		  $CODRET==94 or $CODRET==95 or $CODRET==97 or $CODRET==99
		 )
                                                         { print $MSGRET;  exit; }
else if  ( $CODRET==51 or $CODRET==92 or $CODRET==98  )  { print $MSGRET;  exit; }
else if  ( $CODRET==53                                )  { print $MSGRET;  exit; }
else if  ( $CODRET==76 or $CODRET==86                 )  { print $MSGRET;  exit; }
else if  ( $CODRET==58 or $CODRET==63 or  $CODRET==65 or  $CODRET==69 or  $CODRET==72 or  $CODRET==77 or $CODRET==96  )  
                                                         { print $MSGRET;  exit; }
else if  ( $CODRET==56 or $CODRET==60                 )  { print $MSGRET;  exit; }
else if  ( $CODRET==74                                )  { print $MSGRET;  exit; }
else if  ( $CODRET==81                                )  { print $MSGRET;  exit; }
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não, neão estou usando kit nehum.

 

Apenas o form dos cartões e este arquivo retorno_catao.php.

 

só isso.

 

Estou conferindo la no painel da redecartd e as compras estão sendo processadas certinho.

 

Mas, apósa validação do cartão a pagina da redecard fica toda branca e, através de target=blank,. abre a pagina retorno_catao.php

 

Na verdade, não tenhp a minima das mínimas ideias de como usar (ou, pior ainda, criar) um webservioe (como diz no manual).

 

Se puder ajudar fico agradecido.

 

E a questão do AVS? É pago?

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok

 

Então como faço para manipular esses dados que chegam

$file = file($url); 
                          $retorna = $file[0]; 
                          $arrLinhas = explode("&", $retorna);
                          $i = 0; 
                          foreach ($arrLinhas AS $line) { 
                                 list($variavel, $valor) = explode('=', ($line)); 
                                 $variavel = trim($variavel); 
                                 $variave2 = $valor ; 
                                 $i ++; 
                                                       }
Isso retorna duas variaveis Retorna

CODRET e MSGRET
quero escrever assim:

O código é:  $CODRET.
A mensagem é: $MSGRET.

No caso de uma url

 

http://www.url.com.br/parametro=um&teste=2
Vendo este link eu sei que ele tem 2 parametros: parametro e teste, cujos valores são respectivamente um e 2

eu quero saber como faço para descobrir se existe (ou não) um parametro chamado teste2 nessa url

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.