Ir para conteúdo

Arquivado

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

cezaarr

[Resolvido] webservice cielo

Recommended Posts

Bom dia!

 

Segue a função que fiz pra ler arquivos XML (Pelo PHP-GTK) ..... Espero que ajude!

function busca()
{
	$chave = $this->entry_chave_acesso->get_text();

	if ( $diretorio = opendir ('NFe_entrada/xml_recebidos')) 
	{
		//echo "\n Diretorio:\n$diretorio";
		while ( false !== ( $file = readdir ( $diretorio)))
		{
				//echo "$file\n";

				if($file!='.' and $file!='..')
				{
					//echo "\n Arquivo:\n$file";
				  	$xml = file_get_contents("NFe_entrada/xml_recebidos".bar."$file");
					//echo "\n$xml\n";
					// coletando os dados necessários no arquivo XML
					$dom = new DomDocument;
					$dom->loadXML($xml);

					$infProt = NULL;

					$infProt = $dom->getElementsByTagName("infProt")->item(0);

					$infNFe  = $dom->getElementsByTagName("infNFe")->item(0);

					if (!is_null($infProt))
					{
						$num_chave = $infProt->getElementsByTagName("chNFe")->item(0)->nodeValue; 

						if($chave===$num_chave)
						{
							$arquivo = $file;
								//echo "\n Nome Antigo:\n$arquivo";				
							$ide = $dom->getElementsByTagName("ide")->item(0);
							$emit = $dom->getElementsByTagName("emit")->item(0);

							$num_nfe = $ide->getElementsByTagName('nNF')->item(0)->nodeValue;
							$data_emis = $ide->getElementsByTagName('dEmi')->item(0)->nodeValue;
							$cnpj_emit = $emit->getElementsByTagName('CNPJ')->item(0)->nodeValue;
							//echo "\n$cnpj_emit";
							$nome_emit = $emit->getElementsByTagName('xNome')->item(0)->nodeValue;

							$this->getCNPJ($cnpj_emit);

							$this->entry_emitente->set_text($nome_emit);
							$this->entry_num_nfe->set_text($num_nfe);
							//$this->entry_data_emissao->set_text($data_emis);
							$this->entry_data_emissao->set_text($this->corrigeNumero($data_emis,"data"));
							$this->entry_cnpj->set_text($this->cpf_cnpj);

							$nome_inicio = substr($nome_emit, 0, 15);
							$nome_inicio = str_replace(' ', '', $nome_inicio);

							$this->arquivo_renomeado = $nome_inicio."_".$num_nfe."_".$data_emis.".xml";

							//echo "\n$this->arquivo_renomeado";


							if(rename("NFe_entrada/xml_recebidos".bar.$arquivo, "NFe_entrada/xml_validados".bar.$this->arquivo_renomeado))
								echo "\nRenomeado";
							else
								echo "\nNao renomeado";


							/////////////////////////////////////////////								
							$txt = 'Nota fiscal encontrada';
							$this->label_consulta->set_markup('<span weight="bold" foreground="red" size="11000">'.utf8_decode($txt).'</span>');
							Gtk::timeout_add(6000,array(&$this,'limpa_status'));
							$this->entry_chave_acesso->grab_focus;
							//return; 
							$this->func_gravar();
							break;
						}				
					}
					else
					{
						$txt = "Arquivo ".$file." Invalido!";
						$this->label_consulta->set_markup('<span weight="bold" foreground="red" size="11000">'.utf8_decode($txt).'</span>');
						//Gtk::timeout_add(6000,array(&$this,'limpa_status'));
					}	
				}
		}

	}
	else
	{
		// RESPOSTA CASO A CONSULTA NÃO RETORNE O VALOR PROCURADO
		/* $txt = 'Erro abrindo diretorio';
		$this->label_consulta->set_markup('<span weight="bold" foreground="red" size="11000">'.utf8_decode($txt).'</span>');
		Gtk::timeout_add(6000,array(&$this,'limpa_status')); */

		$txt = 'Nota fiscal não encontrada';
		$this->label_consulta->set_markup('<span weight="bold" foreground="red" size="11000">'.utf8_decode($txt).'</span>');
		Gtk::timeout_add(6000,array(&$this,'limpa_status'));
		$this->entry_chave_acesso->grab_focus;
	}

 

Qualquer dúvida estou a disposição!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem vamos em partes ...

 

( vou retirar tudo o que meu sistema usa )

 

Lendo o arquivo XML:

 

$xml = file_get_contents("diretorio/arquivo.xml");
    $dom = new DomDocument;
    $dom->loadXML($xml);

 

Depois de você der o Load no XML, você deve entrar TAG por TAG até onde o valor que você quer está.

 

Exemplo:

 

No caso de Nota fiscal eletronica (onde utilizo em meu sistema) tenho que entrar nas TAG's principais:

 

$infProt = $dom->getElementsByTagName("infProt")->item(0);
    $infNFe  = $dom->getElementsByTagName("infNFe")->item(0);

 

Agora, entro numa TAG principal, e suas Sub-TAG's:

 

Ide --> TAG Principal

emit --> TAG com os dados do Cliente / Fornecedor

nNF --> Numero da nota fiscal // Note o nodeValue (Utilizado para retornar valores da TAG)

 

$ide = $dom->getElementsByTagName("ide")->item(0);
$emit = $dom->getElementsByTagName("emit")->item(0);
$num_nfe = $ide->getElementsByTagName('nNF')->item(0)->nodeValue;

 

 

Espero ter sido claro.... mas caso contrário.... só dá um grito aew!

 

Flws!

Compartilhar este post


Link para o post
Compartilhar em outros sites

To com outro problema agora , fiz a <requsicao-tid/> e eu tenho agora o TID , só que quando vou fazer qualquer outra requisição , ele da o erro 001 , que é o erro de XML , mas eu nao to achando nenhum erro pois eu copiei exatamente igual ao do exemplo. AJUDA-ME ;)

 

<?xml version="1.0" encoding="ISO-8859-1"?>
<requisicao-autorizacao-portador id="7" versao="1.0.0" xmlns="http://ecommerce.cbmp.com.br">
	<tid>%s</tid>
	<dados-ec>
		<numero>%d</numero>
		<chave>%s</chave>
	</dados-ec>
	<dados-cartao>
		<numero>4539515241529884</numero>
		<validade>201212</validade>
		<indicador>1</indicador>
		<codigo-seguranca>532</codigo-seguranca>
		<nome-portador>Felipe Umpierre</nome-portador>
	</dados-cartao>
	<dados-pedido>
		<numero>123</numero>
		<valor>100</valor>
		<moeda>986</moeda>
		<data-hora>2010-09-06T11:21:57</data-hora>
		<idioma>PT</idioma>
	</dados-pedido>
	<forma-pagamento>
		<produto>1</produto>
		<parcelas>1</parcelas>
	</forma-pagamento>
	<capturar-automaticamente>false</capturar-automaticamente>
</requisicao-autorizacao-portador>

Todos os dados são de teste .

 

Felipe

Compartilhar este post


Link para o post
Compartilhar em outros sites

assim , quando eu faço a consulta , ao inves dele me retornar a resposta da consulta ele me devolve o codigo '001' que na pagina de erros é :

 

Erro

Mensagem inválida

 

Descrição

A mensagem XML está fora do formato especificado pelo arquivo ecommerce.xsd

 

Ação

Revisar as informações enviadas no arquivo XML frente as especificações.

 

No aguarde . Felipe

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sejamos mais claros...

 

A partir do xml que você está fazendo a consulta?

 

Onde é feita essa consulta, me explica melhor...que agora eu que to boiando na situação....

Compartilhar este post


Link para o post
Compartilhar em outros sites

vou te passar o codigo da minha pagina de retorno.

 


<?php

$requisicao = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<requisicao-tid id="5" versao="1.0.0" xmlns="http://ecommerce.cbmp.com.br">
	<dados-ec>
		<numero>13224356</numero>
		<chave>jhjh43j2h4jh35h2j4h522</chave>
	</dados-ec>
    <forma-pagamento>
    	<produto>1</produto>
        <parcelas>1</parcelas>
    </forma-pagamento>
</requisicao-tid>
XML;
//FAÇO A REQUISIÇÃO DO TID
 /**
 * Iniciando CURL
 */
 $curl = curl_init();
 
 /**
 * Verificamos se o recurso CURL foi criado com êxito
 */
 if ( is_resource( $curl ) ){
        curl_setopt( $curl , CURLOPT_HEADER , 0 );
        curl_setopt( $curl , CURLOPT_SSL_VERIFYPEER, 0);
        curl_setopt( $curl , CURLOPT_RETURNTRANSFER , 1 );
        curl_setopt( $curl , CURLOPT_FOLLOWLOCATION , 0 );
        curl_setopt( $curl , CURLOPT_URL , 'https://qasecommerce.cielo.com.br/servicos/ecommwsec.do' );
        curl_setopt( $curl , CURLOPT_POST , 1 );
        curl_setopt( $curl , CURLOPT_POSTFIELDS , http_build_query( array( 'mensagem' => $requisicao ) ) );
 
        $xml = curl_exec( $curl ); $ern = curl_errno( $curl ); $err = curl_error( $curl );
 
        curl_close( $curl );
 
        if ( (bool) $ern ){
                echo 'Ocorreu um erro[' , $ern , ']: ' , $err;
        } else {
                //var_dump( $xml , $ern , $err );
                                print_r($xml."<br><hr><br>");
                                print_r($ern."<br><hr><br>");
                                print_r($err."<br><hr><br>");
                                $DadosEnvio = simplexml_load_string($xml);



        }
 } else {
        echo 'erro';
 }
 echo "<br /><br /><br />".$xml."<br /><br />";
 $requisicao_captura = <<<XML
<?xml version="1.0" encoding="ISO-8859-1"?>
<requisicao-autorizacao-portador id="7" versao="1.0.0" xmlns="http://ecommerce.cbmp.com.br">
	<tid>%s</tid>
	<dados-ec>
		<numero>%d</numero>
		<chave>%s</chave>
	</dados-ec>
	<dados-cartao>
		<numero>4539515241529884</numero>
		<validade>201212</validade>
		<indicador>1</indicador>
		<codigo-seguranca>532</codigo-seguranca>
		<nome-portador>Felipe Umpierre</nome-portador>
	</dados-cartao>
	<dados-pedido>
		<numero>123</numero>
		<valor>100</valor>
		<moeda>986</moeda>
		<data-hora>2010-09-06T11:21:57</data-hora>
		<idioma>PT</idioma>
	</dados-pedido>
	<forma-pagamento>
		<produto>1</produto>
		<parcelas>1</parcelas>
	</forma-pagamento>
	<capturar-automaticamente>false</capturar-automaticamente>
</requisicao-autorizacao-portador>

XML;

//FAÇO A AUTORIZAÇÃO

 $tid       = '$xml';
 
 $afiliacao = 11111111111111;
 
 $chave     = 'as23289asdf82348923sd3';
 
 
 
 /**
 * Iniciando CURL
 */
 $curl = curl_init();
 
 /**
 * Verificamos se o recurso CURL foi criado com êxito
 */
 if ( is_resource( $curl ) ){
        curl_setopt( $curl , CURLOPT_HEADER , 0 );
        curl_setopt( $curl , CURLOPT_SSL_VERIFYPEER, 0);
        curl_setopt( $curl , CURLOPT_RETURNTRANSFER , 1 );
        curl_setopt( $curl , CURLOPT_FOLLOWLOCATION , 0 );
        curl_setopt( $curl , CURLOPT_URL , 'https://qasecommerce.cielo.com.br/servicos/ecommwsec.do' );
        curl_setopt( $curl , CURLOPT_POST , 1 );
        curl_setopt( $curl , CURLOPT_POSTFIELDS , http_build_query( array( 'mensagem' => $requisicao_captura ) ) );
 
        $xml_captura = curl_exec( $curl ); $ern = curl_errno( $curl ); $err = curl_error( $curl );
 
        curl_close( $curl );
 
        if ( (bool) $ern ){
                echo 'Ocorreu um erro[' , $ern , ']: ' , $err;
        } else {
                var_dump( $xml_captura , $ern , $err );
                                print_r($xml."<br><hr><br>");
                                print_r($ern."<br><hr><br>");
                                print_r($err."<br><hr><br>");
                                $DadosEnvio = simplexml_load_string($xml_captura);

                                //echo "<pre>".$DadosEnvio."</pre>";
                                var_dump($xml_captura);
                                echo "<br />";
                                print_r($xml_captura);
                                echo "<br />".$xml_captura;

        }
 } else {
        echo 'erro';
 }
 ?>

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pior que eu verifiquei ,e ele so tem essas três tags.

O manual nao fala mais nada sobre isso , por isso estou achando errado , por que já olhei a pagina do ecommerce.xsd

mas nao entendi nada .

 

Origado pela ajuda.

 

Felipe

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu sei disso , estou falando que quando monto o layout do xml , de uma consulta basica do manual , eu copio todos os campos dele , e ele me retorna o erro 001 , jah tentei usar outras consultas , mas em todas elas ele retorna o mesmo valor.

 

Obrigado pela ajuda.

 

Felipe

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim sim , jah consigo fazer essa requisição , pego o tid , vou para a rea segura , mas nao consigo fazer mais nenhuma colsulta com o TID , pq ele aparece aquele erro que eu informei.

 

Felipe

 

POr um acaso , eu devo guardar o TID em banco ? para que ele nao mude de valor ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

por um acaso , você jah conseguiu fazer a homologação FreedFelipe ?

 

AJUDA - faço a requisicao-captura , e ele me retorna um erro , ai fui no manul , vi qual era o erro 030 , só que não consegui entender ele , mais uma coisa , a requisicao-consulta eu consigo fazer , agora , como faço para pegar os valores de cada um individualmente ? consegui alinhaar eles com foreach , so que nao pegar dado por dado.

 

Obrigado pela ajuda

 

Felipe

Compartilhar este post


Link para o post
Compartilhar em outros sites

POr um acaso , eu devo guardar o TID em banco ? para que ele nao mude de valor ?

 

O TID SEMPRE deve ser guardado em banco... ele serve para autorização futura (caso tenha problemas no ato da compra), captura da venda e consulta.

 

por um acaso , você jah conseguiu fazer a homologação FreedFelipe ?

 

AJUDA - faço a requisicao-captura , e ele me retorna um erro , ai fui no manul , vi qual era o erro 030 , só que não consegui entender ele , mais uma coisa , a requisicao-consulta eu consigo fazer , agora , como faço para pegar os valores de cada um individualmente ? consegui alinhaar eles com foreach , so que nao pegar dado por dado.

 

Obrigado pela ajuda

 

Felipe

 

Pelo oq entendi, você está em modo de testes e não foi homologado ainda, confere? Se sim, você não vai conseguir capturar uma venda de fato... o trabalho de desenvolvimento vai até a consolidação da venda "fake".

A captura é somente para transações válidas, e por isso dá erro 30... status inválido para captura.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exatamente isso Gregolin , estou em faze de testes , mas como saberei se está funcionando direitnho se nao posso capturar uma venda "fake" ? Isso me deixa sem escolhas, tenho que por ao ar e arriscar ?

A unica requisição que consigo fazer é a de consulta e de cancelamento. nem a do portador eu consigo fazer.

 

Ajude-me :lol:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exatamente isso Gregolin , estou em faze de testes , mas como saberei se está funcionando direitnho se nao posso capturar uma venda "fake" ? Isso me deixa sem escolhas, tenho que por ao ar e arriscar ?

A unica requisição que consigo fazer é a de consulta e de cancelamento. nem a do portador eu consigo fazer.

 

Ajude-me :lol:

 

Mas calma, vi algumas coisas confusas nas suas msgs... você quer fazer em qual formato? você vai passar os dados do cartão do cliente ou ele vai digitar na tela deles? Se oq você vende for muito específico faz sentido você mesmo colher os dados do cartão do cliente e passar no XML, mas recomendo q faça no outro formato, em q só solicita a transação (XML requisicao-transacao). Ela, além de tirar uam dor de cabeça do seu lado (de manipular os dados do cartão do cliente), permite transações autenticadas, q não tem chance de chargeback...

 

Sobre a captura, é algo muito simples cara... a encrenca é realmente efetuar a venda (cobrança no cartão), em q há "idas e vindas" de dados... você pede a transação, ela volta com o TID, o cliente digita os dados do cartão e só depois volta pra sua loja com uma resposta... se isso tudo está funfando ok, a captura é algo muito simples em q você só precisa montar o XML (com o TID, e aí q disse para você armazenar isso em banco) executá-lo e recebe resposta de OK ou NÃO.

 

Hj em dia estou na fase de desenvolvimento ainda do formato webservice, mas utilizo há mais de 6 anos o formato VBV (Verified by Visa) q é semelhante (vários XMLs trocados e tal, porém em servidor Windows). Não sei se você já está sabendo, mas foi lançado nessa segunda q passou o webservice 1.1.0, q permite a venda tbm de MASTERCARD (na versão 1.0.0 era só Visa).

 

Não muda quase nada, mas é bom você pegar a nova documentação.

 

Valeu!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara , tu me esclareceu muita coisa , muito obrigado

 

So mais uma duvida , eu recebo deles um xml , que dpois transformo em array , nesse array eu consigo pegar todos os valores e mostrar na pagina , mas como faço para pegar um valor determinado e mostrar so o valor dele ?

 

Obrigado

 

Felipe

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.