Carcleo 4 Denunciar post Postado Abril 5, 2010 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
Jaime_Pinheiro 0 Denunciar post Postado Abril 5, 2010 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
Carcleo 4 Denunciar post Postado Abril 6, 2010 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
Jaime_Pinheiro 0 Denunciar post Postado Abril 6, 2010 Na verdade, não. O resultado da requisição $url é um texto em formato de querystring (param1=valor1¶m2=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
Carcleo 4 Denunciar post Postado Abril 6, 2010 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
Jaime_Pinheiro 0 Denunciar post Postado Abril 6, 2010 Você está utilizando algum kit de integração? Qual é o servidor? Locaweb? Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Abril 6, 2010 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
Jaime_Pinheiro 0 Denunciar post Postado Abril 6, 2010 Nunca trabalhei com RedeCard. No ItauShopLine pelo menos, tem de abrir um socket e não window.open... Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Abril 6, 2010 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=2Vendo este link eu sei que ele tem 2 parametros: parametro e teste, cujos valores são respectivamente um e 2eu 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